这篇文章出现也算是机缘巧合,去年年初,还在上家公司的时候,由于java后端工作量大抽不出人员进行微信支付开发的工作,我就硬着头皮上了,用nodejs (expressjs)+ mongodb 开发完成,迭代修复了几次bug,要不就没缘分给大家分享了。因为涉及到money 所以这块我尽可能把容易出问题的地方说下。
步骤大概是这样的
1、下单:携带自己的订单id [‘out_trade_no’]
2、下单成功之后:记录自己的订单id,用于后面的支付成功的状态更新
3、等待微信端支付:支付成功之后 会调用 [‘notify_url’] 回调地址
4、支付成功回调接口:携带 [‘out_trade_no’] 更新支付状态
全程支付都是xml
- 需要用 xml2js
js2xmlparser.parse("xml", json); // json to xml
js2xmlparser.parseString(data, callback); // xml to json
下单部分,可以看下官方文档很清楚
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
这里给大家提供个方法
keystring设置路径:微信商户平台(pay.weixin.qq.com)–>账户设置–>API安全–>密钥设置
function sign(json) {
let t = crypto.createHash("md5");
var item = {}
Object.keys(json).sort().map(function(key) {
item[key] = json[key];
});
var url = decodeURIComponent(querystring.stringify(item) + "&key=[keystring]");
t.update(url, "utf8", "hex");
item["sign"] = t.digest("hex").toUpperCase();
return item;
};
- 注意有顺序
支付成功 其实没有什么太注意的地方了
就是在响应的时候
成功
res.send("<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>");
失败
res.send("<xml><return_code><![CDATA[ERROR]]></return_code></xml>");
文章来源: 微信支付服务端开发整理