微信h5支付

先下单拿到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参加签名

你可能感兴趣的:(WeChat)