最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nodejs實(shí)現(xiàn)微信分賬的示例代碼

 更新時(shí)間:2021年01月19日 14:15:30   作者:Hi__Z  
這篇文章主要介紹了Nodejs實(shí)現(xiàn)微信分賬的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

公司的業(yè)務(wù)的場(chǎng)景需要用到微信分賬的功能、對(duì)著官網(wǎng)文檔調(diào)試了一下午才調(diào)通、記錄下使用Nodejs微信分賬的流程。

前提條件

  • 在微信商戶平臺(tái) 產(chǎn)品中心->我的產(chǎn)品,支付擴(kuò)展工具中 開(kāi)通分賬的功能
  • 添加分賬接收方。 這一步不設(shè)置的話回報(bào)一個(gè)*分賬接收方關(guān)系不存在,請(qǐng)檢查參數(shù)中每個(gè)接收方的關(guān)系。*錯(cuò)誤
  • 在商戶平臺(tái)獲取商戶id和secrect
  • 需要將apiclient_cert.pem、 apiclient_key傳到服務(wù)器某個(gè)目錄下面

具體實(shí)現(xiàn)

// @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'
 // 訂單號(hào)
 const out_order_no = '1609745196755nFvdMaYub2'
 // 微信支付訂單號(hào)
 const transaction_id = '4200000801202101044301662433'
 // 商戶secrect
 const key = '9813490da1ffb80afaa36f6f1265e490'

 // 這一塊的參數(shù)官網(wǎng)文檔上有詳細(xì)的說(shuō)明
 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",
  {
   // 需要使用證書(shū)apiclient_cert
   cert: fs.readFileSync(path.join(__dirname,'../../../cert/apiclient_cert.pem')),
   // 需要使用證書(shū)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
// 生成隨機(jī)字符串
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,否則簽名不通過(guò)
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;
}

如果遇到簽名不通過(guò)的問(wèn)題??梢詫⒛闵傻膄ormData放到接口簽名校驗(yàn)工具進(jìn)行逐步驗(yàn)證、

分賬接口其他常見(jiàn)問(wèn)題

到此這篇關(guān)于Nodejs實(shí)現(xiàn)微信分賬的示例代碼的文章就介紹到這了,更多相關(guān)Nodejs 微信分賬內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解NodeJs開(kāi)發(fā)微信公眾號(hào)

    詳解NodeJs開(kāi)發(fā)微信公眾號(hào)

    本篇文章給大家分享了NodeJs開(kāi)發(fā)微信公眾號(hào)的相關(guān)技術(shù)內(nèi)容,對(duì)此有需要的朋友們可以跟著學(xué)習(xí)參考下。
    2018-05-05
  • node.js使用mongoose操作數(shù)據(jù)庫(kù)實(shí)現(xiàn)購(gòu)物車的增、刪、改、查功能示例

    node.js使用mongoose操作數(shù)據(jù)庫(kù)實(shí)現(xiàn)購(gòu)物車的增、刪、改、查功能示例

    這篇文章主要介紹了node.js使用mongoose操作數(shù)據(jù)庫(kù)實(shí)現(xiàn)購(gòu)物車的增、刪、改、查功能,結(jié)合實(shí)例形式詳細(xì)分析了node.js使用mongoose框架操作MongoDB數(shù)據(jù)實(shí)現(xiàn)購(gòu)物車增刪改查相關(guān)技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • 利用node.js如何創(chuàng)建子進(jìn)程詳解

    利用node.js如何創(chuàng)建子進(jìn)程詳解

    之前看多進(jìn)程這一章節(jié)時(shí)發(fā)現(xiàn)這塊東西挺多,寫Process模塊的時(shí)候也有提到,今天下午午休醒來(lái)靜下心來(lái)好好的看了一遍,發(fā)現(xiàn)也不是太難理解。所以下面這篇文章主要給大家介紹了關(guān)于利用node.js如何創(chuàng)建子進(jìn)程的相關(guān)資料,需要的朋友可以參考下。
    2017-12-12
  • 使用 Node.js 開(kāi)發(fā)資訊爬蟲(chóng)流程

    使用 Node.js 開(kāi)發(fā)資訊爬蟲(chóng)流程

    這篇文章主要介紹了使用 Node.js 開(kāi)發(fā)資訊爬蟲(chóng)流程,爬蟲(chóng)流程概括下來(lái)就是把目標(biāo)網(wǎng)站的HTML下載到本地再進(jìn)行數(shù)據(jù)提取。具體內(nèi)容詳情大家參考下本文
    2018-01-01
  • 深入理解Node.js中的進(jìn)程管理

    深入理解Node.js中的進(jìn)程管理

    這篇文章主要介紹了Node.js中進(jìn)程管理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),相信對(duì)大家的學(xué)習(xí)或者工作具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-03-03
  • 詳解Node.js中間件是怎樣工作的

    詳解Node.js中間件是怎樣工作的

    這篇文章主要介紹了詳解Node.js中間件是怎樣工作的,對(duì)中間件感興趣的同學(xué),可以參考下
    2021-04-04
  • Node Mongoose用法詳解【Mongoose使用、Schema、對(duì)象、model文檔等】

    Node Mongoose用法詳解【Mongoose使用、Schema、對(duì)象、model文檔等】

    這篇文章主要介紹了Node Mongoose用法,結(jié)合實(shí)例形式分析了Mongoose使用、Schema、對(duì)象、model文檔等基本原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • 利用Chrome DevTools直接調(diào)試Node.js和JavaScript的方法詳解(并行)

    利用Chrome DevTools直接調(diào)試Node.js和JavaScript的方法詳解(并行)

    現(xiàn)在我們可以用瀏覽器調(diào)試node.js了!!!下面這篇文章主要介紹了利用Chrome DevTools直接調(diào)試Node.js和JavaScript的方法步驟,文中介紹的很詳細(xì),需要的朋友可以參考學(xué)習(xí),下面來(lái)一起看看吧。
    2017-02-02
  • 詳解nodejs中的process進(jìn)程

    詳解nodejs中的process進(jìn)程

    這篇文章主要介紹了nodejs中的process進(jìn)程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下
    2017-03-03
  • Node.js數(shù)據(jù)流Stream之Duplex流和Transform流用法

    Node.js數(shù)據(jù)流Stream之Duplex流和Transform流用法

    這篇文章介紹了Node.js數(shù)據(jù)流Stream之Duplex流和Transform流的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07

最新評(píng)論

中宁县| 盐亭县| 朝阳市| 鹰潭市| 乡宁县| 博乐市| 久治县| 桦甸市| 江永县| 安阳市| 建平县| 海安县| 古丈县| 汨罗市| 邵武市| 宿州市| 鹤岗市| 同心县| 金秀| 恩平市| 汕头市| 丹寨县| 余江县| 贵南县| 吉安县| 贡嘎县| 灯塔市| 宜黄县| 西和县| 陇南市| 金山区| 武城县| 邵东县| 利川市| 灵山县| 叙永县| 白朗县| 遂宁市| 瑞昌市| 铁岭市| 民权县|