微信公众号支付

一、获取用户openid

     1.进入授权页面,获取code

     2.授权后,回调页面通过code获取access_token

     3.用access_token获取openid等用户基本信息

以上(2,3步在后台执行)

二、用openid获取调用JSAPI支付的参数

      1.调用统一下单API,取得预支付id(prepay_id)

      2.用prepay_id等其他必要参数构造JSAPI支付所需参数

三、用上一步取得的参数,前台调起支付

var code = getUrlParam("code");
        $.ajax({
            url: "用户授权回调页面,用code取token、openid",
            data: {
                code: code
            },
            success: function(data) {
                if (data.result) {
                    console.log(JSON.stringify(data));
                    $.ajax({
                        url: "/xxx/pay/wechat/jsapiParam",
                                                //取参数
                        data: {
                            orderNo: orderNo,
                            openId: data.data.oAuthId,
                        },
                        success: function(data) {
                            if (data) {
                                console.log(JSON.stringify(data))
                                paramData = data;
                                if (data.errorCode == 0) {
                                    callpay();//调起支付控件
                                } else {
                                    var dia = $.dialog({
                                        title: '错误提示',
                                        content: data.msg,
                                        button: ["确认"]
                                    });
                                }
                            }
                        }
                    })
                }else{
                    if (data.errCode == 1) {
                        var dia = $.dialog({
                            title: '错误提示',
                            content: "链接无效",
                            button: ["确认"]
                        });
                        dia.on("dialog:action", function(e) {
                            if (e.index == 0) {
                                location.replace("http://order-pay.html?orderNo="+orderNo);
                            }
                        });
                    }
                }
            }
        })
        

        //调用微信JS api 支付
        function jsApiCall() {
            WeixinJSBridge.invoke(
                'getBrandWCPayRequest', {
                    "appId": paramData.appId, //公众号名称,由商户传入     
                    "timeStamp": paramData.timeStamp, //时间戳,自1970年以来的秒数     
                    "nonceStr": paramData.nonceStr, //随机串     
                    "package": paramData.package,
                    "signType": "MD5", //微信签名方式:     
                    "paySign": paramData.paySign //微信签名 
                },
                function(res) {
                    WeixinJSBridge.log(res.err_msg);
                    if (res.err_msg == "get_brand_wcpay_request:ok") {//支付成功处理
                        location.replace("/pay-success.html");
                    }
                    if(res.err_msg == "get_brand_wcpay_request:cancel" || res.err_msg == "get_brand_wcpay_request:fail"){
//支付失败或取消支付处理 location.replace(
"http://order-pay.html?orderNo="+orderNo); } else { var dia = $.dialog({ title: '错误提示', content: JSON.stringify(res), button: ["确认"] }); } //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(); } }

 

 

要做到在订单支付页面调起支付(用户无感知授权),需要在进入订单支付前取得code并保存openid,进入订单支付页面后,直接通过已经保存的openid获取相应参数调起JSAPI支付

 

附:

接口调试工具:https://pay.weixin.qq.com/wiki/tools/signverify/

文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3

注意:

1.商户号在公众号中申请的,申请成功后商户号与公众号的appid相关联的

2.需要在商户号的"api安全"中设置一个32位的key,该key与商户号对应,没设置或key不正确会导致报签名错误

3.调用jsapi的方式支付,需要在公众号中设置支付安全目录

4.用户登录授权的公众号应该是收款商户号所关联的公众号,不能是其他公众号,否则会报签名错误,因为不同公众号取得的用户openid不一样(unionid是一样的)

posted @ 2016-07-14 16:52  until-u  阅读(276)  评论(0编辑  收藏  举报