1

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

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方面?

4

1 回答 1

0

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

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

于 2013-09-19T14:27:25.103 回答