最近由于需要用Node.js開發(fā)微信支付模塊捆探,順便寫一下微信支付的過程然爆。首先要安裝Node.js,npm, Express黍图,模板引擎用EJS或者Pug(Jade)曾雕,我選擇簡(jiǎn)潔風(fēng)格的EJS,個(gè)人不喜歡Pug(Jade)的語(yǔ)法助被。用express-generator生成完工程以后就可以開始了剖张。微信支付接口文檔可以在微信商戶平臺(tái)開發(fā)者文檔找到切诀。npm上的weixin-pay或者node-weixin-pay可以支持微信支付。
一:介紹
微信支付流程可以參考微信商戶平臺(tái)開發(fā)者文檔搔弄,一共有四種支付方式刷卡支付幅虑,公眾號(hào)支付,掃碼支付顾犹,App支付倒庵,我們要用的是公眾號(hào)支付和掃碼支付。先來實(shí)現(xiàn)掃碼支付炫刷。
二:掃碼支付
商戶支付回掉URL擎宝,生成二維碼規(guī)則形式為
weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXX&mch_id=XXXXX&product_id=XXXXXX&time_stamp=XXXXXX&nonce_str=XXXXX
其中XXXXX為商戶需要填寫的內(nèi)容,可以參考官方的生成二維碼規(guī)則
1: 調(diào)用函數(shù)
function onBridgeReady() {
WeixinJSBridge.invoke('getBrandWCPayRequest', {
"appId": "wx2421b1c4370ec43b", // 公眾號(hào)名稱浑玛,由商戶傳入
"timeStamp": " 1395712654", // 時(shí)間戳绍申,自1970年以來的秒數(shù)
"nonceStr": "e61463f8efa94090b1f366cccfbbb444", // 隨機(jī)串
"package": "prepay_id=u802345jgfjsdfgsdg888",
"signType": "MD5", // 微信簽名方式
"paySign": "70EA570631E4BB79628FBCA90534C63FF7FADD89" // 微信簽名
},
function(res) {
// 使用以上方式判斷前端返回,微信團(tuán)隊(duì)鄭重提示:
// res.err_msg將在用戶支付成功后返回
// ok,但并不保證它絕對(duì)可靠锄奢。
if (res.err_msg == "get_brand_wcpay_request: ok" ) {
;
}
});
}
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
}
} else {
onBridgeReady();
}
2: 返回JSON
{
"appId": "wx2421b1c4370ec43b", // 公眾號(hào)名稱,由商戶傳入
"timeStamp":" 1395712654", // 時(shí)間戳剧腻,自1970年以來的秒數(shù)
"nonceStr": "e61463f8efa94090b1f366cccfbbb444", // 隨機(jī)串
"package": "prepay_id=u802345jgfjsdfgsdg888",
"signType": "MD5", // 微信簽名方式:
"paySign": "70EA570631E4BB79628FBCA90534C63FF7FADD89" // 微信簽名
}
3: 輸入XML
<xml>
<appid><![CDATA[wx2421b1c4370ec43b]]></appid>
<attach><![CDATA[支付測(cè)試]]></attach>
<bank_type><![CDATA[CFT]]></bank_type>
<fee_type><![CDATA[CNY]]></fee_type>
<is_subscribe><![CDATA[Y]]></is_subscribe>
<mch_id><![CDATA[10000100]]></mch_id>
<nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str>
<openid><![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]></openid>
<out_trade_no><![CDATA[1409811653]]></out_trade_no>
<result_code><![CDATA[SUCCESS]]></result_code>
<return_code><![CDATA[SUCCESS]]></return_code>
<sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign>
<sub_mch_id><![CDATA[10000100]]></sub_mch_id>
<time_end><![CDATA[20140903131540]]></time_end>
<total_fee>1</total_fee>
<trade_type><![CDATA[JSAPI]]></trade_type>
<transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id>
</xml>
4: 支付成功