<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                **目錄 (Table of Contents)** [TOC] ## 微信公眾號內JS API 支付 我們模擬會員充值業務 ### 步驟1、 后端統一下單 Order.php頁面 ```PHP //配置微信支付必要的參數 $wxConfigure = new WechatConfig(); $wxConfigure->setParameter("appid",YOUR_APPID); $wxConfigure->setParameter("appsecret",YOUR_SECRET); $wxConfigure->setParameter("mchid",YOUR_MCHID']); $wxConfigure->setParameter("key",YOUR_KEY); // 您的微信支付回調的地址,一般callback存放域名部分,這里我們假設域名是https://wx.endor-test.com/ $wxConfigure->setParameter("callback",YOUR_CALLBACK); $jsPay = new JsPay($wechatConfig); $orderSn = null; $totalPrice = null; $openid = null; // 第一次發起支付請求,需要通過code去獲取openid if(isset($_GET['code'] )) { $totalPrice = $_POST['totalPrice'] * 100; // 微信支付以分為單位 $out_trade_no = date("YmdHisms") ; // 這一部分是本地服務器操作訂單的部分,根據實際情況自行處理 $orderInfo = [ 'out_trade_no' => $out_trade_no, 'user_id' => $_POST['user_id'],// user_id是本地系統中用戶的id,根據實際情況獲取,這里只是舉例說明 'total_price'=>$totalPrice, 'order_status'=>'未支付', 'pay_time'=>'', ]; // 將orderInfo 保存到本地服務器數據庫,假設這里已經保存 // 生成獲取code的鏈接,假設當前下單的路由是 https://wx.endor-test.com/order.php $callbackUrl = $wxConfigure->setParameter("callback"); // 生成的url需要將本地服務器訂單號帶上 $callbackUrl = $callbackUrl . "/order.php?out_trade_no=".$out_trade_no; $url = $jsPay->createOauthUrlForCode($callbackUrl); // 如果是SPA應用,這里將url返回給前端,前端通過location.href跳轉,跳轉后獲取 // 路由中的code,將下單接口的參數加上out_trade_no和code,再次調用相同的下單接口 // 發起請求 header("location:".$url); } else { // 跳轉后,url中是有code的參數的,將執行eles部分 $out_trade_no = $_GET['out_trade_no']; $code = $_GET['code'] ; // 通過 $out_trade_no 去本地服務器數據庫獲取訂單信息 // 假設我們已經拿到訂單信息 $orderInfo $jsPay->setCode($code); $openId = $jsPay->getOpenId(); if($openid == null) { // 出錯邏輯自行處理... return ; } // 在這里完成微信公眾號統一訂單下單 $unifiedOrder = new UnifiedOrder($wxConfigure); // 設置微信支付必填參數 $unifiedOrder->setParamter("openid",$openid); $unifiedOrder->setParamter("body","會員VIP充值業務"); // 商品描述 $unifiedOrder->setParamter("total_fee",$orderInfo['total_price']); $unifiedOrder->setParamter("out_trade_no",$out_trade_no ); $unifiedOrder->setParamter("out_trade_no",$out_trade_no ); $unifiedOrder->setParamter("out_trade_no",$out_trade_no ); $callbackUrl = $wxConfigure->setParameter("callback"); $unifiedOrder->setParamter("notify_url",$callbackUrl."/paycallback.php");//異步通知回調地址,假設我們這里是paycallback.php頁面 $unifiedOrder->setParamter("trade_type","JSAPI"); $prepay_id = $UnifiedOrder->getPrepayId(); // 獲取微信支付預訂單ID // 使用jsapi 喚起支付 $jsPayParameters = $jsPay->getParameters(); // 獲取js支付對象的配置參數,前端使用 echo $jsPayParameters; // 將$jsPayParamters 返回給前端頁面 } } ``` ### 步驟2 、前端:發起支付請求 Order.html >[info]這個html頁面也是微信官方給出的,關鍵點就是用Order.php中生成的$jsPayParameters 初始化 WeixinJSBridge.invoke()的第二個參數。 ```Javascript <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js"></script> <title>微信安全支付</title> <script type="text/javascript"> //調用微信JS api 支付 function jsApiCall() { WeixinJSBridge.invoke( 'getBrandWCPayRequest', <?php echo $jsApiParameters; ?>, function(res){ if(res.err_code+res.err_desc+res.err_msg=="NaNget_brand_wcpay_request:ok"){ location=跳轉到您處理成功的顯示頁面 } else { location=跳轉到您處理失敗的顯示頁面; } }); } 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(); } } window.onload = function(){ callpay(); } </script> </head> <body> </br></br></br></br> </body> </html> ``` ### 步驟3 、后端:微信支付回調事件 paycallback.php ```PHP //配置微信支付必要的參數 $wxConfigure = new WechatConfig(); $wxConfigure->setParameter("appid",YOUR_APPID); $wxConfigure->setParameter("appsecret",YOUR_SECRET); $wxConfigure->setParameter("mchid",YOUR_MCHID']); $wxConfigure->setParameter("key",YOUR_KEY); // 定義回調事件對象 $notify = new Notify($wxConfigure); // 等待微信回調后,回執行您定義的閉包函數 $nofify->waitPaymentNotifyResults(function ($results,$status) use ($notify) { if($status === "SUCCESS") { // 如果$status === "SUCCESS",說明本地服務器收到微信回調數據并鑒簽成功 // 數據以關聯數組形式存放在$results中,是NotifyData對象的關聯數組模式 file_put_contents("resultsdata.txt",var_export($results,true)); $out_trade_no = $results['out_trade_no']; // 這里執行您的系統邏輯,如修改訂單狀態,設置會員VIP狀態等等... // 最后,給微信返回 "success" } else { // 如果失敗,返回微信failed echo "failed"; } }); ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看