• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > Nodejs实现微信分账的示例代码

Nodejs实现微信分账的示例代码

作者:站长图库 字体:[增加 减小] 来源:互联网

站长图库向大家介绍了Node.js,微信分账,示例代码等相关知识,希望对您有所帮助

这篇文章主要介绍了Nodejs实现微信分账的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

公司的业务的场景需要用到微信分账的功能、对着官网文档调试了一下午才调通、记录下使用Nodejs微信分账的流程。

前提条件

在微信商户平台 产品中心->我的产品,支付扩展工具中 开通分账的功能

添加分账接收方。 这一步不设置的话回报一个*分账接收方关系不存在,请检查参数中每个接收方的关系。*错误

在商户平台获取商户id和secrect

需要将apiclient_cert.pem、 apiclient_key传到服务器某个目录下面

// @router post -> share -> /common/payment/shareasync 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放到接口签名校验工具进行逐步验证:


6007d496c0d03.jpg


分账接口其他常见问题


到此这篇关于Nodejs实现微信分账的示例代码的文章就介绍到这了,更多相关Nodejs 微信分账内容请关注站长图库。



分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • node.js 基于 STMP 协议和 EWS 协议发送邮件
  • Node.js中async的用法是什么
  • Node.js怎么读写json文件?方法介绍
  • Node.js设置NODE_ENV时发生错误怎么解决?
  • 一招教你使用Node.js中iis部署运行node(附代码)
  • 深入了解Node.js 中的多线程和多进程
  • 聊聊Node.js中的事件驱动程序和EventEmitter类
  • 浅析node Express框架中的 res.send() 和 res.end()
  • 什么是事件循环?详解Node.js中的事件循环
  • Node.js深入学习之浅析require函数中怎么添加钩子

相关文章

  • PHP调用实现波场交互[支持TRX/TRC20]
  • 浅谈Nodejs中的callback回调
  • Photoshop简单调出怀旧色调
  • 带你搞懂怎么基于Docker安装Nginx搭建静态服务器
  • Thinkphp中如何按照周来实现将数据分类
  • 如何修改mysql的默认时区
  • JavaScript实现UTF-8编解码
  • DEDECMS的优化方案
  • Linux下使用NTFS文件系统(Linux挂载NTFS数据盘)
  • PHP上传多张图片时,选择图片后即可预览的问题

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • Thinkphp6如何利用ZipArchive打包下载文件
    • 详解angular中为HTML元素添加css类的几种方式
    • 分享几种实用的Node.js调试方法,快来收藏吧!!
    • Thinkphp中如何按照周来实现将数据分类
    • N种使用 CSS 实现三角形的技巧
    • PhotoShop设计打造品牌艺术字LOGO效果教程
    • 详解php中函数的引用传递和返回 (附代码)
    • Phpcms V9管理后台登陆及会员注册登录模板的修改
    • 如何使用HTML+CSS制作一个简单美观的导航栏(代码详解)
    • uniapp如何取消原生导航栏

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有