微信支付v3版本npm包
wechatpay-node-v3
# 微信支付v3 支持在ts和js中使用
欢迎大家加入一起完善这个api
前言
微信官方在2020-12-25正式开放了v3版本的接口,相比较旧版本v2有了不少改变,例如:
- 遵循统一的Restful的设计风格
- 使用JSON作为数据交互的格式,不再使用XML
- 使用基于非对称密钥的SHA256-RSA的数字签名算法,不再使用MD5或HMAC-SHA256
- 不再要求HTTPS客户端证书
- 使用AES-256-GCM,对回调中的关键信息进行加密保护
由于官方文档只支持java和php,所以我在这里使用ts简单的封装了一个版本,支持在js或者ts中使用,后续会更加完善这个npm包,谢谢。
使用
yarn add wechatpay-node-v3
(也可以用npm)
import WxPay from 'wechatpay-node-v3'; // 支持使用require
import fs from 'fs';
import request from 'superagent';const pay = new WxPay({appid: '直连商户申请的公众号或移动应用appid',mchid: '商户号',publicKey: fs.readFileSync('./apiclient_cert.pem'), // 公钥privateKey: fs.readFileSync('./apiclient_key.pem'), // 秘钥
});# 这里以h5支付为例
try {# 参数介绍请看h5支付文档 https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_3_1.shtmlconst params = {appid: '直连商户申请的公众号或移动应用appid',mchid: '商户号',description: '测试',out_trade_no: '订单号',notify_url: '回调url',amount: {total: 1,},scene_info: {payer_client_ip: 'ip',h5_info: {type: 'Wap',app_name: '网页名称 例如 百度',app_url: '网页域名 例如 https://www.baidu.com',},},};const nonce_str = Math.random().toString(36).substr(2, 15), // 随机字符串timestamp = parseInt(+new Date() / 1000 + '').toString(), // 时间戳 秒url = '/v3/pay/transactions/h5';# 获取签名const signature = pay.getSignature('POST', nonce_str, timestamp, url, params); # 如果是get 请求 则不需要params 参数拼接在url上 例如 /v3/pay/transactions/id/12177525012014?mchid=1230000109# 获取头部authorization 参数const authorization = pay.getAuthorization(nonce_str, timestamp, signature);const result = await request.post('https://api.mch.weixin.qq.com/v3/pay/transactions/h5').send(params).set({Accept: 'application/json','Content-Type': 'application/json','User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',Authorization: authorization,});console.log('result==========>', result.body);} catch (error) {console.log(error);}
如果你使用的是nest框架,请结合nest-wechatpay-node-v3
一起使用。
WxPay 介绍
import WxPay from 'wechatpay-node-v3';
或者 const WxPay = require('wechatpay-node-v3')
参数介绍
参数名称 | 参数介绍 | 是否必须 |
---|---|---|
appid | 直连商户申请的公众号或移动应用appid | 是 |
mchid | 商户号 | 是 |
serial_no | 证书序列号 | 否 |
publicKey | 公钥 | 是 |
privateKey | 密钥 | 是 |
authType | 认证类型,目前为WECHATPAY2-SHA256-RSA2048 | 否 |
userAgent | 自定义User-Agent | 否 |
key | APIv3密钥 | 否 有验证回调必须 |
注意
- serial_no是证书序列号 请在命令窗口使用
openssl x509 -in apiclient_cert.pem -noout -serial
获取 - 头部参数需要添加 User-Agent 参数
- 需要在商户平台设置APIv3密钥才会有回调,详情参看文档指引http://kf.qq.com/faq/180830E36vyQ180830AZFZvu.html
使用介绍
以下函数是我针对微信相关接口进行进一步封装,可以直接使用。
api名称 | 函数名 |
---|---|
h5支付 | transactions_h5 |
native支付 | transactions_native |
app支付 | transactions_app |
JSAPI支付 或者 小程序支付 | transactions_jsapi |
查询订单 | query |
关闭订单 | close |
申请交易账单 | tradebill |
申请资金账单 | fundflowbill |
下载账单 | downloadbill |
回调解密 | decipher_gcm |
合单h5支付 | combine_transactions_h5 |
合单native支付 | combine_transactions_native |
合单app支付 | combine_transactions_app |
合单JSAPI支付 或者 小程序支付 | combine_transactions_jsapi |
查询合单 | combine_query |
关闭合单 | combine_close |
获取序列号 | getSN |
申请退款 | refunds |
查询退款 | find_refunds |
签名验证 | verifySign |
微信提现到零钱 | batches_transfer |
版本介绍
版本号 | 版本介绍 |
---|---|
v0.0.1 | 仅支持签名和获取头部参数Authorization |
v1.0.0 | 增加了支付(不包括合单支付)、查询订单、关闭订单、申请交易账单、申请资金账单、下载账单 |
v1.2.0 | 增加了回调解密,合单支付、合单关闭、合单查询 |
v1.2.1 | 修改app、jsapi、native支付字段scene_info 改为可选 |
v1.2.2 | 增加获取序列号方法 |
v1.2.3 | 修改小程序支付签名错误和取消serial_no字段必填 |
v1.3.0 | 增加普通订单的退款和查询 |
v1.3.1 | 修复APP调起支付时出现“支付验证签名失败“的问题 |
v1.3.2 | 增加请求成功后的签名验证 |
v1.3.3 | 修复superagent post请求异常 Z_DATA_ERROR |
v1.3.4 | 修复superagent get请求异常 Z_DATA_ERROR |
v1.3.5 | 修复APP支付签名错误 |
v2.0.0 | 增加提现到零钱和优化接口参数,规定返回参数格式,其他接口会后续优化 |
v2.0.1 | 增加请求头Wechatpay-Serial和完善转账其他接口 |
v2.0.2 | 增加敏感信息加密方法(publicEncrypt) |
文档
v2支付文档
v3支付文档
贡献
欢迎提存在的Bug或者意见。
微信支付v3版本npm包相关推荐
- 微信支付V3版本的 签名生成,验签,解密,统一下单的简单封装
微信支付 V3版本的 签名生成,验签,解密,统一下单的简单封装 V3Base 获取平台证书 回调报文解密 统一下单 暂时看了文档只完成了这部分,感觉封装的不是特别完美,希望有大佬指点一下,想着封装好一 ...
- 2020微信支付v3版本java对接详细流程
都0202年,我似乎翻遍了百度,都没找到最新版微信支付v3的对接相关的详细博客,我都纳闷了,只有自己摸索.还有就是竟然还有人用一些v3对接的假代码,来骗积分,我真的服了,感同身受,以下是我对接的过程, ...
- PHP实现小程序微信支付(v3版本)
PS:本篇文章是PHP对小程序进行微信支付v3版本的实现,仅用于对支付流程的了解,具体使用方面需要大家自行调整 小程序端JS代码: getPrepayID(){var that = thiswx.ge ...
- 微信支付v3版本对接记录
微信支付v3版本对接记录 1.申请公众号和商户号 2.配置商户API_V3_key和商户证书 3.导入依赖 4.构建调用接口httpclient 5.调用jsapi下单示例 6.签名解释 7.回调示例 ...
- PHP实现小程序微信支付v3版本退款,以及对退款订单进行查询
PS:本篇文章仅用作对小程序微信支付v3版本的退款流程以及对退款订单进行查询的流程展示,如要用于实际,还请自行修改代码 文章中调用的API_Connect.php 与API_v3Connect.php ...
- 小程序微信支付V3版本Java集成
一.简介 1.关于API v3 相较于之前的微信支付API,主要区别是: 遵循统一的REST的设计风格 使用JSON作为数据交互的格式,不再使用XML 使用基于非对称密钥的SHA256-RSA的数字签 ...
- PHP实现对微信支付v3版本的订单查询
PS:本文只是对微信支付v3订单的查询流程的介绍,如果要实际使用请按照自身需求对代码进行修改,本文中调用了部分其他文件的方法,我会放在链接里请前往其他文章进行查看,本文采用的是使用商户订单号查询,若是 ...
- 微信支付V3版本回调+验签流程
本文主要是接前面2篇微信V3支付参数准备和微信V3支付整合进项目中的后续之微信支付后的回调. 一.回调验签流程介绍 二.核心流程操作 本文主要是接前面2篇微信V3支付参数准备和微信V3支付整合进项目中 ...
- android 微信支付下单,android端微信支付V3版本地签名统一下单详解
满满的都是坑,因为服务器偷懒让客服端写统一下单,服务器只给了通知的url.微信的支付demo并没有统一下单的代码. 读此文前先阅读: https://pay.weixin.qq.com/wiki/do ...
最新文章
- 网络编程 UDP通信的过程 TCP通信过程 多线程文件上传
- 打破Transformer宿命,新秀VOLO开源!横扫CV多项记录,首个超越87%的模型
- LaTeX入门第三集!LaTeX的几个应用!
- 服务器查看gpu状态_服务器GPU使用情况查看命令详解
- JVM 中的守护线程
- 蓝桥杯练习系统 —— 题解目录
- ubuntu 15.04 系统中如何启用、禁用客人会话
- 不裁员也好意思叫互联网公司?
- 我的世界服务器自定义怪物怎么用,我的世界怪物属性自定义教程 怪物属性代码一览...
- 如何在Smartphone模拟器上测试短信和电话
- [转载]VS2005 不能创建 win32 smart device project
- 预测控制(一):MPC轨迹跟踪
- 怎么把计算机上打印任务解除,如何终止打印机任务_如何停止打印机任务-win7之家...
- android 转盘菜单,Android实现可点击的幸运大转盘
- JAVA基础(注释,关键字与标识符)
- Maven--setting详解
- 那些好玩的生成器网站(二)
- JS 获取当前浏览器版本,验证浏览器版本是否高于谷歌80
- 简单总结协程Coroutine及Yield常见用法
- 神奇宝贝五分类:网络自定义
热门文章
- 【已解决】Mysql 存储 emoji 表情报错 Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F
- frp服务端(frps) 安装及使用
- phpwind安装空白问题解决
- python遇到错误跳过_python 如何跳过异常继续执行
- IKBC W200 键盘 win 键失效
- java官网教程(进阶篇)—— 集合
- spring-cloud-stream-binder-kafka发消息指定 partitionKey
- 零基础入门运维必备 | 一文总结学习 Python 的 14 张思维导图
- 本地安装MySQL详细步骤
- abc能否构成三角形c语言,编写程序输入三角形三边a.b.c 判断abc能否构成三角形...