我正在尝试在我的项目中实现adyen api,我遇到了以下问题:
一开始,我收到一个来自adyen的通知回调,授权为true,并且传输状态为1,但在此之后,我没有收到任何其他通知。即使支付过程被捕获为true,通知也不会到达。
我已经在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]');知道为什么会发生这种事吗?
发布于 2014-04-01 10:01:43
解决方案不在我之前共享的代码示例中。事情是这样发生的--和往常一样,我有一个表锁,因为Adyen发送并行通知和修改,其中一些可能是为其他帐户支付的,如果表锁失败,我就发送给他们失败的响应,而不是接受。
Adyen不接受失败的答复。这样做会导致消息队列被阻塞以进行重试。在文档中清楚地提到了这一点。
他们的制度不懂失败,只接受。在这件事上,由于我收到了一些较旧的付款,一直作为Adyen的通知回来,我的系统找不到它们,锁也坏了,所以我一直给他们发个失败的回复。Adyen把我放进了罚单里,并把我标记为没有收到通知。
来自adyen文档:
接受通知
在收到通知后10秒内将响应“接受”从服务器发送到Adyen服务器。我们建议您分别接受和回复通知和处理.。
在我们的服务器收到此响应后,通知中的所有项都被标记为已接收。
至少一次交货
如果通知传递失败,或者在无法从响应中确定消息是否成功传递时,通知将多次发送。这个至少一次的传递规则意味着您可能多次收到相同的通知.
重试
每当未显式地接收到成功响应时,就会定期发送多次通知,以增加时间间隔:
2分钟5分钟10分钟15分30分30分钟1小时2小时4小时8小时在第三次尝试失败后,即2+5+ 10 = 17分钟后系统信息显示在Adyen客户区(CA)。然后,在接下来的七天内,该系统继续每8小时重新测试一次。
如果要触发重发尝试,可以向自己发送测试通知:
在Customer区域,转到Settings > Server Communications。如果操作成功,则所有排队通知都将被重置。否则,您将得到系统记录的当前错误的概述。
https://stackoverflow.com/questions/22616293
复制相似问题