Ответ PayPal API NVP на отсутствие идентификатора подписки GetTransactionDetails

За последние несколько лет я написал несколько аудиторских отчетов для своих SaaS-приложений. Большая часть логики использует API PayPal для получения полного списка транзакций (с помощью TransactionSearch), а затем для каждой транзакции для получения сведений (с помощью GetTransactionDetails).

Намерение состоит в том, чтобы выровнять записи моей базы данных о регулярных платежах, полученных с последними данными PayPal, чтобы убедиться, что я не пропустил IPN или что-то еще.

Это работало нормально до месяца назад.

В последнее время идентификатор подписки отсутствует в большинстве транзакций.

Раньше идентификатор подписки содержался в поле NVP «SUBSCRIPTIONID». Этого больше нет для всех транзакций, и я не вижу других возвращенных полей, содержащих идентификатор подписки. Все остальные поля, кажется, там, поэтому я знаю, что мои звонки работают. Просто в ответе NVP отсутствует идентификатор подписки. Я также проверил, что идентификатор подписки включен в IPN, отправляемый для тех же транзакций.

Мой код использует более старую версию API (108.0). Теоретически PayPal никогда не изменит принцип работы API, поэтому я озадачен тем, почему результаты уже не те, что были с той же кодовой базой месяц назад.

Я попробовал последнюю версию API (124.0), и она предоставляет идентификаторы подписки для большего количества транзакций, чем 108, но не для всех.

Я тут совсем запутался. У кого-нибудь есть подсказки?

Я не хочу спрашивать поддержку PayPal, потому что потребуется 3 недели, чтобы вообще не получить помощь :-)


person Andreas Huttenrauch    schedule 23.03.2016    source источник
comment
Я отправил этот вопрос в службу поддержки PayPal, постараюсь не забыть опубликовать ответ здесь, если получу ответ.   -  person Bemmu    schedule 28.03.2016
comment
Вот один обходной путь, который я исследую. Если у вас есть список профилей в вашей собственной базе данных, вы можете выполнить TransactionSearch для каждого и передать аргумент PROFILEID в поиске. Затем это даст вам список всех платежей для этого PROFILEID, что позволит вам сопоставить их с идентификаторами транзакций.   -  person Bemmu    schedule 29.03.2016
comment
Я зарегистрировал это в службе поддержки PayPal одновременно с вопросом здесь. Как и ожидалось, однозначного ответа нет, но я вижу, что моя заявка находится в статусе Pending Fix, что обнадеживает.   -  person Andreas Huttenrauch    schedule 29.03.2016


Ответы (3)


Была такая же проблема в течение месяца, а просто перестал работать случайным образом, собирался попробовать последнюю версию, но если вы говорите, что это то же самое, подумайте, что лучший способ действий - отправить отчет об ошибке в PayPal.

Единственная действительная работа, которую я нашел, - это сохранить созданный вызов API, который вернет адрес электронной почты и идентификатор подписки.

Затем используйте информацию из получения идентификатора транзакции (электронная почта) для поиска идентификатора подписки в исходной базе данных (созданной). Грязно, но пока работает, пока не исправят эту проблему.

СЛЕДОВАТЬ ЗА

Я использую этот метод, чтобы просто продолжать вызывать API до тех пор, пока не будет создан идентификатор подписки, поскольку мы знаем, что он работает каждые 1 из 5 попыток.

try {
    /* Original call */
    $transDetailsResponse = $paypalService->GetTransactionDetails($request);
} catch (Exception $ex) {
    include_once("../Error.php");
    exit;
}
// If its not got sub id we start a while loop
    if ($transDetailsResponse->PaymentTransactionDetails->PaymentItemInfo->Subscription->SubscriptionID == "")
        {
    // Run while loop until its found
        while ($transDetailsResponse->PaymentTransactionDetails->PaymentItemInfo->Subscription->SubscriptionID=="")
            {

            try {

            $transDetailsResponse = $paypalService->GetTransactionDetails($request);
            } catch (Exception $ex) {
            include_once("../Error.php");
            exit;
            }   

        }
person Clive Atkins    schedule 28.03.2016
comment
Что делать, если у одного электронного письма несколько подписок? Когда вы получите платеж, как вы узнаете, за какую подписку вы платите? - person Bemmu; 28.03.2016
comment
Вам нужно будет использовать метку времени, чтобы сопоставить пару. Я получил менее беспорядочный способ, которым я добавил код выше. - person Clive Atkins; 29.03.2016
comment
Это должен быть один из самых безумных обходных путей :D - person Bemmu; 29.03.2016
comment
Похоже, что он полностью перестал возвращать эти идентификаторы, теперь обходной путь, описанный выше, выглядит бесполезным, если только вы не хотите попасть в бесконечный цикл. - person Clive Atkins; 09.04.2016
comment
Я не понимаю, как нет больше возмущения по этому поводу. Разве к этому моменту не должна быть разрушена масса компаний, работающих по подписке? - person Bemmu; 10.04.2016
comment
Вот что я делаю. Когда кто-то создает подписку, сначала я получаю мгновенное уведомление об оплате subscr_signup, в котором указывается идентификатор подписки. Затем я периодически выполняю TransactionSearch с параметром поиска PROFILEID, установленным для этого идентификатора, поэтому я буду знать, что эти транзакции связаны с этой подпиской. - person Bemmu; 10.04.2016
comment
Я думаю, причина такого отсутствия возмущения в том, что мы привыкли к дерьму от PayPal. Обращение к их службе поддержки только усиливает разочарование. Я бы хотел вообще отказаться от них, но около 5% моих клиентов имеют проблемы с использованием своих кредитных карт с нашей учетной записью Stripe, и поэтому выбирают PayPal. Когда стоимость управления PayPal превысит доход, я брошу их в одно мгновение. Я ЛЮБЛЮ Полоса. - person Andreas Huttenrauch; 23.04.2016
comment
кажется, теперь исправлено - person Clive Atkins; 12.05.2016
comment
Сегодня столкнулся с другим вызовом GetTransactionDetails, который не вернул поле SUBSCRIPTIONID, несмотря на то, что он обнаружил доступ к сайту PayPal вручную (идентификатор повторяющегося платежа отображается в деталях транзакции для транзакции на paypal.com). - person Bemmu; 08.08.2017

Боюсь, у меня нет ответа, но я не вижу возможности участвовать в этом обсуждении, так как у меня недостаточно репутации, чтобы комментировать.

У меня такая же проблема уже пару недель. (На самом деле, я могу сказать, что проблемы впервые начались с изменением 2016-03-07). https://stackoverflow.com/questions/36647177/paypal-api-has-stopped-sending-profile-ids-any-way-to-match-payments-up-to-as

Сегодня я заметил, что мы снова начали получать SUBSCRIPTIONID. Однако TRANSACTIONTYPE изменился на «recurring_payment» вместо «subscrpayment».

Мы также обнаружили, что мы получаем сведения о транзакциях от других продавцов, полностью смешанные с нашими сведениями о транзакциях — строки НАЗВАНИЕ продукта, которые абсолютно не имеют ничего общего с нашим бизнесом. Полностью сломан и потенциально проблема безопасности.

Я открыл несколько заявок на paypal-techsupport.com, чтобы описать эти проблемы, но я еще не получил от них ответа.

person Tristan    schedule 21.04.2016

Служба поддержки PayPal, наконец, ответила следующим образом:

Команды разработчиков сообщают, что эта проблема должна быть решена. Сообщите нам, если вы по-прежнему сталкиваетесь с этой проблемой.

person Andreas Huttenrauch    schedule 23.05.2016