添加一个支付扩展,首先第一步我们需要找到文档,如果有相关的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走了一遍过程。

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐