NodeJS 基于API v3 实现微信小程序的支付
前提
实现过程
安装 wxpay-v3
npm i wxpay-v3 --save # 如已安装旧版, 重新安装最新版 npm i wxpay-v3@latest
创建 WxPayUtils.js
const RSA = require(./wx_rsa); class WxPayUtils { constructor(privateKey,appId) { this.privateKey =privateKey; this.appId = appId; } signLong (data) { // let privateKey =private_key let sign_rsa = new RSA.RSAKey(); sign_rsa = RSA.KEYUTIL.getKey(this.privateKey); let hashAlg = sha256;//sha256//此处换成腾讯要求的方式 let Sig = sign_rsa.signString(data, hashAlg); Sig = RSA.hex2b64(Sig); // hex 转 b64 return Sig; } paysign(options){//发起支付签的字段准备 let timeStamp=this.createTimeStamp(),//时间戳 nonceStr=this.randomString(),//32位随机数 Ppackage= `prepay_id=${options}`,//prepay_id signType= RSA;//加签方式 //appId、timeStamp、nonceStr、package let PpaySign=`${this.appId} ${timeStamp} ${nonceStr} ${Ppackage} `;//需要加签的字段拼接 let cryptStr=this.signLong(PpaySign);//生成签名 let paySign=cryptStr; return {timeStamp,nonceStr,Ppackage,signType,paySign}; } createTimeStamp(){ return parseInt(new Date().getTime() / 1000) + } randomString(){ const chars=ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678; //默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1 const len=32; const maxPos=chars.length; let pwd=; for(let i=0;i<len;i++){ pwd+=chars.charAt(Math.floor(Math.random()*maxPos)); } return pwd; } } module.exports = WxPayUtils;
创建wx_rsa.js
到github上下载 在utils包
或者去这里复制
小程序端
testPay(){ wxpay({openid:xxx,amount:1}).then(res=>{ let options = res.data wx.requestPayment ( { package:options.Ppackage,...options, "success":function(res){ console.log(res) }, "fail":function(res){ console.log(res) } } ) }) }
即可实现
上一篇:
uniapp开发微信小程序-2.页面制作
下一篇:
JAVA微信小程序登录详解