Pull to refresh

Интеграция оплаты PayPal — Shipping Prepopulation

Reading time3 min
Views815
Сразу предупреждаю, что на самом деле топик не столько информационный, сколько вопрошающий.

имеем


  • Сайт продаёт некоторые продукты
  • Сайт написан на C#
  • Среди прочих сервисов оплаты используется PayPal
  • Все продажи ведутся на территории США


проблема


При покупке через PayPal администратор получает письмо о том, что адрес, по которому надо отправлять продукт, не валидирован. Так что оплата реально не проходит и требуется подтверждение «вручную».

задача


Разобраться и починить.


Сначала я попытался исследовать текущий механизм работы с PayPal. Выяснилось, что используется некий контрол который «втихую» создаёт форму, заполняет её информацией, введённой покупателем и сразу отправляет форму на PayPal. Собственно процесс покупки идёт уже на PayPal сайте.

Контрол этот никаких средств для передачи Shipping информации не имеет. Но что нам стоит дом построить? Заполним форму сами и сами же просабмитим.

И вот тут наступили грабли — как же эту информацию на PayPal отправить? Сразу скажу, что вариант получить информацию о кредитке на сайте и проводить оплату через API нами пока не рассматривается — хотелось бы возложить всю маету с проверкой валидности карт, секьюрностью транзакции и т.п. на PayPal.

Какие варианты предоставляет PayPal


Website Payment Standard

Всем вроде бы хорош — но у нас далеко не один продукт на сайте, потому заранее сгенерированная кнопка не подходит. Для передачи адреса клиента (биллинг адрес, привязанный к оплате) можно использовать address_override, для передачи сразу группы продуктов можно использовать item_name_"n" и amount_"n"

Создав эккаунт в сендбоксе начал тестировать, получилась пока вот такая форма

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_cart" />
<input type="hidden" name="upload" value="1" />
<input type="hidden" name="business" value="grinka_1266588332_biz@gmail.com" />
<input type="hidden" name="item_name_1" value="Item Name 1" />
<input type="hidden" name="amount_1" value="1.00" />
<input type="hidden" name="item_name_2" value="Item Name 2" />
<input type="hidden" name="amount_2" value="2.00" />
<input type="hidden" name="address_override" value="0" />
<input type="hidden" name="address1" value="1'st Street, 23-45" />
<input type="hidden" name="city" value="San Jose" />
<input type="hidden" name="email" value="nobody@email.com" />
<input type="hidden" name="first_name" value="Test" />
<input type="hidden" name="last_name" value="Uaser" />
<input type="hidden" name="zip" value="95131" />
<input type="hidden" name="state" value="CA" />
<input type="hidden" name="night_phone_a" value="408-983-5678" />
<input type="hidden" name="no_shipping" value="2" />

<input type="submit" value="PayPal" />
</form>


И тут я никак не могу придумать как «препопулировать» информацию об адресе доставки. На сайте его пользователь вводит, а передать к PayPal я его что-то никак не могу. Долгое курение мануалов PayPal только ещё сильнее запутывает ситуацию и окончательно приводит мой мозг в ступор.

По умолчанию в качестве адреса доставки система берёт тот же адрес, что и для оплаты. И покупатель затем может его изменить, но такой подход совсем не идеален, ибо мы заставляем покупателя вводить Shipping Address дважды.

Payflow Link

Мне уже почти стало казаться, что он мог бы «спасти отца русской демократии», но в сендбоксе создать эккаунт Payflow не удаётся — PayPal снова и снова выдаёт невнятную ошибку с предложением созвониться с саппортом.

Payment Pro

По описанию предлагает гораздо больше возможностей, но
  • оплата производится прямо на нашем сайте (вводится информация о кредитке), чего мы хотели бы избежать
  • ежемесячная плата в $30 — деньги небольшие, но лучше бы и их сохранить


Прошу помощи общественности — как можно разрешить эту проблему?
Tags:
Hubs:
Total votes 5: ↑3 and ↓2+1
Comments8

Articles