微信支付服务端开发整理

这篇文章出现也算是机缘巧合,去年年初,还在上家公司的时候,由于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>");
文章来源: 微信支付服务端开发整理