Thinkphp整合添加paypal sdk进行支付的测试

Posted 爱钓鱼的程序猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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走了一遍过程。

 

以上是关于Thinkphp整合添加paypal sdk进行支付的测试的主要内容,如果未能解决你的问题,请参考以下文章

在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现Web端直传,服务端签名直传并设置上传回调的实现流程

PayPal 自适应支付延迟链式支​​付的接收方配置

Tihinkphp3.2整合最新版阿里大鱼进行短信验证码发送

paypal-php-sdk 中的 PayPal-Mock-Response

Paypal 整合到现有的购物车

paypal-php-sdk中的PayPal-Mock-Response