1

我正在尝试使用 iDEAL 实现 Adyen 作为我正在构建的 Web 应用程序中的一种付款方式。当用户选择 iDEAL 作为首选支付方式时,他将被重定向到 iDEAL 环境以完成支付过程,我提供了一个重定向 URL,用户在完成或取消支付后将被重定向到该 URL。使用以下参数调用回调方法:

string payload, 
string type, 
PaymentResultResponse.ResultCodeEnum resultCode

Adyen 文档指出我需要验证传入的有效负载,这是一个 HMAC 签名。

https://docs.adyen.com/payment-methods/ideal#integrate-with-api(第 4 步)

当购物者完成付款后,他们会使用您在发出 /payments 请求时提供的 returnUrl 返回您的网站或应用程序。此 URL 附加了一个有效负载查询参数,您将使用该参数来验证支付结果。如果附加了任何其他参数,请忽略它们。

我似乎无法找到用于构建此有效负载的数据,因此我不知道如何生成预期的签名来测试传入的有效负载。

4

2 回答 2

2

为了使这些步骤对未来的人们更加明确:

处理重定向

您将用户重定向到响应中返回的 adyen 端点/payments。购物者完成付款后,他们将被重定向回returnUrl原始/payments请求中指定的位置。

它们将被发送到带有 a payload、 aresultCode和 a 的URL type

  • payload是支付结果对象的加密 blob。您将发送另一个调用来解密此 blob,并查看该重定向时的付款结果。
  • resultCode是当时支付的结果。尽管此重定向没有任何验证,因此您不应使用此值执行任何业务逻辑,而应使用有效负载或结果通知。
  • type是不推荐使用的字段。不再使用可以忽略。

示例返回 url,payload 为示例目的缩写:

https://example-site.com/handleRedirect?payload=AAd24...f511%3D%3D&type=complete&resultCode=authorised

验证重定向

提交payload到以解密有效载荷 blob 并找到截至重定向时/payments/details的支付结果。该调用不会查询付款状态,但会告诉您负载中包含的响应。/payments/details

此步骤是必需的,因为重定向发生在客户端空间中,并且您始终需要考虑恶意第三方。用户可以操纵resultCode查询参数中的 ,但无法篡改有效负载对象而不会导致错误。

包括paymentData在初始/payments调用中返回的内容。

curl https://checkout-test.adyen.com/v49/payments/details \
-H "x-API-key: YOUR_X-API-KEY" \
-H "content-type: application/json" \
-d '{
  "paymentData": "Ab00!B...QABAgAuj", //abbreviated for example purposes.
  "details":{
    "payload":"AAd24...f511=="
  }
}'

响应将为您提供重定向时的付款结果:

{
  "resultCode":"AUTHORISED",
  "pspReference":"888239265347586D",
  ... //Other payment result data
}

有时 IDEAL 不会立即导致AUTHORIZED而是PENDING状态。这意味着付款结果尚不清楚,但您需要等待通知才能知道付款的最终结果。

于 2019-08-21T13:27:46.400 回答
1

刚刚收到来自 Adyen 支持的答复:

匿名(Adyen 支持)CEST 8 月 20 日 11:48
Hi Jop,

当购物者在 iDeal 付款后返回您的网站时,有效负载将附加到结果 URL。

然后,您需要验证您在 /payment/details 调用中收到的有效负载(第 6 步)。在响应中,您将收到交易的结果。此外,我们可以向您发送带有付款结果的异步通知(如果购物者在重定向发生之前已经关闭了浏览器)。

无需使用 HMAC 密钥验证有效负载。如果您有更多问题,请告诉我。

亲切的问候,

匿名的

技术支持工程师

于 2019-08-20T09:50:52.157 回答