Как завершить сеанс проверки для PHP Amazon Pay SDK?

#php #amazon-pay

Вопрос:

Я следую инструкции по интеграции Amazon V2 для PHP

 https://github.com/amzn/amazon-pay-api-sdk-php
 

Но я не смог найти ни одного раздела, в котором я мог бы реализовать функцию полной проверки сеанса, чтобы получить «chargeID».

Вот что я реализовал

 $payload = array(
    'webCheckoutDetails' => array(
    "checkoutResultReturnUrl" => HTTPS_SERVER . "index.php?route=payment/amazon/returnURL"
),
'paymentDetails' => array(
    'paymentIntent' => 'Authorize',
    'canHandlePendingAuthorization' => false,
    'chargeAmount' => array(
        'amount' => (int)$total_amount,
        'currencyCode' => 'JPY'
    ),
),
'merchantMetadata' => array(
    'merchantReferenceId' => $order_id,
    'merchantStoreName' => 'MWYW Online Store',
    'noteToBuyer' => 'Thank you for your order!'
)
);

try {

$client = new AmazonPayAPIClient($amazonpay_config);
$result = $client->updateCheckoutSession($checkoutSessionId, $payload);



$payload = array(
    'chargeAmount' => array(
            'amount' => (int)$total_amount,
            'currencyCode' => 'JPY'
        ),
);

$result = $client->completeCheckoutSession($checkoutSessionId, $payload);
 

Но я получил такое сообщение об ошибке

{«Код причины»:»Статус invalidcheckoutsession»,»сообщение»:»Вы пытались вызвать операцию в сеансе проверки, который находится в состоянии, когда эта операция запрещена»}

Не могли бы вы, пожалуйста, сказать мне, что не так с моим кодом?

Ответ №1:

Ответ сеанса проверки обновления будет включать объект ограничения до тех пор, пока не будут предоставлены все обязательные параметры. (обязательные параметры: checkoutResultReturnUrl, chargeAmount, PaymentIntent)

Как только ограничений не будет, ответ вернет уникальный amazonPayRedirectUrl. Перенаправьте покупателя на этот URL-адрес, чтобы Amazon Pay запустил транзакцию. Затем покупатель будет перенаправлен на checkoutResultReturnUrl после того, как Amazon Pay обработает транзакцию (включая любые потоки отклонений, если это необходимо). Идентификатор сеанса проверки Amazon Pay будет включен в качестве параметра запроса в checkoutResultReturnUrl.

Комментарии:

1. Извините, так что я пропустил в сеансе проверки обновлений() ?

2. Рабочий процесс должен быть UpdateCheckoutSession -> проверьте ответ на ошибки ->> если ошибок нет, перенаправьте на amazonPayRedirectUrl (возвращено в ответе updateCheckoutSession) ->>> на странице checkoutResultReturnUrl вызовите getCheckoutSession для проверки ошибок ->>>> если ошибок нет, вызовите completeCheckoutSession. Основываясь на коде, которым вы поделились, вы вызываете completeCheckoutSession сразу после updateCheckoutSession. Как вы можете видеть, есть еще несколько необходимых шагов, и перенаправление на amazonPayRedirectUrl ДОЛЖНО произойти-до — вызова completeCheckoutSession. Надеюсь, это поможет!

Ответ №2:

Результат ::updateCheckoutSession() даст вам amazonPayRedirectUrl webCheckoutDetails представление . Вам нужно перенаправить клиента на этот URL-адрес.

После того как клиент завершит ввод данных на этой внешней странице, они будут перенаправлены обратно на вашу checkoutResultReturnUrl . На этом этапе вы сможете завершить сеанс проверки.

Комментарии:

1. Извините , где я могу установить значение amazonPayRedirectUrl? Теперь я получил NULL от updateCheckoutSession()

2. Я использовал этот код для создания кнопки

3. $клиент = новый клиент AmazonPayAPI($amazonpay_config); $полезная нагрузка = ‘{«Идентификатор хранилища»:». $идентификатор хранилища»», «Данные веб-проверки»:{«checkoutReviewReturnUrl»:». $return_url .»»}}’; $подпись = $клиент->Кнопка создания подписи($полезная нагрузка);

4. @ChhornSoro amazonPayRedirectUrl-это не заданный вами URL-адрес. Он возвращается API и должен быть частью $result после вашей строки $result = $client->updateCheckoutSession($checkoutSessionId, $payload); , если нет ограничений.