zoukankan      html  css  js  c++  java
  • 微信公众号支付

    一、获取用户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是一样的)

  • 相关阅读:
    android加固系列—2.加固前先要学会破解,调试内存值修改程序走向
    算法—12.广度优先搜索
    算法—11.深度优先搜索
    算法—10.红黑二叉查找树
    算法—二叉查找树的相关一些操作及总结
    binary_search
    no title
    be face up to early
    Linux虚拟机网络配置
    网络工程问题历史遗留
  • 原文地址:https://www.cnblogs.com/oyx305/p/5670966.html
Copyright © 2011-2022 走看看