0

好的,这几天我一直在努力解决这个问题。我正在将支付流程构建到一个 PHP 应用程序中,该应用程序将允许在客户批准付款后追加销售产品。

我可以毫无问题地向客户收取付款,但如果他们选择任何需要更改订单价值的追加销售产品,那么即使它遵循我可以找到的文档中的内容,我也会收到错误...

下面是我正在使用的测试函数,这是当用户在批准付款后被重定向回网站时调用的函数。

public function confirmOrder($payer_id, $payment_id, $incentives = false){

    //GET PAYMENT
    $payment = Payment::get($payment_id, $this->apiContext);

    //CREATE EXECUTION WITH PAYER ID
    $execution = new PaymentExecution();
    $execution->setPayerId($payer_id);

    //APPLY PAYMENT AMOUNT - Original amount was 7.00
    $amount = new Amount();
    $amount = $amount->setCurrency('GBP')->setTotal('8.00');

    //PATCH REPLACE
    $patchReplace = new Patch();
    $patchReplace = $patchReplace->setOp('replace')->setPath('/transactions/0/amount')->setValue($amount);

    //CREATE PATCH OBJECT
    $patchRequest = new PatchRequest();
    $patchRequest = $patchRequest->setPatches(array($patchReplace));

    try {
        $payment->update($patchRequest, $this->apiContext);
    } catch (PayPalConnectionException $ex) {
        return "PATCH ERROR: State(" . $payment->getState() . ") ".$ex->getData();
    }
}

这不是我将使用的最终代码,但现在我只是想在构建更多逻辑之前更新订单。这段代码给了我以下错误:

PATCH ERROR: State(created) {"name":"PAYMENT_STATE_INVALID","message":"由于当前的付款状态,此请求无效","information_link":" https://developer.paypal.com/ webapps/developer/docs/api/#PAYMENT_STATE_INVALID ","debug_id":"9caacdc1d652b"}

您可以看到我正在输出 getState() ,它作为“已创建”返回,这通常可以更新我能找到的所有内容,但它仍然失败。

有没有其他人有使用 PayPal PHP SDK 的经验并且可以帮助我指出正确的方向?

4

1 回答 1

0

在 PayPal 中,一旦用户在同意屏幕上批准了付款,就无法更改金额,因为您可以理解用户同意只支付他/她在同意屏幕上看到的金额。不允许在用户批准后修改金额,这就是您看到该状态异常的原因,因为该状态已被批准。

无论如何,看看你的场景,我认为你可能对创建订单捕获感兴趣,而不是销售。此外,在我们的 PayPal-PHP-SDK 中,有很多有趣的文档可以帮助您更好地了解PHP-SDK。我们还提供了许多可运行的示例,您可以通过一个命令在本地机器上进行设置。

于 2015-03-12T16:48:54.133 回答