行业知识
uniapp微信小程序支付前端生成签名,并调起微信支付
2026-11-15 10:49:48
来源:互联网转载
uniapp微信小程序支付前端生成签名,并调起微信支付
- 一、安装npm包、引入npm包
- 二、准备签名的数据
- ①、登录小程序开发者平台获取appId,如图所示
- ②、前端获取10位时间戳
- ③、前端获取随机字符串
- ④、prepay_id
- 三、签名封装
- ①、私钥如果找不到,可以在商户号平台获取
- 四、全部代码
一、安装npm包、引入npm包
npm install jsrsasign
页面引入依赖
import jsrsasign from 'jsrsasign'
签名方式使用的是SHA256withRSA
二、准备签名的数据
let str = { appId: 'xxxxxxxxxxx', //appId后端返回,可在小程序开发平台获取 timeStamp: 'xxxxxxxxxxx', //10时间戳 nonceStr: 'xxxxxxxxxxx', //随机字符串 package: 'prepay_id=' + prepay_id, //通过JSAPI下单接口获取到发起支付的必要参数prepay_id }①、登录小程序开发者平台获取appId,如图所示
②、前端获取10位时间戳
const time = Math.round(new Date().getTime()/1000).toString();console.log(time);
③、前端获取随机字符串
getRandomString(length) { var result = '' var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' var charactersLength = characters.length for (var i = 0; i④、prepay_id
调用后端发起支付接口返回,后端返回
三、签名封装
singH5(data) { let encipher = new jsrsasign.RSAKey() // 私钥 在微信端申请好后会有,一般由后端提供 const key = `-----BEGIN PRIVATE KEY-----xxxxxxxxxxxxxxxxxxxxxx-----END PRIVATE KEY-----` // 把私钥转成16进制并设置秘钥 encipher = jsrsasign.KEYUTIL.getKey(key) // 设置SHA256withRSA方式加密 const sig = new jsrsasign.KJUR.crypto.Signature({ alg: 'SHA256withRSA', }) // 初始化 sig.init(encipher) // 需要加密的字段,这里注意下一定要按每一个字段一行,切末位加上 \n const str = `${data.appId}\n` + `${data.timeStamp}\n` + `${data.nonceStr}\n` + `${data.package}\n` const paySign = sig.updateString(str) // 加密后,转成base64 return jsrsasign.hextob64(sig.sign()) },①、私钥如果找不到,可以在商户号平台获取
四、全部代码
import jsrsasign from 'jsrsasign'//SHA256签名singH5(data) { let encipher = new jsrsasign.RSAKey() // 私钥 在微信端申请好后会有,一般由后端提供 // 在商户号平台可以找到 const key = `-----BEGIN PRIVATE KEY-----xxxxxxxxxxxxxxxxxxxxxx-----END PRIVATE KEY-----` // 把私钥转成16进制并设置秘钥 encipher = jsrsasign.KEYUTIL.getKey(key) // 设置SHA256withRSA方式加密 const sig = new jsrsasign.KJUR.crypto.Signature({ alg: 'SHA256withRSA', }) // 初始化 sig.init(encipher) // 需要加密的字段,这里注意下一定要按每一个字段一行,切末位加上 \n const str = `${data.appId}\n` + `${data.timeStamp}\n` + `${data.nonceStr}\n` + `${data.package}\n` const paySign = sig.updateString(str) // 加密后,转成base64 return jsrsasign.hextob64(sig.sign()) },//获取随机字符串,长度可自定义 getRandomString(length) { var result = '' var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' var charactersLength = characters.length for (var i = 0; i
上一篇:保存服务器失败怎么办?