添加一個支付擴展,首先第一步我們需要找到文檔,如果有相關的sdk最好。
paypal的文檔和sdk地址:
https://github.com/paypal/PayPal-PHP-SDK
https://github.com/paypal/PayPal-PHP-SDK/wiki
示例代碼:https://github.com/paypal/PayPal-PHP-SDK/tree/master/sample
支付流程:https://developer.paypal.com/docs/api/quickstart/payments/
第二步,我們需要開發者賬號。
https://www.paypal.com/註冊一個賬號,然後到https://developer.paypal.com登陸
接下來我們需要sandbox賬號,一個是買家一個是賣家。(注意,不要創建兩個中國區的賬號,因爲Paypal規定中國之間的賬戶無法實現支付,據說是外匯監管的問題)
有了賬號後,我們現在創建一個應用,生成Client ID和Secret
------------------------
然後我們下載一個thinkphp框架,使用composer安裝php的sdk,在框架根目錄下運行
composer require paypal/rest-api-sdk-php:*
安裝成功後,我們接下來怎麼使用。
看了文檔https://github.com/paypal/PayPal-PHP-SDK/wiki
他基本上要做的事情有兩樣,
1,生成一個跳轉的支付鏈接。
2,做一個回調地址接收數據。
支付流程:
---------------------------------------------------
我們在thinkphp中建一個pay的應用
添加控制器Index.php
<?php
namespace app\pay\controller;
use think\Controller;
class Index extends Controller
{
public function index()
{
$apiContext = new \PayPal\Rest\ApiContext(
new \PayPal\Auth\OAuthTokenCredential(
'AYSq3RDGsmBLJE-otTkBtM-jBRd1TCQwFf9RGfwddNXWz0uFU9ztymylOhRS', // ClientID
'EGnHDxD_qRPdaLdZz8iCr8N7_MzF-YHPTkjs6NKYQvQSBngp4PTTVWkPZRbL' // ClientSecret
)
);
/*sandbox 模式*/
$apiContext->setConfig(array('mode' => 'sandbox'));
$payer = new \PayPal\Api\Payer();
$payer->setPaymentMethod('paypal');
$amount = new \PayPal\Api\Amount();
$amount->setTotal('1.00');
$amount->setCurrency('USD');
$transaction = new \PayPal\Api\Transaction();
$transaction->setAmount($amount);
$redirectUrls = new \PayPal\Api\RedirectUrls();
$sn=time();
$redirectUrls->setReturnUrl("http://t1.com/pay/Index/returnUrl/sn/".$sn)
->setCancelUrl("http://t1.com/pay/Index/cancelUrl/sn/".$sn);
$payment = new \PayPal\Api\Payment();
$payment->setIntent('sale')
->setPayer($payer)
->setTransactions(array($transaction))
->setRedirectUrls($redirectUrls);
try {
$payment->create($apiContext);
echo $url=$payment->getApprovalLink();
echo "<br><a href='".$url."'>點擊支付</a>\n";
}
catch (\PayPal\Exception\PayPalConnectionException $ex) {
echo $ex->getData();
}
}
public function returnUrl(){
$apiContext = new \PayPal\Rest\ApiContext(
new \PayPal\Auth\OAuthTokenCredential(
'AYSq3RDGsmBLJE-otTkBtM-jBRd1TCQwFf9RGfwddNXWz0uFU9ztymylOhRS', // ClientID
'EGnHDxD_qRPdaLdZz8iCr8N7_MzF-YHPTkjs6NKYQvQSBngp4PTTVWkPZRbL' // ClientSecret
)
);
/*sandbox 模式*/
$apiContext->setConfig(array('mode' => 'sandbox'));
// Get payment object by passing paymentId
$paymentId = $this->request->param('paymentId');
$payment = new \PayPal\Api\Payment();
$payment = $payment->get($paymentId, $apiContext);
$payerId = $this->request->param('PayerID');
// Execute payment with payer ID
$execution = new \PayPal\Api\PaymentExecution();
$execution->setPayerId($payerId);
try {
// Execute payment
$result = $payment->execute($execution, $apiContext);
if ($result && isset ( $result->state ) && $result->state == 'approved') {
echo "支付成功";
}else{
echo "支付失敗";
var_dump($result);
}
} catch (PayPal\Exception\PayPalConnectionException $ex) {
echo $ex->getCode();
echo $ex->getData();
die($ex);
} catch (Exception $ex) {
die($ex);
}
}
public function cancelUrl(){
echo '取消支付';
}
}
運行http://t1.com/pay得到一個支付的跳轉鏈接,點擊
登陸進行支付
支付成功後,跳轉到我們原來設置的url.
到這裏我們就把paypal在thinkphp走了一遍過程。