先下单拿到prepay_id
/**
* Created by 18468 on 2017/5/26.
*/
var express=require("express")
var app=express();
app.listen(8888,function(){
console.log("server is running")
});
app.post("/result",function(req,res){
var xml=`
SUCCESS
OK
`
req.on("data",function(data){
console.log(data+"")
})
res.end(xml)
})
var request=require("request");
var crypto=require('crypto');
var url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; //下单地址
var appid = "wx7510ac704607";
var mch_id = "1474187102";
var nonce_str = "5K8264ILTKCH16CQ2502SI8ZNMTM67VS";
var body = "朗杰测控-试验机";
var out_trade_no ="1234567";
var total_fee = 1;
var spbill_create_ip="114.5.104.11";
var notify_url ="http://www.langjie.com:8888/result";
var trade_type="JSAPI";
var openid="oseT5wZIFP8MOvedCw5i6wf9o";
var key="c7cE67bfb3110ca8a0fbeE9"; //这个32为大小写数字都要有
var formData = "";
formData += ""+appid+" "; //appid
formData += ""+body+""; //商品或支付单简要描述
formData += ""+mch_id+" "; //商户号
formData += ""+nonce_str+" "; //随机字符串,不长于32位
formData += ""+notify_url+" "; //支付成功后微信服务器通过POST请求通知这个地址
formData += ""+openid+" "; //这个要
formData += ""+out_trade_no+" "; //订单号
formData += ""+spbill_create_ip+" ";
formData += ""+total_fee+" "; //金额单位是分 切记
formData += ""+trade_type+" ";
formData += "" + paysign(appid,body,mch_id,nonce_str,notify_url,openid,out_trade_no,spbill_create_ip,total_fee,trade_type,key) + " "
formData += " ";
console.log(formData)
request(
{
url : url,
method : 'POST',
body : formData
}, function (err, response, body){
if(err){console.log(err)}else{
console.log(body)
}
}
);
function paysign(appid,body,mch_id,nonce_str,notify_url,openid,out_trade_no,spbill_create_ip,total_fee,trade_type,key) {
var ret = {
appid: appid,
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,
key:key
};
var stringA="";
stringA+="appid="+appid;
stringA+="&body="+body;
stringA+="&mch_id="+mch_id;
stringA+="&nonce_str="+nonce_str;
stringA+="¬ify_url="+notify_url;
stringA+="&openid="+openid;
stringA+="&out_trade_no="+out_trade_no;
stringA+="&spbill_create_ip="+spbill_create_ip;
stringA+="&total_fee="+total_fee;
stringA+="&trade_type="+trade_type;
var stringSign=stringA+"&key="+key;
var md5=crypto.createHash("md5");
md5.update(stringSign);
var str=md5.digest('hex');
var sign=str.toUpperCase(); //32位大写
console.log(sign)
return sign;
};
//反回的xml
//
//
//
//
//
//
//
//
//
//
2.在h5界面调用微信支付
wx.chooseWXPay({
timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: '', // 支付签名随机串,不长于 32 位
package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: '', // 支付签名
success: function (res) {
// 支付成功后的回调函数
}
});
备注:prepay_id 通过微信支付统一下单接口拿到,paySign 采用统一的微信支付 Sign 签名生成方法,注意这里 appId 也要参与签名,appId 与 config 中传入的 appId 一致,即最后参与签名的参数有appId, timeStamp, nonceStr, package, signType。这里有问题:其实还要商户key参加签名