没有收到adyen回调

时间:2014-03-24 17:21:20

标签: php payment-gateway payment adyen

我正在尝试将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]');

有关为何发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:5)

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

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

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

来自adyen文档:

接受通知

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

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

至少一次投放

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

<强>试

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

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

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

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