[TOC]
在所有關于 **ThinkPHP3.2.3支付寶支付** 的教材中,無疑 `白俊遙` 的支付是我看到的寫的最為簡單,最為貼近開發者的心聲!
>當然官方的接口是最好及最新的,因為有代碼差異性,白俊遙 的支付是舊版的,當然也能用。在這里我們先講舊版的,再講新版的。因為這是一篇ThinkPHP3.2.3,已經集成了支付,所以我們先講舊版支付,后講新版本支付。
那么我們,就先按照 `白俊遙` 的教程來做,當然對于沒有做過支付的童鞋來說,還是比較容易走彎路的。
因為簡單,所以完成支付很快。因為簡單,遇到的坑也比較多。
那么我們先按照他的教程來做,期間有需要圖文貢獻的,我會及時補充!
有人說,你抄他的哎,是的,這一章有一部分內容是抄他的,接下來幾章,那就是我的創新了!
它的代碼項目地址:https://github.com/baijunyao/thinkphp-bjyadmin
他實現的場景是這樣的:
>目前有1個叫“測試”的商品名稱,價格為1元,訂單號為10位數字的時間戳!訪問地址直接跳轉到支付寶下單!
## 一、導入sdk
將開源項目下的 `/ThinkPHP/Library/Vendor/Alipay` 復制到我們對應的目錄下,如圖:

## 二、配置項
把 `/Application/Common/Conf/config.php`項目中關于支付寶的內容拷貝下來!如圖所示:

白的代碼如下,
```
'ALIPAY_CONFIG' => array(
'partner' => '', // partner 從支付寶商戶版個人中心獲取
'seller_email' => '', // email 從支付寶商戶版個人中心獲取
'key' => '', // key 從支付寶商戶版個人中心獲取
'sign_type' => strtoupper(trim('MD5')), // 可選md5 和 RSA
'input_charset' => 'utf-8', // 編碼 (固定值不用改)
'transport' => 'http', // 協議 (固定值不用改)
'cacert' => VENDOR_PATH.'Alipay/cacert.pem', // cacert.pem存放的位置 (固定值不用改)
'notify_url' => 'http://baijunyao.com/Api/Alipay/alipay_notify', // 異步接收支付狀態通知的鏈接
'return_url' => 'http://baijunyao.com/Api/Alipay/alipay_return', // 頁面跳轉 同步通知 頁面路徑 支付寶處理完請求后,當前頁面自 動跳轉到商戶網站里指定頁面的 http 路徑。 (掃碼支付專用)
'show_url' => 'http://baijunyao.com/User/Order/index', // 商品展示網址,收銀臺頁面上,商品展示的超鏈接。 (掃碼支付專用)
'private_key_path' => '', //移動端生成的私有key文件存放于服務器的 絕對路徑 如果為MD5加密方式;此項可為空 (移動支付專用)
'public_key_path' => '', //移動端生成的公共key文件存放于服務器的 絕對路徑 如果為MD5加密方式;此項可為空 (移動支付專用)
),
```
修改其中的代碼為我們自己的,如下
```
//*********************************** 支付寶支付 **********************************
'ALIPAY_CONFIG' => array(
'partner' => '2088821002087646', // partner 從支付寶商戶版個人中心獲取
'seller_email' => 'sxqiboxx@163.com', // email 從支付寶商戶版個人中心獲取
'key' => 'fftte2po5zcudr2dlsm136yv6ur9j0ah', // key 從支付寶商戶版個人中心獲取
'sign_type' => strtoupper(trim('MD5')), // 可選md5 和 RSA
'input_charset' => 'utf-8', // 編碼 (固定值不用改)
'transport' => 'http', // 協議 (固定值不用改)
'cacert' => VENDOR_PATH . 'Alipay/cacert.pem', // cacert.pem存放的位置 (固定值不用改)
'notify_url' => 'http://tp3/Api/Alipay/alipay_notify', // 異步接收支付狀態通知的鏈接
'return_url' => 'http://tp3/Api/Alipay/alipay_return', // 頁面跳轉 同步通知 頁面路徑 支付寶處理完請求后,當前頁面自 動跳轉到商戶網站里指定頁面的 http 路徑。 (掃碼支付專用)
'show_url' => 'http://tp3/User/Order/index', // 商品展示網址,收銀臺頁面上,商品展示的超鏈接。 (掃碼支付專用)
'private_key_path' => '', //移動端生成的私有key文件存放于服務器的 絕對路徑 如果為MD5加密方式;此項可為空 (移動支付專用)
'public_key_path' => '', //移動端生成的公共key文件存放于服務器的 絕對路徑 如果為MD5加密方式;此項可為空 (移動支付專用)
),
```

這里需要詳細說明一下,各種配置的獲取方式,這里主要是`partner`,`seller_email`,`key`這三個是從商戶中獲取的,如果有不知道的,可以參考《支付寶配置獲取》一節
>請注意:`notify_url` ,`return_url` ,`show_url` 這幾個路徑配置,正確上線的時候需要配置為帶有域名的正確網址。
注:本次支付可以先無視 `private_key_path`、`public_key_path `這兩個參數
## 三、支付函數
`/Application/Common/Common/function.php` 中將 `function alipay`拷貝過來。

代碼如下:
```
/**
* 跳向支付寶付款
* @param array $order 訂單數據 必須包含 out_trade_no(訂單號)、price(訂單金額)、subject(商品名稱標題)
*/
function alipay($order){
vendor('Alipay.AlipaySubmit','','.class.php');
// 獲取配置
$config=C('ALIPAY_CONFIG');
$data=array(
"_input_charset" => $config['input_charset'], // 編碼格式
"logistics_fee" => "0.00", // 物流費用
"logistics_payment" => "SELLER_PAY", // 物流支付方式SELLER_PAY(賣家承擔運費)、BUYER_PAY(買家承擔運費)
"logistics_type" => "EXPRESS", // 物流類型EXPRESS(快遞)、POST(平郵)、EMS(EMS)
"notify_url" => $config['notify_url'], // 異步接收支付狀態通知的鏈接
"out_trade_no" => $order['out_trade_no'], // 訂單號
"partner" => $config['partner'], // partner 從支付寶商戶版個人中心獲取
"payment_type" => "1", // 支付類型對應請求時的 payment_type 參數,原樣返回。固定設置為1即可
"price" => $order['price'], // 訂單價格單位為元
// "price" => 0.01, // // 調價用于測試
"quantity" => "1", // price、quantity 能代替 total_fee。 即存在 total_fee,就不能存在 price 和 quantity;存在 price、quantity, 就不能存在 total_fee。 (沒繞明白;好吧;那無視這個參數即可)
"receive_address" => '1', // 收貨人地址 即時到賬方式無視此參數即可
"receive_mobile" => '1', // 收貨人手機號碼 即時到賬方式無視即可
"receive_name" => '1', // 收貨人姓名 即時到賬方式無視即可
"receive_zip" => '1', // 收貨人郵編 即時到賬方式無視即可
"return_url" => $config['return_url'], // 頁面跳轉 同步通知 頁面路徑 支付寶處理完請求后,當前頁面自 動跳轉到商戶網站里指定頁面的 http 路徑。
"seller_email" => $config['seller_email'], // email 從支付寶商戶版個人中心獲取
"service" => "create_direct_pay_by_user", // 接口名稱 固定設置為create_direct_pay_by_user
"show_url" => $config['show_url'], // 商品展示網址,收銀臺頁面上,商品展示的超鏈接。
"subject" => $order['subject'] // 商品名稱商品的標題/交易標題/訂單標 題/訂單關鍵字等
);
$alipay=new \AlipaySubmit($config);
$new=$alipay->buildRequestPara($data);
$go_pay=$alipay->buildRequestForm($new, 'get','支付');
echo $go_pay;
}
```
## 四、調用
```
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller
{
public function index()
{
$data=array(
'out_trade_no'=>time(),
'price'=>1,
'subject'=>'測試'
);
alipay($data);
}
}
```
我們訪問: `http://tp3/Home/Index/index` 就會得到我們夢寐以求的界面,如圖所示:

>是不是 非常簡單 呢 !