Хорошо, я бьюсь головой об этом уже несколько дней. Я встраиваю процесс оплаты в приложение PHP, которое позволит продавать продукты после того, как клиент одобрит платеж.
Я могу получить оплату с клиента без проблем, но если он выберет какой-либо продукт upsell, для которого требуется изменить стоимость заказа, то я получаю ошибки, даже если он следует букве, указанной в документации, которую я смог найти …
Ниже приводится тестовая функция, которую я использую, эта функция вызывается, когда пользователь перенаправляется обратно на веб-сайт ПОСЛЕ подтверждения оплаты.
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();
}
}
Это не окончательный код, который я буду использовать, но сейчас я просто пытаюсь обновить заказ, прежде чем встроить больше логики. Этот код дает мне следующую ошибку:
ОШИБКА ПАТЧА: Состояние (создано) {«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 и может помочь мне в правильном направлении?
В PayPal, после того как пользователь одобрил платеж с экрана согласия, сумму нельзя изменить, поскольку вы можете понять, что пользователь согласился заплатить только ту сумму, которую он / она увидел на экране согласия. Изменение суммы после того, как пользователь утвердит ее, недопустимо, и поэтому вы видите это исключение состояния, так как состояние уже утверждено.
Во всяком случае, глядя на ваш сценарий, я думаю, что вы могли бы быть заинтересованы в создании порядок, или же захватить, вместо продажи.
Кроме того, в нашем PayPal-PHP-SDK есть много интересных документов, которые могут помочь вам понять PHP-SDK лучше. Мы также предоставляем много управляемые образцы, что вы можете настроить на своем локальном компьютере, только одной командой.
Других решений пока нет …