没有收到adyen回调

Are*_*una 1 php payment payment-gateway adyen

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

首先,我收到来自adyen的通知回调,其中AUTHORIZATION为true且传输状态为1,但在此之后,我没有收到任何其他通知.即使付款流程为CAPTURED为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]');
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况的任何想法?

Are*_*una 6

解决方案不在我之前共享的代码示例中.它发生了这样的事情 - 按照惯例,我有一个表锁,考虑到Adyen发送并行通知和修改的事实,也许其中一些用于付款的其他帐户,如果表锁失败,我发送给他们一个[失败]回复,而不是[接受].

Adyen不接受[失败]回复.这样做会导致消息队列被阻止重试.文档中明确提到了这一点.

他们的系统不理解[失败],只接受[接受].对于这件事,因为我有一些较旧的付款不断回来作为Adyen的通知,我的系统没有找到它们并且锁定失败所以我一直向他们发送[失败]回复.Adyen把我放在禁区内,并标记我没有收到通知.

来自adyen文档:

接受通知

在收到通知后的10秒内,将响应"[accepted]"从服务器发送到Adyen服务器.我们建议您单独接受和回复通知,以便处理它们.

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

至少一次交付

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

重试

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

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

如果要触发重发尝试,可以向自己发送测试通知:

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