好吧,我已经为此撞了几天了。我正在将付款流程构建到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。我们还提供了许多可运行的示例,只需一个命令即可在本地计算机中进行设置。