首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >adyen回调未收到

adyen回调未收到
EN

Stack Overflow用户
提问于 2014-03-24 17:21:20
回答 1查看 3.6K关注 0票数 2

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

一开始,我收到一个来自adyen的通知回调,授权为true,并且传输状态为1,但在此之后,我没有收到任何其他通知。即使支付过程被捕获为true,通知也不会到达。

我已经在adyen沙箱中测试了adyen通知,并且通知可以工作。下面是回调文件的代码示例:

代码语言:javascript
复制
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]');

知道为什么会发生这种事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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。如果操作成功,则所有排队通知都将被重置。否则,您将得到系统记录的当前错误的概述。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22616293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档