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

    http://www.upwqy.com/details/8.html

    作为一个新手,第一次需要完成线上支付,我选择使用demo中的例子,在tp5 框架中直接加载要使用的类。

    然后就是完成支付需要的步骤:

    1 获取位置支付所需要的配置信息

        const APPID = '你的appid';
        const MCHID = '商户号';
        const KEY =       '商户支付密钥';
        const APPSECRET = '公众帐号secert';    

    如果没有正式账号 可以使用测试账号:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

    2 获取openid 

    //加载必要的类 
    $tools = new JsApiPay(); $openId = $tools->GetOpenid();

    这里获取还是有点不太明白,我在网上查了好多,都说是在关注公众号的时候把这个openid 存入数据库,可是在这里我使用的手机号注册,怎么样才能把自己账号在关注事件获取到openid时绑定在一起存储到数据库,这里不太明白,所以我就是在进入公众号页面时调用一次,在登录后获取openid 在存入数据库中,和用户绑定在一起

    3 调用统一下单接口  生成订单

    这里就是需要在构建订单数据,比如说,想要买图书,构建购买图书的订单数据,订单ID 图书金额等

    然后就是调用接口,我这里还是使用demo中的类,加载必要类

    //②、统一下单
                $input = new WxPayUnifiedOrder();
                $input->SetBody($body);
                $input->SetAttach($attach);
                $input->SetOut_trade_no($trade_no);
                $input->SetTotal_fee($total*100);
                $input->SetTime_start($start);
                $input->SetTime_expire($expire);
    //        $input->SetGoods_tag("test");
                $input->SetNotify_url("http://blog.upwqy.com/wxpay/example/notify.php");
                $input->SetTrade_type("JSAPI");
                $input->SetOpenid($openId);
                $order = WxPayApi::unifiedOrder($input);
           $jsApiParameters = $tools->GetJsApiParameters($order);

    ps:统一下单这里 支付金额不能是sting类型的  整型和浮点型的数据才可以

    这里面的参数查看一下官方文档就知道什么意思了。这里就不赘述了。

    统一下单接口:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1

    4 H5页面调起微信支付api

    下面是官方文档给的方法:

    function onBridgeReady(){
       WeixinJSBridge.invoke(
           'getBrandWCPayRequest', 
    //这里的数据就是统一下单步骤中返回的
    $jsApiParameters {
    "appId":"wx2421b1c4370ec43b",     //公众号名称,由商户传入     
               "timeStamp":"1395712654",         //时间戳,自1970年以来的秒数     
               "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串     
               "package":"prepay_id=u802345jgfjsdfgsdg888",     
               "signType":"MD5",         //微信签名方式:     
               "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 
           },

    function(res){ if(res.err_msg == "get_brand_wcpay_request:ok" ) {} // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。 } ); } if (typeof WeixinJSBridge == "undefined"){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); } }else{ onBridgeReady(); }

    我们这里需要处理一下  

    在点击支付以后,首先

    异步调用统一下单方法,获取需要的参数  

    $.post("调用统一下单方法的链接,异步调用",data,function (res) {
    
                    if(res.error_code == 0){
                      //获取成功时,把获取到的json字符串转成json对象 
                        callpay($.parseJSON(res.info.jsparam));
                    }else {
                        layer.msg(res.msg);
                    }
                });

    获取到参数以后 调起微信支付jsapi 就可以支付了

    //调用微信JS api 支付
        function jsApiCall(jsapi)
        {
            WeixinJSBridge.invoke(
                    'getBrandWCPayRequest',
                    jsapi,
                    function(res){
                        WeixinJSBridge.log(res.err_msg);
                        if(res.err_msg == "get_brand_wcpay_request:ok" ){
                            $("#paybtn").attr("disabled", true);
                            window.location.href = "{:url('weixin/user/orderpage')}";
                        }
    //                    alert(res.err_code+res.err_desc+res.err_msg);
                    }
            );
        }
    
    
        function callpay(jsapi)
        {
            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(jsapi);
            }
        }
  • 相关阅读:
    asp.net大文件(视频)分片上传
    numpy.argmin
    python-Numpy学习之(一)ndim、shape、dtype、astype的用法
    matlab设置小数位数
    利用Open3D进行点云可视化
    dell5820参数
    CUDA与cuDNN
    Ubuntu16.04更换cudnn版本
    二进制格式保存文件np.save和np.load-Numpy数组的保存与读取方法
    python pickle存储、读取大数据量列表、字典数据的方法
  • 原文地址:https://www.cnblogs.com/wqy415/p/6818838.html
Copyright © 2011-2022 走看看