使用PayPal PHP SDK 更新订单值


Updating an order value with the PayPal PHP SDK

好吧,我已经为此撞了几天了。我正在将付款流程构建到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();
    }
}

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

补丁错误:状态(已创建){"名称":"PAYMENT_STATE_INVALID","消息":"由于当前付款状态,此请求无效","information_link":"https://developer.paypal.com/webapps/developer/docs/api/#PAYMENT_STATE_INVALID","debug_id":"9caacdc1d652b"}

你可以看到我正在输出 getState(),它以"创建"的形式返回,这通常可以更新我能找到的所有内容,但它仍然失败。

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

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

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