nodejs开发微信支付之接收退款申请通知

前言

退款成功后返回的xml格式示例
在这里插入图片描述

步骤

加密字符串是req_info
解密之前,我们需要把xml格式转换为json格式:

const notificationXML = ctx.request.body.xml
    const notificationJSON = {}
    for (let [key, value] of Object.entries(notificationXML)) {
      notificationJSON[key] = value[0]
    }
    let notionResult = notificationJSON['req_info']

1.先对加密串A进行base64解密

  let resultInfo = Buffer.from(notionResult, 'base64')

2.对商户key做md5,得到32位小写key

 const key = 'KmfuRzZM9lfxHJL'
    const md5Key = await crypto.createHash('md5').update(key).digest('hex')

3.用key*对加密串B做AES-256-ECB解密

我们将解密过程封装成一个方法,这样调用起来比较方便

/**
 * aes解密微信回调通知
 * @param data 待解密内容
 * @param key 必须为32位私钥
 * @returns {string}
 */
exports.decryption = function (data, key, iv) {
  if (!data) {
    return ''
  }
  iv = iv || ''
  var clearEncoding = 'utf8'
  var cipherEncoding = 'base64'
  var cipherChunks = []
  var decipher = crypto.createDecipheriv('aes-256-ecb', key, iv)
  decipher.setAutoPadding(true)
  cipherChunks.push(decipher.update(data, cipherEncoding, clearEncoding))
  cipherChunks.push(decipher.final(clearEncoding))
  return cipherChunks.join('')
}

解密方法封装好了,那就开始调用

const fxp = require('fast-xml-parser')


 let iv = Buffer.alloc(0) // 设置偏移量
    let decxml = exports.decryption(resultInfo, md5Key, iv) // 解码
    console.log(decxml)
      let reg = new RegExp('root>', 'g')
    decxml = decxml.replace(reg, 'xml>') // 转化为xml格式
    console.log(decxml)
    const xml2json = fxp.parse(decxml) // xml转对象
    console.log(xml2json)

剩下的就看自己的业务需求了,值都取出来了想干嘛干嘛,服务号的通知什么的也很容易,退款通知这种,下一个博客见。
来自小仙女的代码之路.
附带大神的链接 https://www.oecom.cn/nodejs-wechat-pay-4/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值