обратный вызов 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]');

Любые идеи, почему это происходит?


person Ares Draguna    schedule 24.03.2014    source источник
comment
опубликуйте свое решение в качестве ответа, а затем примите его. Это может просто помочь другим людям.   -  person sevenseacat    schedule 26.03.2014


Ответы (1)


Решение не в образце кода, которым я поделился ранее. Произошло это так - Как обычно, у меня блокировка стола, учитывая тот факт, что Adyen присылает параллельные уведомления и модификации и, возможно, некоторые из них для других аккаунтов, которые сделали платеж, и если блокировка стола не удалась, я отправлял им [неудачный] ответ вместо [принятого].

Adyen не принимает [неудачные] ответы. Это приводит к тому, что очередь сообщений блокируется для повторных попыток. Это четко указано в документации.

Их система не понимает [не удалось], только [принято]. И в этом отношении, поскольку у меня были некоторые старые платежи, которые продолжали возвращаться в виде уведомлений от Adyen, моя система не нашла их, и блокировка не удалась, поэтому я продолжал отправлять им ответ [failed]. А Адьен поместил меня в штрафную и отметил, что я НЕ получаю уведомления.

Из документации адиена:

Принимать уведомления

Отправьте ответ «[принято]» с вашего сервера на сервер Adyen в течение 10 секунд после получения уведомления. Мы рекомендуем вам принимать уведомления и отвечать на них отдельно от их обработки.

После того, как наш сервер получит этот ответ, все элементы в уведомлении помечаются как полученные.

Доставка хотя бы один раз

В случае сбоя доставки уведомления или в случае невозможности определить по ответу, было ли сообщение доставлено успешно или нет, уведомления отправляются несколько раз. Это правило доставки хотя бы один раз означает, что вы можете получать одно и то же уведомление несколько раз.

Повторные попытки

Всякий раз, когда успешный ответ не получен явным образом, уведомления отправляются несколько раз через регулярные увеличивающиеся интервалы времени:

2 минуты 5 минут 10 минут 15 минут 30 минут 1 час 2 часа 4 часа 8 часов Системное сообщение отображается в Личном кабинете Adyen (CA) после третьей неудачной попытки, т.е. через 2 + 5 + 10 = 17 минут. Затем система продолжает повторять попытки каждые 8 ​​часов в течение следующих семи дней.

Если вы хотите инициировать попытку повторной отправки, вы можете отправить тестовое уведомление самому себе:

В Личном кабинете перейдите в «Настройки» > «Связь с сервером». Если операция выполнена успешно, все уведомления в очереди отправляются повторно. В противном случае вы получите обзор текущих ошибок, которые наша система зафиксировала до этого момента.

person Ares Draguna    schedule 01.04.2014