# 支付類(微信&支付寶)
支付類,采用了github 上用戶 較為受歡迎的輪子 :[https://github.com/zoujingli/pay-php-sdk](https://github.com/zoujingli/pay-php-sdk)
這里已經整合到了框架里面了,我們只要按照下面方法使用即可
### 配置
在設計到業務的地方傳入。IndexController里設置,傳入配置如下:
~~~text-html-php
$config = [
// 微信支付參數
'wechat' => [
'debug' => false, // 沙箱模式
'app_id' => '', // 應用ID
'mch_id' => '', // 微信支付商戶號
'mch_key' => '', // 微信支付密鑰
'ssl_cer' => '', // 微信證書 cert 文件
'ssl_key' => '', // 微信證書 key 文件
'notify_url' => '', // 支付通知URL
'cache_path' => '',// 緩存目錄配置(沙箱模式需要用到)
],
// 支付寶支付參數
'alipay' => [
'debug' => false, // 沙箱模式
'app_id' => '', // 應用ID
'public_key' => '', // 支付寶公鑰(1行填寫)
'private_key' => '', // 支付寶私鑰(1行填寫)
'notify_url' => '', // 支付通知URL
]
];
~~~
## [](https://github.com/zoujingli/pay-php-sdk#%E6%9E%B6%E6%9E%84)架構
由于各支付網關參差不齊,所以我們抽象了兩個方法?`driver()`,`gateway()`。
兩個方法的作用如下:
`driver()`?: 確定支付平臺,如?`alipay`,`wechat`;
`gateway()`: 確定支付網關,如?`app`,`pos`,`scan`,`transfer`,`wap`,`...`
具體實現可以查看源代碼。
### [](https://github.com/zoujingli/pay-php-sdk#1%E6%94%AF%E4%BB%98%E5%AE%9D)1、支付寶
SDK 中對應的 driver 和 gateway 如下表所示:
| driver | gateway | 描述 |
| --- | --- | --- |
| alipay | web | 電腦支付 |
| alipay | wap | 手機網站支付 |
| alipay | app | APP 支付 |
| alipay | pos | 刷卡支付 |
| alipay | scan | 掃碼支付 |
| alipay | bill | 電子賬單 |
| alipay | transfer | 帳戶轉賬(可用于平臺用戶提現) |
### [](https://github.com/zoujingli/pay-php-sdk#2%E5%BE%AE%E4%BF%A1)2、微信
SDK 中對應的 driver 和 gateway 如下表所示:
| driver | gateway | 描述 |
| --- | --- | --- |
| wechat | mp | 公眾號支付 |
| wechat | miniapp | 小程序支付 |
| wechat | wap | H5 支付(不支持沙箱模式) |
| wechat | scan | 掃碼支付 |
| wechat | pos | 刷卡支付 |
| wechat | app | APP 支付 |
| wechat | bill | 電子賬單 |
| wechat | transfer | 企業付款到零錢(可用于平臺用戶提現) |
| wechat | bank | 企業付款到銀行卡(可用于平臺用戶提現) |
## [](https://github.com/zoujingli/pay-php-sdk#%E6%93%8D%E4%BD%9C)操作
所有網關均支持以下方法
* apply(array $options)
說明:支付發起接口
參數:數組類型,訂單業務配置項,包含 訂單號,訂單金額等
返回:mixed
* refund(array|string $options, $refund\_amount = null)
說明:發起退款接口
參數:`$options`?為字符串類型僅對`支付寶支付`有效,此時代表訂單號,第二個參數為退款金額。
返回:mixed 退款成功,返回 服務器返回的數組;否則返回 false;
* close(array|string $options)
說明:關閉訂單接口
參數:`$options`?為字符串類型時代表訂單號,如果為數組,則為關閉訂單業務配置項,配置項內容請參考各個支付網關官方文檔。
返回:mixed 關閉訂單成功,返回 服務器返回的數組;否則返回 false;
* find(string $out\_trade\_no)
說明:查找訂單接口
參數:`$out_trade_no`?為訂單號。
返回:mixed 查找訂單成功,返回 服務器返回的數組;否則返回 false;
* verify($data, $sign = null)
說明:驗證服務器返回消息是否合法
參數:`$data`?為服務器接收到的原始內容,`$sign`?為簽名信息,當其為空時,系統將自動轉化?`$data`?為數組,然后取?`$data['sign']`。
返回:mixed 驗證成功,返回 服務器返回的數組;否則返回 false;
## [](https://github.com/zoujingli/pay-php-sdk#%E5%AE%9E%E4%BE%8B)實例
~~~text-html-php
$config = [
// 微信支付參數
'wechat' => [
'debug' => false, // 沙箱模式
'app_id' => '', // 應用ID
'mch_id' => '', // 微信支付商戶號
'mch_key' => '', // 微信支付密鑰
'ssl_cer' => '', // 微信證書 cert 文件
'ssl_key' => '', // 微信證書 key 文件
'notify_url' => '', // 支付通知URL
'cache_path' => '',// 緩存目錄配置(沙箱模式需要用到)
],
// 支付寶支付參數
'alipay' => [
'debug' => false, // 沙箱模式
'app_id' => '', // 應用ID
'public_key' => '', // 支付寶公鑰(1行填寫)
'private_key' => '', // 支付寶私鑰(1行填寫)
'notify_url' => '', // 支付通知URL
]
];
// 實例支付對象
$pay = new \extend\payment\Pay($config);
try {
$options = $pay->driver('alipay')->gateway('app')->apply($payOrder);
$gateway = $this->request->isMobile() ? 'wap' : 'web';
$result = $pay->driver('alipay')->gateway($gateway)->apply($options);
} catch (Exception $e) {
echo "創建訂單失敗," . $e->getMessage();
}
~~~
## [](https://github.com/zoujingli/pay-php-sdk#%E9%80%9A%E7%9F%A5)通知
#### [](https://github.com/zoujingli/pay-php-sdk#%E6%94%AF%E4%BB%98%E5%AE%9D)支付寶
~~~text-html-php
// 實例支付對象
$pay = new \extend\payment\Pay($config);
if ($pay->driver('alipay')->gateway()->verify($_POST)) {
logs($_POST, '', 'alipay');
} else {
logs($_POST, '', 'alipay');
}
~~~
#### [](https://github.com/zoujingli/pay-php-sdk#%E5%BE%AE%E4%BF%A1)微信
~~~text-html-php
$pay = new \extend\payment\Pay($config);
$verify = $pay->driver('wechat')->gateway('mp')->verify(file_get_contents('php://input'));
if ($verify) {
file_put_contents('notify.txt', "收到來自微信的異步通知\r\n", FILE_APPEND);
file_put_contents('notify.txt', "訂單單號:{$verify['out_trade_no']}\r\n", FILE_APPEND);
file_put_contents('notify.txt', "訂單金額:{$verify['total_fee']}\r\n\r\n", FILE_APPEND);
} else {
file_put_contents('notify.txt', "收到異步通知\r\n", FILE_APPEND);
}
echo "success";
~~~
- 序言
- 安裝 Yaf
- Yaf基礎知識
- 1.運行流程
- 2.YAF架構
- 3.目錄結構
- 4.Yaf的配置
- 5.Yaf的Bootstrap
- 6.Yaf的多模塊配置
- 7.Yaf中使用命名空間
- 本書框架配置
- 1.框架目錄結構
- 2.數據庫配置
- 3.緩存配置
- 4.全局配置
- 5.公共助手函數
- 請求與響應
- 1.請求-Request
- 2.響應-Response
- 數據庫操作
- 使用think-orm
- 接口開發
- 1.RESTful接口設計
- 2.Yar RPC接口設計
- 數據驗證
- 數據驗證 - validate
- 網頁開發
- Session
- Cookie
- 路由設置
- 工具類
- 1.Rsa加密
- 2.Random快速生成隨機數
- 3.Cache - 緩存
- 4.Weapp - 微信小程序類
- 5.Qiniu - 七牛云存儲使用
- 6.支付類(微信&支付寶)
- 7.Logs - 日志記錄