gpt4 book ai didi

php - 未收到 Adyen 回调

转载 作者:行者123 更新时间:2023-12-01 22:36:22 24 4
gpt4 key购买 nike

我正在尝试将 adyen api 实现到我的项目中,但我遇到了以下问题:

起初,我收到来自 adyen 的通知回调,AUTHORIZATION 为 true,交易状态为 1,但在此之后,我没有收到任何其他通知。即使支付过程 CAPTURED 为真,通知也不会到达。

我已经在 adyen 沙盒中测试了 adyen 通知,并且通知有效。这是回调文件的代码示例:

if (($eventCode=="AUTHORISATION") && ($success=="true"))
{

if($paymentRecharge['status']!=0) //Check if status is placed only
{
ReleaseTableLock($orderID);

print('[accepted]');
return;
}

if (($paymentRecharge['adyen_amount']!=$value) || ($paymentRecharge['currency']!=$currency)) //Check to see if the paid value is the same as our value, otherwise this is Fraud
{
SetPaymentStatus($orderID,5);
ReleaseTableLock($orderID);
print('[accepted]');
return;
}

MarkAsAuthorised($orderID); //changes status to 1 - authorised

//check if we need to Capture automatically
if($adyenParams['adyen_capture']==1)
{
$adyen = new AdyenGateway();
$data = array();
$data["params"] = $adyenParams;

$data["userId"] = $paymentRecharge['customerId'];
$response;
$result=$adyen->Capture($data,$pspReference,$response,$paymentRecharge['userId'],$paymentRecharge['adyen_amount'],$paymentRecharge['currency']);
}
}

if (($eventCode=="AUTHORISATION") && ($success=="false"))
{
SetPaymentStatus($orderID,6);
ReleaseTableLock($orderID);
print('[accepted]');
return;
}

if (($eventCode=="CAPTURE") && ($success=="true"))
{
SetPaymentStatus($orderID,2);
ProcessPayment($orderID);
}



//Release the payment order lock
ReleaseTableLock($orderID);
print('[accepted]');

对于为什么会发生这种情况有什么想法吗?

最佳答案

解决方案不在我之前分享的代码示例中。事情是这样发生的——和往常一样,我有一个表锁,考虑到 Adyen 发送并行通知和修改,也许其中一些是针对其他支付的账户,如果表锁失败,我会向他们发送一个[失败] 响应,而不是 [接受]。

Adyen 不接受 [failed] 回复。这样做会导致消息队列因重试而被阻塞。 documentation中明确提到了这一点.

他们的系统不理解[失败],只理解[接受]。对于这件事,因为我有一些旧的付款不断作为 Adyen 的通知返回,我的系统没有找到它们并且锁定失败所以我一直向他们发送 [失败] 响应。 Adyen 将我置于受罚区,并将我标记为未收到通知。

来自 adyen 文档:

接受通知

在收到通知后的 10 秒内将响应“[accepted]”从您的服务器发送到 Adyen 服务器。 我们建议您将接受和回复通知与处理通知分开。

我们的服务器收到此响应后,通知中的所有项目都标记为已收到。

至少一次交付

如果通知传递失败,或者无法从响应中确定消息是否成功传递,则会多次发送通知。这种至少发送一次的规则意味着您可能会多次收到相同的通知。

重试

只要未明确收到成功的响应,就会定期多次发送通知,增加时间间隔:

2 分钟5分钟10分钟15分钟30分钟1小时2小时4个小时8小时第三次尝试失败后,即 2 + 5 + 10 = 17 分钟后,系统消息将显示在 Adyen 客户区 (CA)。然后,系统会在接下来的 7 天内继续每 8 小时重试一次。

如果你想触发重发尝试,你可以给自己发送一个测试通知:

在客户专区,转到设置 > 服务器通信。如果操作成功,将重新发送所有排队的通知。否则,您将大致了解我们的系统在此之前记录的当前错误。

关于php - 未收到 Adyen 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22616293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com