Обратный вызов IPN адаптивных платежей Paypal: как вернуть полное неизмененное сообщение ipn

Я работаю на рынке (покупатели и продавцы), и посредник получает долю с каждой покупки. Я хочу, чтобы покупатель мог купить товар сразу после того, как кнопка покупки будет перенаправлена ​​​​в Paypal. Это хорошо и работает.

response = ADAPTIVE_GATEWAY.setup_purchase(
  :return_url => 'return_url',
  :cancel_url => 'cancel_url',
  :ipn_notification_url => 'ipn_notification_url',
  :receiver_list => recipients,
)
# ADAPTIVE_GATEWAY.set_payment_options(...)
redirect_to (ADAPTIVE_GATEWAY.redirect_url_for(response['payKey']))

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

def notify_cb
  notify = ActiveMerchant::Billing::Integrations::PaypalAdaptivePayment::Notification.new(request.raw_post)

  if notify.acknowledge
    update_attributes({
      :transaction_id => notify.transaction_id,
      :status => notify.status
    })
  end

  render :nothing => true # render nothing?!? RENDER_LINE
end

Большинство примеров здесь на SO ничего не отображают (RENDER_LINE), в то время как в документации PayPal процесс описан как ( https://www.x.com/developers/paypal/documentation-tools/ipn/integration-guide/IPNintro#protocol_and_arch):

Протокол IPN состоит из трех шагов:

  1. PayPal отправляет вашему прослушивателю IPN сообщение, уведомляющее вас о событии.

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

  3. PayPal отправляет обратно одно слово, которое либо ПРОВЕРЕНО, если сообщение исходит от PayPal, либо НЕДЕЙСТВИТЕЛЬНО, если есть какое-либо несоответствие тому, что было отправлено изначально.

Мой вопрос будет заключаться в том, как вернуть полное неизмененное сообщение обратно в PayPal, или я упускаю / ошибаюсь в своем понимании потока?


person Georgi Mitev    schedule 29.04.2013    source источник


Ответы (1)


Вы отправляете сообщения на https://sandbox.paypal.com/ или https://www.sandbox.paypal.com/cgi-bin/webscr (включая «cmd=_notify- проверить как часть ваших данных POST или включить через GET)?

Первый возвращает HTTP 301, потому что вы в основном указываете непосредственно на домашнюю страницу, тогда как последний указывает непосредственно на страницу, на которой размещена логика проверки IPN.

person Robert    schedule 01.05.2013
comment
Спасибо Роберту за изучение документации SO и Paypal, несколько ошибок, на которые следует указать и которые в конечном итоге привели к решению: 1. Правильный URL-адрес для публикации в моем случае был sandbox.paypal.com/cgi-bin/webscr 2. Добавление cmd=_notify-validate в конец помогло мне получить INVALID/VERIFIED 3. Согласно на activemerchant.rubyforge.org/classes/ActiveMerchant/Billing / notify.acknowledge фактически выполняет отправку в PayPal - person Georgi Mitev; 03.05.2013