nodejs呼叫微信支付API介面的通用函式
阿新 • • 發佈:2019-01-22
這是一個nodejs呼叫微信支付API介面的通過函式,支援MD5和hmac-sha256兩種簽名方式。
var md5 = require('md5'); var hmac_sha256 = require("crypto-js/hmac-sha256"); //請自行 npm install crypto-js var wxPost = function(postObject, parm, fn){ //postObject為要提交的微信支付伺服器的引數列表,為json格式 //parm為額外引數列表,包括path(微信支付API子地址,如:/pay/micropay)和sign_typ(引數加密型別,可選“MD5”或“HMAC-SHA256”) //fn為呼叫結束時的回撥(無論成功與否都回調,返回的引數是xml格式的) var mch_id = "微信支付服務商商戶號或普通商戶商戶號"; var wkey = "微信支付API金鑰或APIv3金鑰"; var keys = Object.keys(postObject).sort(); var signData = ''; for(var key of keys){ if(postObject[key]){ signData += "&" + key + "=" + postObject[key]; } } signData = signData.slice(1) + "&key=" + wkey; var sign_type = parm.sign_type || "MD5"; if(sign_type == "HMAC-SHA256"){ var sign = hmac_sha256(signData, wkey) + ''; sign = sign.toUpperCase(); }else{ var sign = md5(signData).toUpperCase(); } postObject.sign = sign; var postData = '<xml>'; for(var key in postObject){ if(postObject[key]){ postData += '<' + key + '>' + postObject[key] + '</' + key + '>'; } } postData += '</xml>'; var opts = { method:'POST', hostname:'api.mch.weixin.qq.com', port:'443', pfx:fs.readFileSync('./cert/' + mch_id + '.pfx'), //對應API證書中的.p12檔案,改字尾名即可 passphrase:mch_id, path:parm.path, headers:{ 'Content-Type':'application/x-www-form-urlencoded', 'Content-Length':postData.length } } var body = ''; var rq = https.request(opts,function(rs){ rs.on('data',function(data){ body += data; }) rs.on('end', function(){ if(fn){fn(body)} }) }); rq.write(postData); rq.on('error',function(err){ if(fn){fn("<return_msg>" + err.message + "</return_msg>")} }); rq.end(); }