nodejs 위 챗 결제 V3 (2) 공중 번호 지불 실현
exports.jsapipay = function (req, res) {
var bookingNo = req.query.bookingNo;
var appid = _appid;
var attach = _attach;
var mch_id = _mch_id;
var nonce_str = _nonce_str;
var total_fee = _total_fee;
var notify_url = _notify_url;
var openid = _openid;
var body = _body;
var timeStamp = _timeStamp;
var url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
var formData = "";
formData += ""+appid+" "; //appid
formData += ""+attach+" "; //
formData += ""+body+"";
formData += ""+mch_id+" "; //
formData += ""+nonce_str+" "; // , 32 。
formData += ""+notify_url+" ";
formData += ""+openid+" ";
formData += ""+bookingNo+" ";
formData += "";
formData += ""+total_fee+" ";
formData += "JSAPI ";
formData += ""+paysignjsapi(appid,attach,body,mch_id,nonce_str,notify_url,openid,bookingNo,'',total_fee,'JSAPI')+" ";
formData += " ";
request({url:url,method:'POST',body: formData},function(err,response,body){
if(!err && response.statusCode == 200){
console.log(body);
var prepay_id = getXMLNodeValue('prepay_id',body.toString("utf-8"));
var tmp = prepay_id.split('[');
var tmp1 = tmp[2].split(']');
//
var _paySignjs = paysignjs(appid,nonce_str,'prepay_id='+tmp1[0],'MD5',timeStamp);
res.render('jsapipay',{prepay_id:tmp1[0],_paySignjs:_paySignjs});
//res.render('jsapipay',{rows:body});
//res.redirect(tmp3[0]);
}
});
}
서명 암호 화 알고리즘
function paysignjsapi(appid,attach,body,mch_id,nonce_str,notify_url,openid,out_trade_no,spbill_create_ip,total_fee,trade_type) {
var ret = {
appid: appid,
attach: attach,
body: body,
mch_id: mch_id,
nonce_str: nonce_str,
notify_url:notify_url,
openid:openid,
out_trade_no:out_trade_no,
spbill_create_ip:spbill_create_ip,
total_fee:total_fee,
trade_type:trade_type
};
var string = raw(ret);
var key = _key;
string = string + '&key='+key;
var crypto = require('crypto');
return crypto.createHash('md5').update(string,'utf8').digest('hex');
};
서명 알고리즘 은 대소 문자 에 주의해 야 하 며, 안에 많은 구덩이 가 있다.
function paysignjs(appid,nonceStr,package,signType,timeStamp) {
var ret = {
appId: appid,
nonceStr: nonceStr,
package:package,
signType:signType,
timeStamp:timeStamp
};
var string = raw1(ret);
var key = _key;
string = string + '&key='+key;
console.log(string);
var crypto = require('crypto');
return crypto.createHash('md5').update(string,'utf8').digest('hex');
};
서명 할 때의 인 자 는 소문 자로 변환 할 필요 가 없습니다.
function raw1(args) {
var keys = Object.keys(args);
keys = keys.sort()
var newArgs = {};
keys.forEach(function (key) {
newArgs[key] = args[key];
});
var string = '';
for (var k in newArgs) {
string += '&' + k + '=' + newArgs[k];
}
string = string.substr(1);
return string;
};
분석 XML
function getXMLNodeValue(node_name,xml){
var tmp = xml.split("");
var _tmp = tmp[1].split(""+node_name+">");
return _tmp[0];
}
클 라 이언 트 는 WeixinJSBridge 를 통 해 팝 업 결제 창 을 직접 실현 합 니 다.
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
{
"appId" : "wxebs20ae8d978330b", // ,
"timeStamp" : "1414211784", // , 1970
"nonceStr" : "ibuaiVcKdpRxkhJA", //
"package" : "prepay_id=",
"signType" : "MD5", // :
"paySign" : "" //
},
function (res)
{
WeixinJSBridge.log(res.err_msg);
//alert(res.err_code+res.err_desc+res.err_msg);
//
}
);
}
function callpay()
{
if (typeof WeixinJSBridge == "undefined")
{
if (document.addEventListener)
{
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
}
else if (document.attachEvent)
{
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
}
else
{
jsApiCall();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.