【问题标题】:PAYPAL RESTful API execute call occasional errorPAYPAL RESTful API 执行调用偶发错误
【发布时间】:2013-09-23 04:11:26
【问题描述】:

我已使用 paypal RESTful 的 API PHP SDK 将我的网站与 paypal 完全集成。现在我的问题是付款过程中每隔一段时间,一旦用户批准付款并返回我的网站执行,API 执行请求就会返回来自贝宝的以下响应。这些场景中的 HTTP 响应代码是 400 和 500。下面我列出了错误名称和错误消息,它们是我在执行操作 (https://api.paypal.com/v1/payments/payment/PAY-xxxxxxxxxxxxxxxxxxxxxxxxxx/execute) 时从贝宝收到的 JSON 响应的一部分:

400 PAYMENT_NOT_APPROVED_FOR_EXECUTION,付款人未批准付款 500 INTERNAL_SERVICE_ERROR,发生内部服务错误

就我用来进行该调用的代码而言,我添加了执行付款的函数。我应该补充一点,这在 98% 的情况下都有效。下面是代码:

public function getExecute()
{
    // Payment is cancelled
    if (!(Input::get('success') && Input::get('success') == 'true')) 
        return $this->runPaymentExitProcess();

    // No paymentId
    if (!Session::has('paymentId')) 
        return "No payment id to execute";

    $paymentId = Session::get('paymentId');


    $this->payment = Payment::get($paymentId, $this->apiContext);

    // The payer_id is added to the request query parameters when the user is redirected from paypal back to your site
    $this->execution->setPayer_id(Input::get('PayerID'));

    $response = $this->payment->execute($this->execution, $this->apiContext);


    // Check for paypal errors
    if (isset($response->name)) {
        // When we have a paypal error
        if ($this->hasPaypalError($response)) {
            $error = array('name' => $response->name, 'message' => $response->message);


    Session::put('error', $error);

            return (MODE == 'LIVE') ? Redirect::to('/paypalerror') : Redirect::to('/paypalerror'.MODE_PARAM);
            die;
        }   
    }   

    // Unset session
    Session::forget('paymentId');

    // execution successful
    if ($this->addPaymentIdToUser($paymentId))
        return (MODE == 'LIVE') ? Redirect::to('/') : Redirect::to('/'.MODE_PARAM);

}

代码在 laravel 中。请注意 $this->apiContext 是在类的构造函数中设置的。这也是函数是在redirect_urls下的API中设置的成功url。

有人可以帮我弄清楚这个问题是来自我还是 Paypal 方面?

【问题讨论】:

  • 我偶尔会遇到同样的错误。你解决了这个问题吗??

标签: paypal


【解决方案1】:

对于 400 错误,如果用户决定不批准付款,就会发生这种情况。如果您认为付款实际上已在网络流程中获得批准,那么这将是一个需要进一步研究的问题。

您能否提供 500 内部服务器错误响应的 debugId 和大致时间(带时区,或 GMT),如果您认为付款已被用户实际批准,请提供 400。

【讨论】:

  • 我想,我不确定当用户决定继续付款时,Paypal 会转到一个有下一步按钮的页面,但它会在几秒钟内重定向到提供的成功 url .如果在页面加载和重定向之间有人单击下一个按钮,它将返回 400。我亲身经历过一次。关于 500 和通常所有其他错误,我创建了一个错误记录器,它将向我的数据库添加错误条目。这是一个出口:dl.dropboxusercontent.com/u/22602637/… 请看一下
  • 可以在报告中添加调试 ID 吗?这应该是响应负载的一部分。
  • 使用沙箱时出现同样的错误.. 调试 id 很少:1d1f9b0a6c042, ed7d6d3e0ed17
  • 在支付(debug ids)中提供的支付没有被批准,这就是返回400错误的原因。
猜你喜欢
  • 2013-09-10
  • 2016-08-10
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多