# 支付服務
* * * * *

此處僅講解最常用的支付寶及微信支付。
1.首先我們需要安裝支付寶及微信支付驅動。


以上圖片中的信息是需要您安裝時錄入進去的,千萬不要錄入錯誤。
至于這些信息從哪里看,可以百度搜索,此處不具體講解信息從哪里查看。
當支付寶和微信驅動安裝完成后,參考下面代碼進行支付調起。
```
/**
* 支付服務
*/
public function demoPay()
{
$test_order['order_sn'] = date('ymdhis', time()) . rand(10000, 99999);
$test_order['body'] = '測試';
$test_order['order_amount'] = 0.01;
// (微信公眾號下使用JSAPI支付時才需要此參數,用于跳轉授權)
$test_order['redirect_uri'] = 'http://ob.xxx.cn';
//-------------- 支付寶相關支付-----------------
// (電腦網站環境下)支付寶PC網站發起支付
echo $this->servicePay->driverAlipay->pay($test_order);
// (移動端非微信環境瀏覽器下)支付寶H5支付
echo $this->servicePay->driverAlipay->pay($test_order, 'h5');
// (支付寶APP支付) 返回給IOS或安卓 客戶端處理
dump($this->servicePay->driverAlipay->pay($test_order, 'app'));
//-------------- 微信相關支付------------------
// (電腦網站環境下)微信PC網站發起支付
echo $this->servicePay->driverWxpay->pay($test_order);
// (移動端非微信環境的瀏覽器下)微信 H5 支付
echo '<a href="'.$this->servicePay->driverWxpay->pay($test_order, 'h5').'">點擊跳轉H5微信支付</a>';
// (微信公眾號環境下) JSAPI 支付
echo $this->servicePay->driverWxpay->pay($test_order, 'JSAPI');
// (微信APP支付) 返回給IOS或安卓 客戶端處理
dump($this->servicePay->driverWxpay->pay($test_order, 'app'));
}
```
2.支付服務異步通知及同步跳轉配置。

此處為了方便開發者參考,咱們演示處理回調地址為 demo/demoPayNotify
演示異步通知處理代碼如下
```
/**
* 支付異步通知處理
*/
public function demoPayNotify()
{
// 獲取訂單號
$order_sn = get_order_sn();
// 獲取訂單信息
$info = $this->modelOrder->getInfo(['order_sn' => $order_sn]);
// 驗證訂單是否存在
empty($info) && die('不存在訂單號');
// 獲取支付驅動
$select_driver = SYS_DRIVER_DIR_NAME . $info['pay_type'];
// 驗證通知是否合法
$result = $this->servicePay->$select_driver->notify();
/**
* @todo 支付完成后通過訂單號處理相應業務邏輯
*/
if ($result) {
// 執行支付成功業務邏輯代碼塊...
}
}
```
可以將異步通知地址設置成您需要的地址(注意在未登錄和沒有權限的情況下可以正常訪問)。
然后將通知的演示代碼粘貼過去根據您的具體情況適當調整,然后拿到訂單號處理您的業務邏輯即可。
3.如果您使用了微信PC掃碼支付或微信JSAPI支付。
通常可以調起支付可以異步通知處理邏輯,基本上已滿足日常需求。
但是為了提升用戶體驗,比如前端需要異步檢測用戶是否掃碼支付成功進行相應跳轉。
微信PC掃碼支付在下圖紅框區域處理前端檢測

微信JSAPI支付在下圖紅框區域處理前端檢測

服務端檢測代碼參考如下
```
/**
* 前端支付狀態檢測
*/
public function demoCheckPayStatus($param = [])
{
// 業務邏輯代碼塊...
dump($param['order_sn']);
// 未支付
die('error');
// 已支付
die('succeed');
}
```
前端輪詢服務端請求,若異步通知成功訂單支付狀態將被修改。那么此時前端檢測到支付狀態修改后進行相應跳轉即可。
4.若您是APP支付,直接將驅動執行結果返回給安卓或IOS客戶端處理即可。
- 序言
- 基礎
- 安裝環境
- 安裝演示
- 規范
- 目錄
- 介紹
- 后臺介紹
- 后臺首頁
- 會員管理
- 系統管理
- 系統設置與配置管理
- 菜單管理
- 系統回收站
- 服務管理
- 插件管理
- 文章管理
- 接口管理
- 優化維護
- SEO管理
- 數據庫
- 文件清理
- 行為日志
- 執行記錄
- 統計分析
- 接口介紹
- 接口文檔
- 錯誤碼設計
- Token介紹
- 前臺介紹
- 架構
- 架構總覽
- 生命周期
- 入口文件
- 模塊設計
- 依賴注入
- 控制器架構
- 邏輯架構
- 驗證架構
- 服務架構
- 模型架構
- 行為架構
- 插件架構
- 配置
- 配置介紹
- 配置加載
- 配置擴展
- 請求
- 請求信息
- 日志
- 后臺行為日志
- 系統執行日志
- 框架日志
- 數據
- 數據庫設計
- 數據字典
- 數據庫操作
- 事務控制
- 混合操作
- 實戰
- 控制器
- 邏輯與驗證
- 視圖與模型
- 插件研發
- 服務研發
- 接口研發
- 雜項
- 數據導入導出
- 二維碼條形碼
- 郵件發送
- 云存儲服務
- 支付服務
- 短信服務
- 微信分享
- 生成海報
- 聊天室
- PJAX
- Demo
- Widget
- 附錄
- 常量參考
- 配置參考
- 函數參考
- 進階
- Redis
- 自動緩存
- 全自動緩存
- 索引
- 數據簽名
- 全自動事務
- 隊列