<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Niushop開源商城通過插件開發新型支付方式 --- 支付插件開發是針對3.1以上版本,實現統一化的支付功能進行設置的。 下面以微信支付的開發進行說明 ![](https://img.kancloud.cn/90/ca/90ca77d967d0f4c3ace60c83fa3ac766_445x153.png) * **后臺菜單功能開發:** 主要實現后臺微信支付的配置界面,具體的配置以及代碼書寫可以參照插件后臺功能開發細節![](https://img.kancloud.cn/fd/7b/fd7be20b01e9b83eb59e61ca7abe2e23_1122x681.png) * **實現鉤子開發 1. 獲取支付配置 payconfig\($param\)** 該鉤子主要在查詢當前存在的支付方式,以及實際支付調用時進行查詢。 ![](https://img.kancloud.cn/8f/1f/8f1f770f31bda863ae4c624fb16e1baa_1363x447.png) * **實現鉤子開發 2. 支付** 不同的支付方式實際支付返回的數據不同,比如掃碼支付返回的是二維碼路徑,jsapi支付可能直接就調用了,通過調用網址方式返回url,直接打開方式返回html等等,所以系統設置了幾種可能返回的形式,方便處理,下面是pay控制器下面 ```php //返回形式 code_url, url , 直接跳轉 $result = hook("pay", [ 'addon_name' => $type, 'out_trade_no' => $out_trade_no, 'notify_url' => $notify_url, 'return_url' => $return_url ]); $result = arrayFilter($result); $result = $result[0]; if ($result['data']['return_type'] == 'qrcode') { $path = getQRcode($result['data']['code_url'], "upload/qrcode/pay", $out_trade_no); $this->assign("path", __ROOT__ . '/' . $path); $pay_result = api('System.Pay.payInfo', [ 'out_trade_no' => $out_trade_no ]); $pay_value = $pay_result["data"]; $this->assign('pay_value', $pay_value); return $this->view($this->style . "pay/qrcode"); } elseif ($result['data']['return_type'] == 'url') { if ($result['code'] > 0) { $this->redirect($result["url"]); } else { $this->error($result['data']['out_message']); } } elseif ($result['data']['return_type'] == 'html') { echo $result['data']['html']; } ``` 微信支付書寫方案 ```php $pay_service = new Pay(); if (!isWeixin()) { // 掃碼支付 if (request()->isMobile()) { $res = $pay_service->wchatPay($param['out_trade_no'], 'MWEB', $param['notify_url']); if (empty($res['mweb_url'])) { return error(['return_type' => 'url', 'out_message' => json_encode($res, JSON_UNESCAPED_UNICODE)]); } return success(['return_type' => 'url', 'url' => $res["mweb_url"]]); } else { $res = $pay_service->wchatPay($param['out_trade_no'], 'NATIVE', $param['notify_url']); if ($res["return_code"] == "SUCCESS") { if (empty($res['code_url'])) { $code_url = json_encode($res, JSON_UNESCAPED_UNICODE); } else { $code_url = $res['code_url']; } if (!empty($res["err_code"]) && $res["err_code"] == "ORDERPAID" && $res["err_code_des"] == "該訂單已支付") { $code_url = json_encode($res, JSON_UNESCAPED_UNICODE);; } } else { $code_url = json_encode($res, JSON_UNESCAPED_UNICODE); } return success(['return_type' => 'qrcode', 'code_url' => $code_url]); } } else { // jsapi支付 $res = $pay_service->wchatPay($param['out_trade_no'], 'JSAPI', $param['notify_url']); if (!empty($res["return_code"]) && $res["return_code"] == "FAIL" && $res["return_msg"] == "JSAPI支付必須傳openid") { return error(['return_type' => 'url', 'out_message' => json_encode($res, JSON_UNESCAPED_UNICODE)]); } else { $retval = $pay_service->getWxJsApi($res); $this->assign("out_trade_no", $param['out_trade_no']); $this->assign('jsApiParameters', $retval); $view = $this->fetch(ADDON_DIR . '/NsWeixinpay/template/wechat_pay.html'); return success(['return_type' => 'html', 'html' => $view]); } } ``` 1. jsapi支付,直接進入微信內部,支付成功之后微信回調,然后返回支付結構,系統自動按照返回結果展示。 2. h5支付,調用微信付接口,返回接口url,系統調用url 3. 掃碼支付返回二維碼url,系統通過掃碼url執行掃描。 * **支付異步回調 payNotify** 每種支付實現對應異步回調,微信支付異步執行,實現異步回調。 * **支付退款 refund\($param\)** 執行對應支付訂單的退款操作,實現支付退款接口。 * **支付轉賬 transfer\($param\)** 實現支付轉賬接口業務。
                  <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>

                              哎呀哎呀视频在线观看