php - 沙盒 PayPal 批准链接在登录后指向仪表板而不是付款
问题描述
我在沙盒模式下使用 PayPal REST API 来测试付款。
我创建批准链接,然后将用户重定向到所述链接。
然后,PayPal 要求我作为沙盒测试买家插入的凭据。但登录后,PayPal 不会重定向我以完成付款批准,而是直接转到我无法批准付款的“我的帐户”摘要。但是,如果用户已经登录,则付款批准将按预期进行。
是链接是如何创建的问题还是一个错误?
这是用于创建链接的代码
<?php
use PayPal\Api\Amount;
use PayPal\Api\Details;
use PayPal\Api\Item;
use PayPal\Api\ItemList;
use PayPal\Api\Payer;
use PayPal\Api\Payment;
use PayPal\Api\RedirectUrls;
use PayPal\Api\Transaction;
use PayPal\Auth\OAuthTokenCredential;
use PayPal\Rest\ApiContext;
class PaypalFactory
{
private const CLIENT_ID = 'yyy';
private const CLIENT_SECRET = 'xxx';
private function __construct()
{
}
public static final function getContext()
{
return new ApiContext(
new OAuthTokenCredential(
self::CLIENT_ID,
self::CLIENT_SECRET
)
);
}
public static final function createPaymentLink(
int $orderId,
string $currency,
float $totalPrice,
float $deliveryPrice,
string $returnUrl,
string $cancelUrl): string
{
$payer = new Payer();
$payer
->setPaymentMethod("paypal");
$details = new Details();
$details
->setShipping($deliveryPrice)
->setSubtotal($totalPrice);
$item = new Item();
$item
->setName('products and shipping')
->setCurrency($currency)
->setPrice($totalPrice)
->setQuantity(1);
$itemList = new ItemList();
$itemList->setItems(array($item));
$amount = new Amount();
$amount
->setCurrency($currency)
->setTotal($totalPrice + $deliveryPrice)
->setDetails($details);
$transaction = new Transaction();
$transaction
->setItemList($itemList)
->setAmount($amount)
->setDescription("Products from ")
->setInvoiceNumber($orderId);
$redirectUrls = new RedirectUrls();
$redirectUrls
->setReturnUrl($returnUrl)
->setCancelUrl($cancelUrl);
$payment = new Payment();
$payment
->setIntent("sale")
->setPayer($payer)
->setRedirectUrls($redirectUrls)
->setTransactions(array($transaction));
try {
$payment->create(PaypalFactory::getContext());
} catch (Exception $ex) {
print $ex;
}
return $payment->getApprovalLink();
}
}
解决方案
清除贝宝域的所有浏览器 cookie 是一个很好的建议,并且可能会有所帮助。您遇到的问题可能是一般沙盒问题(在实时模式下不会发生),而不是您的代码问题。
但是,看到您的代码/解决方案,我确实有一些尝试一些更新/更好的东西的建议:
- 代替旧的 PayPal-PHP-SDK 用于 v1/支付,使用新的Checkout-PHP-SDK 用于 v2/订单
- 不要将买家重定向到批准 URL,而是将批准令牌提供给智能支付按钮的 Javascript 代码,这将显示一个上下文窗口,使您的网站在后台加载。这是一个演示模式
推荐阅读
- python - 从数组中删除出现超过 k 次的元素
- r - 转换多个csv。将文件转换为具有 R 中原始名称的多个矩阵
- ruby-on-rails - 如何将我与 Neo4j 的连接指定为 K8s 中的领导角色
- javascript - 超级表达式必须为空或函数??反应
- c++ - 在for循环中生成线程
- ios - EXC_BAD_ACCESS (SIGILL) 使用自动布局时崩溃?
- dart - 如何在 Angular Dart 2 中编写自定义模式验证器
- javascript - Javascript:在 var declare 中使用条件
- javascript - 使用 Ajax 请求 Django 模板
- python - 如何发出需要通过 ezproxy 服务器访问的 URL 请求?(Python)