Thinkphp整合添加paypal sdk進行支付的測試

添加一個支付擴展,首先第一步我們需要找到文檔,如果有相關的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 IDSecret

 

------------------------

然後我們下載一個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走了一遍過程。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章