rest - PayPal 智能支付按钮与服务器端 REST API 集成
问题描述
我知道有一些关于 PayPal 集成的问题,但我正在尝试使用智能按钮和 REST API 实现 PayPal Express Checkout,但没有成功。
我想做的是:
创建付款授权(使用
payid
和orderid
)将此发送
payid
给客户端(javascript)以进行批准。付款后重定向到确认页面。
我已经使用以下代码创建了付款授权:
<?php
// 1. Autoload the SDK Package. This will include all the files and classes to your autoloader
// Used for composer based installation
require __DIR__ . '/PayPal-PHP-SDK/autoload.php';
// Use below for direct download installation
// require __DIR__ . '/PayPal-PHP-SDK/autoload.php';
// After Step 1
$apiContext = new \PayPal\Rest\ApiContext(
new \PayPal\Auth\OAuthTokenCredential(
'client id', // ClientID
'cliente secret' // ClientSecret
)
);
// After Step 2
$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();
$redirectUrls->setReturnUrl("https://example.com/your_redirect_url.html")
->setCancelUrl("https://example.com/your_cancel_url.html");
$payment = new \PayPal\Api\Payment();
$payment->setIntent('sale')
->setPayer($payer)
->setTransactions(array($transaction))
->setRedirectUrls($redirectUrls);
// After Step 3
try {
$payment->create($apiContext);
echo $payment;
echo "\n\nRedirect user to approval_url: " . $payment->getApprovalLink() . "\n";
echo $data= json_encode($payment->id, JSON_PRETTY_PRINT), "\n";
echo "</br>";echo "</br>";
echo $data= $payment->id;
}
catch (\PayPal\Exception\PayPalConnectionException $ex) {
// This will print the detailed information on the exception.
//REALLY HELPFUL FOR DEBUGGING
echo json_encode($ex->getData()->id, JSON_PRETTY_PRINT), "\n";
echo "</br>";echo "</br>";
echo $ex->getData()->id;
}
?>
我的设置如下(请纠正,如果它是错误的):
用户选择项目并提交表单。
用户被重定向到带有新表单的新页面,然后用他的姓名和其他个人信息填写表单,然后提交表单以保存在数据库中并生成付款授权。
用户应该被重定向到带有智能按钮的最终页面以完成付款。
用户应该被重定向到确认页面,确认他的付款已成功。
问题是我被困在第 2 步,因为一旦我生成付款授权,我不知道如何在这个应该显示的新页面中将此 id(和其他必需参数)传递给客户端智能支付按钮完成交易。
我正在按照 PayPal 文档中的教程进行操作,但我无法理解。
JavaScript调用我的服务器来获取payid
它,它可以工作,但它会生成一个新的payid
和一个新的支付订单,我想使用用户提交表单时之前创建的一个,然后以某种方式将它传递给带有智能按钮的最后一页以完成交易并重定向到确认页面。
我的Javascript:
<script>
paypal.Button.render({
onApprove: function(data) {
return fetch('/my-server/get-paypal-transaction', {
headers: {
'content-type': 'application/json'
},
body: JSON.stringify({
orderID: data.orderID
})
}).then(function(res) {
return res.json();
}).then(function(details) {
alert('Transaction approved by ' + details.payer_given_name);
}, '#paypal-button');
</script>
问题是它生成了一个新的orderID
,一个新的事务,我想检索用户在步骤 2 中提交表单时生成的事务,但我不知道我应该做什么。
最终我需要的是:
获取付款授权并将其传递给客户(带有按钮的最后一页)
支付完成后重定向用户。
解决方案
您正在寻找这个前端:https ://developer.paypal.com/demo/checkout/#/pattern/server
对于您的后端,您应该使用最新的 v2/orders SDK:https ://github.com/paypal/Checkout-PHP-SDK
(您的 v1/payments 后端可以工作,但该 SDK 已弃用,没有理由将其用于新的集成)
推荐阅读
- javascript - JS多输入字段合二为一CF7
- python - 如何将多个字典的内容保存到一个字典中,然后将其保存在for循环中的列表中
- c - 在 fgets() 循环中实现 SIGINT 处理程序
- c++ - c++ 是 unordered_map
一个线程写入和第二个线程读取的线程安全,没有新元素插入? - ios - 即使在故事板中连接了 IB 网点,它们也变得为零
- c++ - 使用回溯的骑士算法
- linux - 特定于应用程序的 linux 系统调优
- c++ - 我的程序中出现 segsigv 错误的原因是什么?
- python - 如何解决在 Kivy 中没有属性“文本”的 NoneType 对象?
- python-3.x - Windows 注册表 DWORD 修改