微信公衆號支付

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

做爲一個新手,第一次須要完成線上支付,我選擇使用demo中的例子,在tp5 框架中直接加載要使用的類。html

而後就是完成支付須要的步驟:前端

1 獲取位置支付所須要的配置信息數據庫

    const APPID = '你的appid';
    const MCHID = '商戶號';
    const KEY =       '商戶支付密鑰';
    const APPSECRET = '公衆賬號secert';    

若是沒有正式帳號 可使用測試帳號:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/loginjson

2 獲取openid api

//加載必要的類 
$tools = new \JsApiPay(); $openId = $tools->GetOpenid();

這裏獲取仍是有點不太明白,我在網上查了好多,都說是在關注公衆號的時候把這個openid 存入數據庫,但是在這裏我使用的手機號註冊,怎麼樣才能把本身帳號在關注事件獲取到openid時綁定在一塊兒存儲到數據庫,這裏不太明白,因此我就是在進入公衆號頁面時調用一次,在登陸後獲取openid 在存入數據庫中,和用戶綁定在一塊兒微信

3 調用統一下單接口  生成訂單app

這裏就是須要在構建訂單數據,好比說,想要買圖書,構建購買圖書的訂單數據,訂單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);
        }
    }
相關文章
相關標籤/搜索