Я всегда предполагал, что txn_id
, отправленный с сообщением IPN, уникален. Рекомендации PayPal, похоже, поддерживают эту идею - https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_admin_IPNIntroУникальный идентификатор PayNal IPN
Избегайте дублировать сообщения IPN. Убедитесь, что вы еще не обработали транзакцию, идентифицированную идентификатором транзакции, возвращенным в сообщении IPN. Возможно, вам придется хранить идентификаторы транзакций, возвращаемые сообщениями IPN в файле или базе данных, чтобы вы могли проверять наличие дубликатов. Если идентификатор транзакции, отправленный PayPal, является дубликатом, вы не должны обрабатывать его снова.
Однако я обнаружил, что PayPal eCheck payment IPN отправляется дважды с тем же идентификатором транзакции. Однажды во время первоначального платежа с payment_status
как «Ожидание» и снова через пару дней, когда eCheck фактически обрабатывает payment_status
как «Завершено».
Я хочу хранить обе транзакции, но все равно хочу избежать дублирования. В IPN есть другое поле, называемое ipn_track_id
, и оно отличается для обеих транзакций, но я не могу найти документацию для него, кроме этого неопределенного описания:
Внутренний; только для использования МТС и DTS
Кто-нибудь еще использует ipn_track_id
, чтобы однозначно идентифицировать сообщения IPN?
логически это одна транзакция, следовательно, идентичная txn_id. Добавление платежного_стата в (первичный) ключ решало бы это, не так ли? Док должен, вероятно, читать: txn_id для того же статуса не должен обрабатываться снова. – rene
Это имеет смысл, спасибо за предложение. – arnaslu
Стоит отметить, что вы должны обрабатывать транзакцию только там, где payment_status = «Завершено» в соответствии с правилами IPN PayPals. –