【问题标题】:How to CompleteCheckoutSession for PHP Amazon Pay SDK?如何为 PHP Amazon Pay SDK 完成CheckoutSession?
【发布时间】:2021-11-26 11:23:50
【问题描述】:

我已经按照说明如何集成 Amazon V2 for 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 Amazon\Pay\API\Client($amazonpay_config);
$result = $client->updateCheckoutSession($checkoutSessionId, $payload);



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

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

但是我收到了这样的错误信息

{"reasonCode":"InvalidCheckoutSessionStatus","message":"您试图对处于不允许该操作的状态的 Checkout Session 调用操作"}

您能告诉我我的代码有什么问题吗?

【问题讨论】:

    标签: php amazon-pay


    【解决方案1】:

    更新结帐会话响应将包含一个约束对象,直到提供所有必需参数为止。 (必选参数:checkoutResultReturnUrl、chargeAmount、paymentIntent)

    一旦没有限制,响应将返回一个唯一的 amazonPayRedirectUrl。将买家重定向到该 URL 以让 Amazon Pay 运行交易。然后,在 Amazon Pay 处理完交易(包括任何必要的拒绝流程)后,买家将被重定向到 checkoutResultReturnUrl。 Amazon Pay 结账会话 ID 将作为查询参数包含在 checkoutResultReturnUrl 中。

    【讨论】:

    • 对不起,我错过了 updateCheckoutSession() 什么?
    • 工作流程应该是 UpdateCheckoutSession -> 检查响应是否有错误 -> 如果没有错误,则重定向到 amazonPayRedirectUrl(在 updateCheckoutSession 响应中返回)-> 在 checkoutResultReturnUrl 页面调用 getCheckoutSession 以检查错误 -> 如果没有错误,调用completeCheckoutSession。根据您共享的代码,您将在 updateCheckoutSession 之后立即调用 completeCheckoutSession。如您所见,还有一些必要步骤,并且重定向到 amazonPayRedirectUrl 必须在调用 completeCheckoutSession 之前发生。希望有帮助!
    【解决方案2】:

    ::updateCheckoutSession() 的结果将在webCheckoutDetails 中为您提供amazonPayRedirectUrl。您需要将客户端重定向到此 URL。

    客户在该外部页面上完成输入后,他们将被重定向回您的checkoutResultReturnUrl。此时您将能够完成 CheckoutSession。

    【讨论】:

    • 请问,amazonPayRedirectUrl 值在哪里设置?现在我从 updateCheckoutSession() 得到 NULL
    • 我已使用此代码生成按钮
    • $client = new Amazon\Pay\API\Client($amazonpay_config); $payload = '{"storeId":"'. $store_id .'","webCheckoutDetails":{"checkoutReviewReturnUrl":"'. $return_url .'"}}'; $signature = $client->generateButtonSignature($payload);
    • @ChhornSoro amazonPayRedirectUrl 不是您设置的 URL。它由 API 返回,如果没有限制,它应该是 $result 的一部分,位于 $result = $client->updateCheckoutSession($checkoutSessionId, $payload); 行之后。
    猜你喜欢
    • 2022-08-07
    • 2022-01-19
    • 2021-04-08
    • 2020-11-06
    • 2023-04-11
    • 2019-11-22
    • 1970-01-01
    • 2018-10-15
    • 2016-11-17
    相关资源
    最近更新 更多