基于nodejs实现微信支付功能(2)
// 此处的attach不能为空值 否则微信提示签名错误
order: function(attach, body, mch_id, openid, bookingNo, total_fee, notify_url) {
var deferred = Q.defer();
var appid = config.member_config.appid;
var nonce_str = this.createNonceStr();
var timeStamp = this.createTimeStamp();
var url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
var formData = "<xml>";
formData += "<appid>" + appid + "</appid>"; //appid
formData += "<attach>" + attach + "</attach>"; //附加数据
formData += "<body>" + body + "</body>";
formData += "<mch_id>" + mch_id + "</mch_id>"; //商户号
formData += "<nonce_str>" + nonce_str + "</nonce_str>"; //随机字符串,不长于32位。
formData += "<notify_url>" + notify_url + "</notify_url>";
formData += "<openid>" + openid + "</openid>";
formData += "<out_trade_no>" + bookingNo + "</out_trade_no>";
formData += "<spbill_create_ip>61.50.221.43</spbill_create_ip>";
formData += "<total_fee>" + total_fee + "</total_fee>";
formData += "<trade_type>JSAPI</trade_type>";
formData += "<sign>" + this.paysignjsapi(appid, attach, body, mch_id, nonce_str, notify_url, openid, bookingNo, '61.50.221.43', total_fee, 'JSAPI') + "</sign>";
formData += "</xml>";
var self = this;
request({
url: url,
method: 'POST',
body: formData
}, function(err, response, body) {
if (!err && response.statusCode == 200) {
console.log(body);
var prepay_id = self.getXMLNodeValue('prepay_id', body.toString("utf-8"));
var tmp = prepay_id.split('[');
var tmp1 = tmp[2].split(']');
//签名
var _paySignjs = self.paysignjs(appid, nonce_str, 'prepay_id=' + tmp1[0], 'MD5', timeStamp);
var args = {
appId: appid,
timeStamp: timeStamp,
nonceStr: nonce_str,
signType: "MD5",
package: tmp1[0],
paySign: _paySignjs
};
deferred.resolve(args);
} else {
console.log(body);
}
});
return deferred.promise;
},
//支付回调通知
notify: function(obj) {
var output = "";
if (obj.return_code == "SUCCESS") {
var reply = {
return_code: "SUCCESS",
return_msg: "OK"
};
} else {
var reply = {
return_code: "FAIL",
return_msg: "FAIL"
};
}
output = ejs.render(messageTpl, reply);
return output;
},
};
module.exports = WxPay;
三、在express router中调用wxpay
//微信支付demo
router.get('/order', function(req, res, next){
var attach = "1276687601";
var body = "测试支付";
var mch_id = "1111111"; //商户ID
var openid = "111111";
var bookingNo = "201501806125346"; //订单号
var total_fee = 10;
var notify_url = "http://localhost/wxpay/notify"; //通知地址
wxpay.order(attach, body, mch_id, openid, bookingNo, total_fee, notify_url).then(function(data){
res.render('wxpay', {args: data});
});
});
内容版权声明:除非注明,否则皆为本站原创文章。
