Смешивание PayPal IPN и PDT - PullRequest
       3

Смешивание PayPal IPN и PDT

2 голосов
/ 20 сентября 2011

Я внедрил PayPal на моем сайте. Когда пользователь выбирает услугу для оплаты, он перенаправляется на оплату, где он совершает платеж, и в конце концов он перенаправляется обратно на мой сайт.
Здесь я смешиваю IPN и PDT. После оплаты я получаю сообщение IPN и сохраняю все переменные в базе данных.
Когда пользователь возвращается на сайт, я получаю его TXN_ID и UserID (из сеанса) и сохраняю его в базе данных.
Я где-то читал, что плохо смешивать pdt и ipn. Есть ли лучший способ сохранить переменные IPN с UserID? Могу ли я как-то отправить UserId для оплаты, приятель и получить его с сообщением IPN позже, когда пользователь завершит платеж?

Извините, я должен снова открыть вопрос. Я добавил поле «Счет-фактура», чтобы отправить идентификатор пользователя для оплаты приятель. Но когда я пытаюсь оплатить в следующий раз с тем же идентификатором пользователя, меня перенаправляют на страницу оплаты, и я получаю это сообщение об ошибке:

Этот счет уже оплачен. Для получения дополнительной информации, пожалуйста, свяжитесь с продавцом.

Это говорит о том, что счет-фактура не является хорошим вариантом для отправки идентификатора пользователя для оплаты приятель.

Я попытался ввести идентификатор пользователя в поле "custom".

<input name="custom" type="hidden" id="custom" value="<%= UserInfo.UserID%>">

Но все, что я получаю в сообщении IPN:

пользовательские =% 3C% 25% 3D + UserInfo.UserID% 25% 3E

1 Ответ

3 голосов
/ 20 сентября 2011

Я делаю это, используя поле счета. Это поле, которое вы можете отправить PayPal, и они отправят его обратно в ответе. Так я идентифицирую транзакции, возвращаемые из PayPal.

И в моем случае я не обрабатываю сообщения как PDT, так и IPN. Я обрабатываю только тот, который ударил меня первым. Когда приходит второе сообщение (PDT или IPN), я проверяю, что уже обработал эту транзакцию, и просто отбрасываю ее.

Кроме того, не забывайте, что вам необходимо убедиться, что сообщения поступили от PayPal. После получения сообщения PDT или IPN вам необходимо отправить обратно в PayPal с вашим уникальным Auth_id и токеном, который они отправили в исходном сообщении. Вы не должны полагаться ни на одно поле из исходного сообщения.

Как только PayPal получит ваш запрос на подтверждение, он отправит вам второе сообщение с деталями транзакции. Это тот, на кого вы должны положиться.

Я не вижу никаких преимуществ при обработке сообщений PDT и IPN для одной и той же транзакции. Сказав, что я призываю вас выполнить оба, потому что ни один из них не гарантированно достигнет вас.

Изменить, чтобы включить способ передачи счета в PayPal

Чтобы передать счет в PayPal, просто создайте поле, например:

<input type="hidden" name="invoice" value=$uniquevaluecreatedbyyourapplication>

Уникальный идентификатор может быть вашим идентификатором пользователя.

Пост в PayPal будет выглядеть примерно так:

paypal/or/sandbox/address?all the other fields&invoice=123456

Paypal отправит счет-фактуру обратно в сообщениях PDT и IPN.

Редактировать - неуникальный номер счета-фактуры

Я провел дальнейшие исследования, и вы можете настроить PayPal для приема нескольких транзакций для одного и того же идентификатора счета или для принятия только одной транзакции на один идентификатор счета. Ниже смотрите информацию прямо с сайта PayPal:

Блокировка случайных платежей

Вы можете выбрать, принимать ли платежи с тем же ID счета или заблокировать платежи, когда идентификатор счета уже использовался.

Когда вы получаете платежи от покупателей, вы можете включить дополнительный Поле идентификатора счета для отслеживания платежей; покупатели не увидят этот идентификатор. Идентификатор счета покупателя должен быть уникальным для каждой транзакции. Если PayPal получает платеж с идентификатором счета, который был использован для другого PayPal не примет транзакцию.

Чтобы настроить параметры блокировки этого типа платежа:

Войдите в свою учетную запись PayPal по https://www.paypal.com.

Откроется страница «Обзор моей учетной записи».

Щелкните по вкладке профиля.

Откроется страница «Сводка профиля».

В столбце «Настройки продажи» щелкните «Получение платежа». Настройки ссылки.

Откроется страница «Настройки приема платежей».

Прокрутите страницу вниз до раздела Блокировать случайные платежи, как показано ниже.

Выберите один из следующих параметров:

  • Да, заблокировать несколько платежей для одного идентификатора счета - больше не принимать чем один платеж за счет. Эта опция предотвращает повторные платежи что вы должны вернуть.

  • Нет, разрешить несколько платежей для одного идентификатора счета - не ограничивайте количество платежей, полученных по счету. Выбор этой опции может привести к при повторных платежах, требующих возврата.

Прокрутите страницу вниз и нажмите кнопку Сохранить.

Другой вариант - создать идентификатор счета-фактуры с идентификатором пользователя + случайное число. Это сделало бы его уникальным.

См. Ниже пример кода для получения уникальных номеров счетов.

var r = Math.floor(Math.random()*100000);
var invoice = userid + "-" + r;

Вы также можете использовать дату и время вместо случайного числа.

var d = new Date();
var invoice = userid + "-" + d;

А в ответе от PayPal вы просто отбрасываете то, что следует после тире.

Надеюсь, это поможет.

...