Я успешно настроил Payum для своего приложения Symfony, я создал подписку с регулярным платежом каждый день.
В моем приложении я никогда не получал ни одного запроса от PayPal по URL-адресу payum_notify_do
, который хорошо указан в моем объекте сведений о соглашении о выплатах.
В учетной записи валидатора песочницы PayPal я вижу, что с момента подписки я получал платеж каждый день.
Почему я никогда не получаю уведомления о выплатах? Приложение Symfony и Payum ошибочно полагают, что пользователь никогда не платил.
Какая конфигурация действительно требуется Payum для получения уведомлений от Paypal?
Мой рабочий процесс:
- Предоставьте сведения о подписке с формой для отправки
- When form is submitted:
- create an Agreement Detail entity with the subscription information
- создать из него токен захвата
- перенаправление на URL-адрес токена (PayPal)
- Вернувшись из PayPal, я проверяю, что соглашение зафиксировано
- Я создаю объект "Подробности повторяющегося платежа"
- Я перенаправляю на страницу подробных сведений о подписке (на которой отображается сообщение с благодарностью и сведения о подписке)
Сущность сведений о соглашении, созданная на шаге 2.1, содержит следующие данные JSON:
{
"L_BILLINGAGREEMENTDESCRIPTION0": "blah blah blah",
"PAYMENTREQUEST_0_AMT": "0.00",
"L_BILLINGTYPE0": "RecurringPayments",
"NOSHIPPING": 1,
"PAYMENTREQUEST_0_PAYMENTACTION": "Sale",
"AUTHORIZE_TOKEN_USERACTION": "commit",
"RETURNURL": "https://hostname.tld/payum/capture/AAAAA-BBBBB",
"CANCELURL": "https://hostname.tld/payum/capture/AAAAA-BBBBB?cancelled=1",
"PAYMENTREQUEST_0_NOTIFYURL": "https://hostname.tld/payum/notifier/AAAAAA-BBBBB",
"TOKEN": "EC-NNNNNN",
"TIMESTAMP": "2017-11-20T13:48:58Z",
"CORRELATIONID": "ZZZZZZ",
"ACK": "Success",
"VERSION": "65.1",
"BUILD": "40680762",
"BILLINGAGREEMENTACCEPTEDSTATUS": "1",
"CHECKOUTSTATUS": "PaymentActionNotInitiated",
"CURRENCYCODE": "USD",
"AMT": "0.00",
"SHIPPINGAMT": "0.00",
"HANDLINGAMT": "0.00",
"TAXAMT": "0.00",
"NOTIFYURL": "https://hostname.tld/payum/notifier/XXX-ZZZ",
"INSURANCEAMT": "0.00",
"SHIPDISCAMT": "0.00",
"PAYMENTREQUEST_0_CURRENCYCODE": "USD",
"PAYMENTREQUEST_0_SHIPPINGAMT": "0.00",
"PAYMENTREQUEST_0_HANDLINGAMT": "0.00",
"PAYMENTREQUEST_0_TAXAMT": "0.00",
"PAYMENTREQUEST_0_INSURANCEAMT": "0.00",
"PAYMENTREQUEST_0_SHIPDISCAMT": "0.00",
"PAYMENTREQUEST_0_INSURANCEOPTIONOFFERED": "false",
"PAYMENTREQUESTINFO_0_ERRORCODE": "0",
"EMAIL": "[email protected]",
"PAYERID": "XXX",
"PAYERSTATUS": "verified",
"FIRSTNAME": "test",
"LASTNAME": "buyer",
"COUNTRYCODE": "FR"
}
Журналы сервера показывают, что URL захвата был хорошо запрошен с помощью реферера с sandbox.paypal.com, так что все прошло хорошо.
У меня не было случаев, когда PayPal вызывал URL-адрес уведомления, несмотря на то, что я ждал несколько недель и подтвердил, что на стороне PayPal деньги были собраны (у меня есть примерно 400 евро, собранные из 7 евро в день).
Я подтвердил, что URL-адрес уведомления работает, если я открываю его в браузере.
Количество деталей соглашения действительно равно нулю, но я считаю, что это то, что ожидается от подписки: ноль при оплате, затем еще одно соглашение с фактической подпиской.
Вот фактическая информация о регулярных платежах, созданная на шаге 4 выше:
{
"TOKEN": "EC-NNNNNN",
"DESC": "blah blah blah",
"EMAIL": "[email protected]",
"AMT": "6.99",
"CURRENCYCODE": "EUR",
"BILLINGFREQUENCY": "1",
"BILLINGPERIOD": "Day",
"PROFILESTARTDATE": "2017-11-19T23:00:00Z",
"PROFILEID": "I-XXXXX",
"PROFILESTATUS": "ActiveProfile",
"TIMESTAMP": "2017-11-20T13:49:08Z",
"CORRELATIONID": "abcdef0123456789",
"ACK": "Success",
"VERSION": "65.1",
"BUILD": "39206242",
"STATUS": "Active",
"AUTOBILLOUTAMT": "NoAutoBill",
"MAXFAILEDPAYMENTS": "0",
"SUBSCRIBERNAME": "test buyer",
"NEXTBILLINGDATE": "2017-11-20T10:00:00Z",
"NUMCYCLESCOMPLETED": "0",
"NUMCYCLESREMAINING": "0",
"OUTSTANDINGBALANCE": "0.00",
"FAILEDPAYMENTCOUNT": "0",
"TRIALAMTPAID": "0.00",
"REGULARAMTPAID": "0.00",
"AGGREGATEAMT": "0.00",
"AGGREGATEOPTIONALAMT": "0.00",
"FINALPAYMENTDUEDATE": "1970-01-01T00:00:00Z",
"TOTALBILLINGCYCLES": "0",
"SHIPPINGAMT": "0.00",
"TAXAMT": "0.00",
"REGULARBILLINGPERIOD": "Day",
"REGULARBILLINGFREQUENCY": "1",
"REGULARTOTALBILLINGCYCLES": "0",
"REGULARCURRENCYCODE": "EUR",
"REGULARAMT": "6.99",
"REGULARSHIPPINGAMT": "0.00",
"REGULARTAXAMT": "0.00"
}
Так что все выглядит номинально, но у меня нет информации об уведомлении об оплате от PayPal.
После прочтения всего этого и документы Я заметил, что после регулярного платежа я перенаправлялся прямо на страницу подписки, а не через токен. Поэтому я заменил это:
return $this->redirect($this->generateUrl('subscription_show', [
'gatewayName' => $token->getGatewayName(),
'billingAgreementId' => $agreement->getId(),
'recurringPaymentId' => $payment->getId(),
]));
с участием:
$doneToken = $payum->getTokenFactory()
->createToken('paypal', $payment, 'subscription_show', [
'gatewayName' => $token->getGatewayName(),
'billingAgreementId' => $agreement->getId(),
'recurringPaymentId' => $payment->getId(),
]);
return $this->redirect($doneToken->getTargetUrl());
Посмотрим через несколько дней, сработает ли это.
Спустя 48 часов уведомлений по-прежнему нет, несмотря на ежедневные регулярные платежи на панели мониторинга активности PayPal.
Я мог видеть в журналах, что я дважды заходил в PayPal (на основе рефереров), поэтому один раз после реквизитов платежа и один раз после повторяющегося платежа (который привел непосредственно к моему сайту без какого-либо пользовательского интерфейса в PayPal, в отличие от первого, который явно попросил подтверждения).
Я не знаю, что делаю не так.