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密钥 否 有验证回调必须

注意

  1. serial_no是证书序列号 请在命令窗口使用 openssl x509 -in apiclient_cert.pem -noout -serial 获取
  2. 头部参数需要添加 User-Agent 参数
  3. 需要在商户平台设置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包相关推荐

  1. 微信支付V3版本的 签名生成,验签,解密,统一下单的简单封装

    微信支付 V3版本的 签名生成,验签,解密,统一下单的简单封装 V3Base 获取平台证书 回调报文解密 统一下单 暂时看了文档只完成了这部分,感觉封装的不是特别完美,希望有大佬指点一下,想着封装好一 ...

  2. 2020微信支付v3版本java对接详细流程

    都0202年,我似乎翻遍了百度,都没找到最新版微信支付v3的对接相关的详细博客,我都纳闷了,只有自己摸索.还有就是竟然还有人用一些v3对接的假代码,来骗积分,我真的服了,感同身受,以下是我对接的过程, ...

  3. PHP实现小程序微信支付(v3版本)

    PS:本篇文章是PHP对小程序进行微信支付v3版本的实现,仅用于对支付流程的了解,具体使用方面需要大家自行调整 小程序端JS代码: getPrepayID(){var that = thiswx.ge ...

  4. 微信支付v3版本对接记录

    微信支付v3版本对接记录 1.申请公众号和商户号 2.配置商户API_V3_key和商户证书 3.导入依赖 4.构建调用接口httpclient 5.调用jsapi下单示例 6.签名解释 7.回调示例 ...

  5. PHP实现小程序微信支付v3版本退款,以及对退款订单进行查询

    PS:本篇文章仅用作对小程序微信支付v3版本的退款流程以及对退款订单进行查询的流程展示,如要用于实际,还请自行修改代码 文章中调用的API_Connect.php 与API_v3Connect.php ...

  6. 小程序微信支付V3版本Java集成

    一.简介 1.关于API v3 相较于之前的微信支付API,主要区别是: 遵循统一的REST的设计风格 使用JSON作为数据交互的格式,不再使用XML 使用基于非对称密钥的SHA256-RSA的数字签 ...

  7. PHP实现对微信支付v3版本的订单查询

    PS:本文只是对微信支付v3订单的查询流程的介绍,如果要实际使用请按照自身需求对代码进行修改,本文中调用了部分其他文件的方法,我会放在链接里请前往其他文章进行查看,本文采用的是使用商户订单号查询,若是 ...

  8. 微信支付V3版本回调+验签流程

    本文主要是接前面2篇微信V3支付参数准备和微信V3支付整合进项目中的后续之微信支付后的回调. 一.回调验签流程介绍 二.核心流程操作 本文主要是接前面2篇微信V3支付参数准备和微信V3支付整合进项目中 ...

  9. android 微信支付下单,android端微信支付V3版本地签名统一下单详解

    满满的都是坑,因为服务器偷懒让客服端写统一下单,服务器只给了通知的url.微信的支付demo并没有统一下单的代码. 读此文前先阅读: https://pay.weixin.qq.com/wiki/do ...

最新文章

  1. 网络编程 UDP通信的过程 TCP通信过程 多线程文件上传
  2. 打破Transformer宿命,新秀VOLO开源!横扫CV多项记录,首个超越87%的模型
  3. LaTeX入门第三集!LaTeX的几个应用!
  4. 服务器查看gpu状态_服务器GPU使用情况查看命令详解
  5. JVM 中的守护线程
  6. 蓝桥杯练习系统 —— 题解目录
  7. ubuntu 15.04 系统中如何启用、禁用客人会话
  8. 不裁员也好意思叫互联网公司?
  9. 我的世界服务器自定义怪物怎么用,我的世界怪物属性自定义教程 怪物属性代码一览...
  10. 如何在Smartphone模拟器上测试短信和电话
  11. [转载]VS2005 不能创建 win32 smart device project
  12. 预测控制(一):MPC轨迹跟踪
  13. 怎么把计算机上打印任务解除,如何终止打印机任务_如何停止打印机任务-win7之家...
  14. android 转盘菜单,Android实现可点击的幸运大转盘
  15. JAVA基础(注释,关键字与标识符)
  16. Maven--setting详解
  17. 那些好玩的生成器网站(二)
  18. JS 获取当前浏览器版本,验证浏览器版本是否高于谷歌80
  19. 简单总结协程Coroutine及Yield常见用法
  20. 神奇宝贝五分类:网络自定义

热门文章

  1. 【已解决】Mysql 存储 emoji 表情报错 Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F
  2. frp服务端(frps) 安装及使用
  3. phpwind安装空白问题解决
  4. python遇到错误跳过_python 如何跳过异常继续执行
  5. IKBC W200 键盘 win 键失效
  6. java官网教程(进阶篇)—— 集合
  7. spring-cloud-stream-binder-kafka发消息指定 partitionKey
  8. 零基础入门运维必备 | 一文总结学习 Python 的 14 张思维导图
  9. 本地安装MySQL详细步骤
  10. abc能否构成三角形c语言,编写程序输入三角形三边a.b.c 判断abc能否构成三角形...