А вот фиг вам!
Далее немного критики и риторического "Why?!" в пустоту бытия.
Я решил сделать интеграцию с paypal для своего проекта. Суть интеграции следующая:
- заказчик оставляет заказ в системе
- исполнитель его выполняет
- после согласования
- заказчик оплачивает работу исполнителя и небольшой процент за услуги моему проекту.
В терминах paypal это можно реализовать различными средствами. Я выбрал "адаптивные платежи" (adaptive payments). Этот механизм позволяет одной единственной транзакцией перевести с одного счета сумму на два других.
Чтобы все это заработало необходимо:
- создать бизнес аккаунт. Я ж из Росиии, поэтому создаю российский бизнес аккаунт. Согласно нашим законам его нужно регистрировать и всячески подтверждать в paypal-россия. Для этого надо было прислать кучу сканов.
- создать запрос на приложение. В этом запросе необходимо было предоставить процедуру тестирования и тестовые аккаунты. Посколько у меня не было UAT то я все создал в prod с тестовыми идентификаторами приложений и аккаунтов. В paypal к слову достаточно запутанный интерфейс для разработчиков: есть classic application а есть REST. Причем есть paypal-песочница где можно создавать аккаунты с любым балансом, а есть реальный paypal. Легко запутаться где что нужно указывать. Потратил пару часов чтобы разобраться.
После аппрува приложения, выдается уже PROD идентификатор приложения. После чего applicationId + PROD credentials по идее позволят выполнять адаптивные платежи.
Ну решил я значит это проверить все.
Поскольку карты у меня только российские, то я создал два нормальных аккаунта и привязал к ним российские карты. Один аккаунт был заказчиком, а другой исполнителем.
Нажимаю кнопку "Pay" и получаю:
"The payment you initiated has been blocked because PayPal can only facilitate payments between Russian residents when they transact in Russian Ruble. Please go back to the merchant website and choose to pay in Russian Ruble, or alternatively choose another payment method."
Что же это значит? А это значит что когда происходит транзакция между российскими аккаунтами, то необходимо их проводить в рублях. Вряд ли paypal сам до этого додумался. Скорей всего у нас есть какой нить закон на это.
И вот тут начинается странное. Нельзя узнать к какой стране привязан аккаунт paypal. Нет такого API. По email адресу или IP - получиться не очень надежно. Я например пытался провести операцию из Испании. Единственный способ до которого я додумался - это сделать уже в моем проекте выбор страны. В зависимости от него показывать валюту.
Немного аналитики:
- угадывать какая же страна указана paypal-аккаунте - ненадежно и неблагородно.
- paypal вряд ли сделает метод API для получения страны по произвольному email. Слишком большая дыра в безопасности.
Я то решил обойти это ограничение довольно просто используя следующую формулу: "if testEmail then convert to rubles * USD rate (=42)". Но как живут добропорядочные соотечественники, которые хотят пейпалить?