payment 項目2.0版本 php
特別聲明:html
如下文檔均針對 payment 2.0 以上版本,而且PHP須要5.5以上(含)。
代碼中全部編碼均使用 utf-8 。git
經過幾天的時間,終於把payment 2.0的基本結構搭好了。今天剛完成支付寶 即時到賬 接口的開發。趕忙把使用文檔給補上。請你們必定仔細查看文檔,實在還不行就來問我吧!(我期待你問我,反正我收錢的,哈哈)github
在你使用這個接口時,請先確認你是否在支付寶商戶中心簽約了該接口。數據庫
在商戶中心,看到 即時到賬(已添加),說明你已簽約該接口,可正常使用。若是還不知道如何簽約,請 查看支付寶即時到賬簽約教程數組
OK!完成簽約後,服務器
須要把 payment項目導入本身的項目中 安裝方法,請參考Payment項目簡介。微信
在項目的 examples
文件夾中,我已提供完整的示例。爲了便於你們理解,這裏對代碼再進行說明。異步
在1.x版本中,配置文件被固定寫在了sdk中,這種作法太流氓了。爲了避免繼續流氓下去,在2.x版本中,將配置信息獨立出來,讓你們能夠根據本身的實際狀況自定義,靈活程度大大增長。函數
調用時,僅須要提供給我以下的一個數組,至於配置信息寫在哪裏,徹底由你本身決定。
我在示例中,是將配置信息寫在 examples/aliconfig.php
中,而後使用 require_once
包含進來。你徹底能夠寫cache中、db中。
return [ 'partner' => '2088xxxxxxxxxxx', 'md5_key' => 'xxxxxxxxxxxxxxxxxx', 'rsa_private_key' => './rsa_private_key.pem', "notify_url" => 'http://test.helei.com/pay-notify.html', "return_url" => 'http://test.helei.com/return-url.html', "time_expire" => '14', ];
參數介紹
參數 | 參數名 | 參數說明 | 是否必須 |
---|---|---|---|
partner | 合做者身份ID | 簽約的支付寶帳號對應的支付寶惟一用戶號。以2088開頭的16位純數字組成。 | 必須 |
md5_key | MD5密鑰 | 點擊這裏 | 必須 |
rsa_private_key | RSA私鑰 | 點擊這裏 | 必須 |
notify_url | 服務器異步通知URI | 支付寶服務器主動通知商戶網站裏指定的頁面http路徑。(建議使用https) | 可選 |
return_url | 頁面跳轉同步通知頁面路徑 | 支付寶處理完請求後,當前頁面自動跳轉到商戶網站裏指定頁面的http路徑。 | 可選 |
time_expire | 超時時間 | 設置未付款交易的超時時間,一旦超時,該筆交易就會自動被關閉。單位默認爲分鐘 | 可選 |
特別說明:
若是上述配置文件必須的key的值爲空,會拋出 PayException
異常
若是 notify_url
爲空,雖然可支付成功,可是客戶端將沒法收到支付寶的回調結果。
建議採用https協議
項目中的示例代碼,參見 examples/charge.php
// 生成訂單號 便於測試 function createPayid() { return date('Ymdhis', time()) .substr(floor(microtime()*1000),0,1) .rand(0,9); } // 訂單信息 $orderData = [ "orderTradeNo" => createPayid(), "totalFee" => '1', "clientIp" => '127.0.0.1', "subject" => '我是即時到賬', "body" => '支付測試即時到賬接口', "extraCommonParam" => '', ]; $aliconfig = require_once __DIR__ . '/aliconfig.php'; // 實例化支付環境類,進行支付建立 $charge = new ChargeContext(); try { $charge->initCharge(Config::ALI_CHANNEL_WEB, $aliconfig); $url = $charge->charge($payData); } catch (PayException $e) { echo $e->errorMessage();exit; } // 請求alipay header("Location:{$url}");
以上代碼就完成了即時到賬的所有調用,下面分步驟來講明下代碼含義:
此部分的key部分,必須採用如下值,不然SDK沒法識別。
// createPayid(); 函數是爲了演示方便,隨手寫的一個生成訂單號的函數 $orderData = [ "order_no" => createPayid(), "amount" => '1',// 單位爲元 "client_ip" => '127.0.0.1', "subject" => '測試支付', "body" => '支付接口測試', "extra_param" => '', ];
參數說明
參數 | 參數名 | 參數說明 | 是否必須 |
---|---|---|---|
order_no | 訂單號 | 平臺根據規則生成的訂單號,最長64位,要在商戶數據庫中惟一 | 必須 |
amount | 交易總金額 | 該筆訂單的資金總額,單位爲RMB-Yuan。取值範圍爲[0.01,100000000.00],精確到小數點後兩位。 | 必須 |
client_ip | 客戶端IP | 用戶在建立交易時,該用戶當前所使用機器的IP。 | 必須 |
subject | 商品名稱 | 商品的標題/交易標題/訂單標題/訂單關鍵字等。該參數最長爲128個漢字。 | 必須 |
body | 商品描述 | 對一筆交易的具體描述信息。若是是多種商品,請將商品描述字符串累加傳給body。 | 必須 |
extra_param | 公用回傳參數 | 若是用戶請求時傳遞了該參數,則返回給商戶時會回傳該參數。 | 可選 |
如下是真正實現數據簽名的地方,返回的數據可直接用於發起支付寶支付。你們能夠對比下支付寶自身信息,是否是已經大大簡化了?
固然簡化帶來的另一個意思就是:放棄了不少咱們正常狀況下用不到的功能,好比:花唄分期
// 實例化支付環境類,進行支付建立 $charge = new ChargeContext(); try { $charge->initCharge(Config::ALI_CHANNEL_WEB, $aliconfig); $url = $charge->charge($payData); } catch (PayException $e) { echo $e->errorMessage();exit; }
這裏對於調用者,僅僅須要知道 ChargeContext
這一個類,這裏使用了 策略模式 + 簡單工廠模式 兩種方法來進行調用的簡化。這種方式也很是方便後期進行擴展,對於客戶端與複雜的邏輯進行了隔離。
經過上一步返回的是請求支付寶的url。因爲在頁面上可能須要經過js調用支付寶或者還有其餘邏輯,由於我並無直接重定向到支付寶,而把控制權交到了客戶端手中。
如下代碼,示例的是簡單的利用返回的url,重定向到支付寶,完成支付。
header("Location:{$url}");
本次支付寶的即時到賬接口到這裏就完成了調用。下一節把回調通知部分完成,這樣一個基本的支付流程就完成了。
若是須要協助集成到項目,可付費得到個人服務!
微信:helei543345
郵箱: dayugog@gmail.com
支持我: