微信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=`<xml>
            <return_code>SUCCESS</return_code>
            <return_msg>OK</return_msg>
            </xml>`
    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 = "<xml>";
formData += "<appid>"+appid+"</appid>"; //appid
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>"; //支付成功后微信服务器通过POST请求通知这个地址
formData += "<openid>"+openid+"</openid>";    //这个要
formData += "<out_trade_no>"+out_trade_no+"</out_trade_no>"; //订单号
formData += "<spbill_create_ip>"+spbill_create_ip+"</spbill_create_ip>";
formData += "<total_fee>"+total_fee+"</total_fee>"; //金额单位是分 切记
formData += "<trade_type>"+trade_type+"</trade_type>";
formData += "<sign>" + paysign(appid,body,mch_id,nonce_str,notify_url,openid,out_trade_no,spbill_create_ip,total_fee,trade_type,key) + "</sign>"
formData += "</xml>";
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
//<xml><return_code><![CDATA[SUCCESS]]></return_code>
//<return_msg><![CDATA[OK]]></return_msg>
//<appid><![CDATA[wx7510ac704607277b]]></appid>
//<mch_id><![CDATA[1474187102]]></mch_id>
//<nonce_str><![CDATA[COkaR1cTv1vnimDT]]></nonce_str>
//<sign><![CDATA[45D78A835C6383AE708BD121094C005A]]></sign>
//<result_code><![CDATA[SUCCESS]]></result_code>
//<prepay_id><![CDATA[wx20170526163717bbeca60a940261147057]]></prepay_id>
//<trade_type><![CDATA[JSAPI]]></trade_type>
//</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参加签名

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值