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 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走了一遍过程。
以上是关于Thinkphp整合添加paypal sdk进行支付的测试的主要内容,如果未能解决你的问题,请参考以下文章
在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现Web端直传,服务端签名直传并设置上传回调的实现流程
Tihinkphp3.2整合最新版阿里大鱼进行短信验证码发送