支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答
微信支付的文档请点击这里 ,这里用 js 把它写出来了
有需要的可以直接 copy
微信发送的数据是一个 xml ,首先需要吧 xml 转换成 js 的对象
在 express 中,可以使用 body-parser 这个插件达到效果
const bodyParser = require('body-parser')
require('body-parser-xml')(bodyParser)
app.use(bodyParser.xml({
limit: '1MB',
xmlParseOptions: {
normalize: true,
normalizeTags: true,
explicitArray: false
}
}))
使用这个中间件会把 xml 转换成 JavaScript 的 对象(Object),下面的 checkWXNotifySign 函数默认你已经使用了上面的中间件
function checkWXNotifySign(xmlObj, PAY_API_KEY) {
let string = ''
const keys = Object.keys(xmlObj)
keys.sort()
keys.forEach(key => {
if (xmlObj[key] && key !== 'sign') {
string = string + key + '=' + xmlObj[key] + '&'
}
})
string = string + 'key=' + PAY_API_KEY
const localSign = md5(string).toUpperCase()
return localSign === xmlObj.sign
}
其中,第一个参数是 xml 转换成的对象,第二个是微信支付的 key (不是小程序的 secret, 官方会发到你的邮箱里面)
函数返回的是一个布尔值,校验通过则为 true, 否则为 false
上面用到了一个 md5 函数,可以自行去 npm install 一个
网友评论