在現代商業活動中,支付系統早已不是選擇性投資,而是必須要有的一個部分。可通過paypal, stripe, braintree等第三方支付系統集成實現,同時還可以通過各大銀行提供的網關工具接入。本篇文章將詳細闡述如何使用billing庫完成php支付功能。
billing是一個流程嚴謹并易于使用的庫,可用于支付相關操作。其主要包含如下兩個部分:
billing
├── Gateway //支付網關相關
| ├── Alipay.php
| ├── Wechat.php
├── Model //支付模型相關
| ├── Order.php
| ├── Payment.php
Alipay.php和Wechat.php為支付網關,目前支持支付寶和微信支付,也可以根據需要擴展其它支付方式。Order.php和Payment.php為支付模型,用于維護訂單和支付流水信息。
在項目中使用billing庫,只需安裝并導入即可。假設網站需要接入支付寶支付方式,通過如下代碼進行初始化:
require_once 'billing/autoload.php';
use billing\Gateway\Alipay;
use billing\Model\Order;
use billing\Model\Payment;
$order = new Order();
$payment = new Payment();
$gateway = new Alipay([
'app_id' =>'your_app_id',
'app_private_key' =>'your_app_private_key',
'alipay_public_key' =>'your_alipay_public_key',
]);
其中,Order和Payment用于訂單和支付流水的操作;Alipay為支付網關,可根據實際情況導入對應的gateway。
接下來,主要講解支付寶支付的使用方法。在billing中,支付的流程大致如下:
新建訂單 ->用戶支付 ->支付回調 ->訂單狀態更新
新建訂單時,可以通過order對象調用create方法創建訂單,并返回訂單號及金額信息。
$orderInfo = [
'amount' =>8888, //支付金額
'order_no' =>'2020020210000001', //訂單號
'subject' =>'test order', //訂單標題
'body' =>'test order', //訂單內容
'return_url' =>'https://www.example.com/return', //支付成功后跳轉地址
'notify_url' =>'https://www.example.com/notify' //支付成功后回調地址
];
list($orderId, $orderAmount) = $order->create($orderInfo);
用戶支付時,可以通過gateway調用makePayment方法,生成支付鏈接,可跳轉到支付寶APP或支付寶網頁完成支付。
$params = [
'out_trade_no' =>$orderId, //訂單號
'subject' =>'test order', //訂單標題
'total_amount' =>sprintf("%0.2f", $orderAmount), //支付金額
];
$paymentUrl = $gateway->makePayment($params);
header('Location: ' . $paymentUrl);
支付回調后,需通過gateway對象的verify方法驗證回調結果的真實性,并更新訂單狀態。
$params = $_POST;
if (!$gateway->verify($params)) {
exit('fail');
}
if ($params['trade_status'] == 'TRADE_SUCCESS') {
$order->update($orderId, ['status' =>Order::STATUS_PAID]);
}
exit('success');
這時,支付寶支付的流程已經結束,訂單的狀態也被更新為已支付,商家可以基于此做進一步操作。
最后,我們再簡單介紹下billing庫的擴展性。如果需要增加更多的支付方式,開發者可以通過Gateway接口定義一個新的支付網關,并擴展相關支付方式即可。
namespace billing\Gateway;
interface Gateway {
public function makePayment(array $params): string;
public function verify(array $params): bool;
}
可見,只需實現makePayment和verify兩個方法即可完成一個支付網關的擴展。
本文以支付寶支付為例,具體使用方法請根據實際情況作出相應調整。billing庫即供php商戶開發使用,也是一個有著廣泛使用者群體和完整文檔支持的庫。希望本文能對初學者們有所幫助,也期望在未來更好的幫助廣大開發者完成更多復雜的支付操作。