Nodejs实现微信分账的示例代码
更新时间:2021年01月19日 14:15:30 作者:Hi__Z
这篇文章主要介绍了Nodejs实现微信分账的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
公司的业务的场景需要用到微信分账的功能、对着官网文档调试了一下午才调通、记录下使用Nodejs微信分账的流程。
前提条件
- 在微信商户平台 产品中心->我的产品,支付扩展工具中 开通分账的功能
- 添加分账接收方。 这一步不设置的话回报一个*分账接收方关系不存在,请检查参数中每个接收方的关系。*错误
- 在商户平台获取商户id和secrect
- 需要将apiclient_cert.pem、 apiclient_key传到服务器某个目录下面
具体实现
// @router post -> share -> /common/payment/share async share() { const { ctx } = this const nonce_str = ctx.service.wx.randomStr() // 商户id const mch_id = '123456' // x小程序appid const appid = 'wx123456' // 订单号 const out_order_no = '1609745196755nFvdMaYub2' // 微信支付订单号 const transaction_id = '4200000801202101044301662433' // 商户secrect const key = '9813490da1ffb80afaa36f6f1265e490' // 这一块的参数官网文档上有详细的说明 const params = { appid, mch_id, nonce_str, out_order_no, receivers: `[{"account": "123qwe","amount": 1,"description": "description","type": "PERSONAL_OPENID"}]`, sign_type: 'HMAC-SHA256', transaction_id, } // 签名方式必须是HMAC-SHA256 const sign = ctx.service.wx.sign(params, key, 'HMAC-SHA256') // xmlString const formData = `<xml> <appid>${appid}</appid> <mch_id>${mch_id}</mch_id> <nonce_str>${nonce_str}</nonce_str> <out_order_no>${out_order_no}</out_order_no> <transaction_id>${transaction_id}</transaction_id> <sign>${sign}</sign> <sign_type>HMAC-SHA256</sign_type> <receivers>${params.receivers}</receivers> </xml>` const res = await ctx.curl( "https://api.mch.weixin.qq.com/secapi/pay/profitsharing", { // 需要使用证书apiclient_cert cert: fs.readFileSync(path.join(__dirname,'../../../cert/apiclient_cert.pem')), // 需要使用证书apiclient_key key: fs.readFileSync(path.join(__dirname,'../../../cert/apiclient_key.pem')), method: "post", data: formData, } ) const datastring = res.data.toString() xml2js.parseString(datastring, (err, result) => { if (err) { ctx.throw(422, err) } console.log(result) }) } // randomStr // 生成随机字符串 randomStr(len = 24) { const str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; let result = ''; for (let i = 0; i < len; i++) { result += str[Math.floor(Math.random() * str.length)]; } return result; } // 签名 // mchKey是商户secrect,否则签名不通过 sign(data, mchKey, signType = 'MD5') { const keys = []; for (const key in data) { if (data[key] !== undefined) { keys.push(key); } } // 字典排序=>key=value const stringA = keys .sort() .map(key => `${key}=${decodeURIComponent(data[key])}`) .join('&'); // 拼接商户key const stringSignTemp = stringA + '&key=' + mchKey; // 加密 let hash; if (signType === 'MD5') { hash = crypto.createHash('md5').update(stringSignTemp); } else { hash = crypto.createHmac('sha256', mchKey).update(stringSignTemp, 'utf8'); } const paySign = hash.digest('hex').toUpperCase(); return paySign; }
如果遇到签名不通过的问题。可以将你生成的formData放到接口签名校验工具进行逐步验证、
到此这篇关于Nodejs实现微信分账的示例代码的文章就介绍到这了,更多相关Nodejs 微信分账内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- nodejs的错误处理过程记录
- nodejs环境快速操作mysql数据库的方法详解
- Nodejs实现定时爬虫的完整实例
- NodeJS和浏览器中this关键字的不同之处
- nodejs处理tcp连接的核心流程
- Nodejs 数组的队列以及forEach的应用详解
- 一文秒懂nodejs中的异步编程
- 在nodejs中创建child process的方法
- nodejs中使用worker_threads来创建新的线程的方法
- Nodejs 微信小程序消息推送的实现
- nodejs中的异步编程知识点详解
- nodejs+express最简易的连接数据库的方法
- windows如何把已安装的nodejs高版本降级为低版本(图文教程)
- NodeJS配置CORS实现过程详解
- 如何利用nodejs自动定时发送邮件提醒(超实用)
- nodeJs项目在阿里云的简单部署
- 如何利用nodejs实现命令行游戏
- 搞懂什么是Node.js原来这么简单
相关文章
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
下面小编就为大家带来一篇Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-09-09从零开始学习Node.js系列教程四:多页面实现的数学运算示例
这篇文章主要介绍了Node.js多页面实现的数学运算,涉及nodejs请求响应、数值传递、运算等相关操作技巧,需要的朋友可以参考下2017-04-04
最新评论