与paypal集成时如何解决paypal登录选项卡丢失的问题

Posted

技术标签:

【中文标题】与paypal集成时如何解决paypal登录选项卡丢失的问题【英文标题】:how to solve paypal login tab missing when integrate with paypal 【发布时间】:2022-01-12 09:58:39 【问题描述】:

我想在 Laravel 中进行 paypal 集成。我已经使用 composer require srmklive/paypal 为我的项目安装 srmklive/paypal 包。当我想按下 PayPal 按钮时出现 404 错误。弹出的贝宝登录选项卡将丢失。然后我检查网络,我得到了像给出的图像一样的错误。

这是我的代码:

class PaymentController extends Controller

   public function create(Request $request)
       $data = json_decode($request->getContent(), true);

       $provider = \PayPal::setProvider();
       $provider->setApiCredentials(config('paypal'));
       $token = $provider->getAccessToken();
       $provider->setAccessToken($token);

       $plan = $provider->createOrder([
           "intent" => "CAPTURE",
           "purchase_units" => [
               [
                   "amount" => [
                       "currency_code" => "USD",
                       "value" => "30"
                   ],
                   "description" => "Item 1"
               ]
           ]
       ]);
       return response()->json($plan);
   

   public function capture(Request $request) 
        $data = json_decode($request->getContent(), true);
        $orderId = $data['orderID'];

        $provider = \PayPal::setProvider();
        $provider->setApiCredentials(config('paypal'));
        $token = $provider->getAccessToken();
        $provider->setAccessToken($token);

        $result = $provider->capturePaymentOrder($orderId);
        return response()->json($result);
   

这是刀片文件中的代码

paypal.Buttons(
 createOrder: function(data, actions) 
  return fetch('api/paypal/order/create/', 
  method: 'post',
  body:JSON.stringify(
   "value":30
   )
 ).then(function(res) 
    return res.json();
   ).then(function(orderData) 
     return orderData.id;
   );
 ,

  onApprove: function(data, actions) 
    return fetch('/api/paypal/order/capture/', 
     method: 'post',
     body: JSON.stringify(
      orderID: data.orderID
     )
     ).then(function(res) 
     return res.json();
     ).then(function(orderData) 
     var errorDetail = Array.isArray(orderData.details) && orderData.details[0];
     if (errorDetail && errorDetail.issue === 'INSTRUMENT_DECLINED') 
      return actions.restart(); // Recoverable state, per:
     

     if (errorDetail) 
      var msg = 'Sorry, your transaction could not be processed.';
      return alert(msg); 
                    
                );
            

        ).render('#paypal-button-container');

错误显示如给出的图像。

有人知道怎么解决吗?

【问题讨论】:

【参考方案1】:

您的服务器上是否存在路由api/paypal/order/create/?从错误消息中,它返回 404。

该路由必须存在(不是 404)并成功输出带有从 PayPal API 获得的id 的 JSON 响应。

【讨论】:

嗨,谢谢你的回复,我已经为api/paypal/order/create/创建了路由 然后调试它。它不能返回 404,并且必须返回带有 id 的 JSON 检查控制台后,我发现了这个错误: SyntaxError: Unexpected token 当您返回/输出 html 而不是 JSON 时会发生这种情况。只返回 JSON。

以上是关于与paypal集成时如何解决paypal登录选项卡丢失的问题的主要内容,如果未能解决你的问题,请参考以下文章

Paypal SDK 与 Android 登录集成失败

paypal如何认证?

如何将 Azure API 管理与 Paypal 集成

登录 paypal 帐户后无法看到我的应用程序页面

如何登录 Sandbox Paypal 帐户?

如何从 Woocommerce 的“我的帐户”中删除“Paypal 付款”选项卡