当前位置: 首页 > 知识库问答 >
问题:

如何为PHP Amazon Pay SDK完成TechEckoutSession?

贺光华
2023-03-14

我已经按照说明将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 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”:“您试图调用处于不允许该操作的状态的签出会话上的操作”}

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

共有3个答案

聂溪叠
2023-03-14
$headers = array('x-amz-pay-Idempotency-Key' => uniqid()); // added externally

$client = new Amazon\Pay\API\Client($amazonpay_config);
$result = $client->updateCheckoutSession($checkoutSessionId, $payload , $headers);

这对我来说是有效的,因为我在$响应中获取了网络结帐详细信息数据

宫俊远
2023-03-14

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

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

厍书
2023-03-14

更新Checkout会话响应将包含一个Constraint对象,直到提供所有强制参数。(强制参数:check outResultReportnUrl、chargeAmount、paymentIntent)

一旦没有约束,响应将返回一个唯一的amazonPayReDirectUrl。将买家重定向到该URL以让Amazon Pay运行交易。然后,在Amazon Pay处理完交易(必要时包括任何拒绝流)后,买家将被重定向到check outResultRESTNUrl。Amazon Pay结帐会话ID将作为查询参数包含在check outResultRESTNUrl上。

 类似资料:
  • 问题内容: 在我的应用程序中,我尝试为用户打印出凭证页面,如下所示: “ ”是我的页面中的,用于存储有关凭证的信息。 它有效,并且打印页面弹出。但是,我希望用户一旦在浏览器的弹出式打印对话框中单击“ ”或“ ”,便可以升级该应用程序。 例如,我想在弹出窗口关闭后将用户重定向到另一个页面: 如何确定何时关闭弹出的打印窗口或打印完成? 问题答案: 在FireFox和Internet Explorer中

  • 问题内容: 这可能是一个愚蠢的问题,但是由于找不到答案,我不得不提出这个问题。 在交互式python中,我想处理一条消息: 一切正常,但是…如何阻止它获取输入并将其保存到message变量中?使用ctrl + c停止将停止整个过程,因此没有输入要保存在任何地方。我想我找不到一个简单的答案… 问题答案: 对于基于Unix的系统: 您好,您可以录音: 通过发送EOF关闭标准输入(stdin)。 范例:

  • 问题内容: 我的问题: 如何在a上执行一堆线程对象并等待它们全部完成后再继续? 我是ThreadPoolExecutor的新手。因此,此代码是测试以了解其工作方式。现在我什至都不用对象填充,因为我不理解如何在不调用另一个队列的情况下开始队列。无论如何,现在我只是打电话给我,但我认为我仍然缺少一些东西。任何提示都很棒!谢谢。 RunnableObject类: 问题答案: 你应该循环

  • 我正在制作一个有游戏的网站。对于游戏,我需要发送数据。加载页面时一切正常,但我无法让握手生效。 socketReq变量存在是因为我不希望任何人直接从浏览器连接到localhost:25580。我的发送和接收功能在不同的线程中,它们将在握手后启动。 JS中新WebSocket(ws://localhost:25580)的结果是 到“ws://localhost:25580/”的WebSocket连接

  • 我想要一个完整的未来,只发出完成的信号(例如,我没有返回值)。 我可以将CompletableFuture实例化为: 但是我应该向完整的方法提供什么呢?例如,我不能做

  • 现在,我有三个函数:updateFieldFromCollection1()、