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

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

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了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函数中怎么添加钩子

相关文章

  • 2022-04-29使用宝塔 Linux 面板快速迁移网站
  • 2022-04-29介绍JavaScript正则实现表达式以字母开头
  • 2022-04-29深入解析asp.net中mvc4自定义404页面(分享)
  • 2022-04-29DedeCMS输入Tags标签全角逗号自动变半角的方法
  • 2022-04-29phpmyadmin如何重置密码?
  • 2022-04-29JS保留两位小数的函数有哪些
  • 2022-04-295款优秀的在线表单设计器
  • 2022-04-29WordPress教程:WordPress博客添加自定义鼠标样式
  • 2022-04-29基于uni-app实现图片上传JS插件
  • 2022-04-29技术教程:如何安装ioncube扩展

文章分类

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

最近更新的内容

    • 小程序swiper轮播CSS3动画及跳转到指定swiper-item的使用
    • Photoshop制作金属嵌钻图案效果的字效
    • 为了使用邮箱服务,php7该如何配置sendmail
    • Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
    • 浅谈Bootstrap中如何上传图片
    • 详解使用php-imap查询操作邮件收件箱
    • CSS怎样让图片旋转又反转回来
    • Photoshop绘制超强质感立体按钮
    • 一分钟学会PHP中关于封装验证码(上)
    • Navicat for MySQL连接MySQL报2005错误怎么办

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

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