Поставили передо мной на работе задачу, организовать прием платежей в пользу Paypal.
Дали данные акаунта: логин пароль и какой то текстовый файл с подписанным хэшем внутри. Сказали хелп тут, тоже же что и https://www.paypal.com/и пройти по вкладке developers.
К сожалению, ушло 2 дня на решение каких то тривиальных вопросов.
Меня сбивало с толку что я был ограничен в информации, было мало начальных данных. Не привычно поднимать систему, без тех специалиста на др конце. Например, даже аккаунт, не понятно от боевой или тестовой системы. Не знаю, почему, но я его сразу (ошибочно) приписал к тестовой среде и долго на этом стоял. Не говорю уже о сертификате, который пришел в виде тхт.
Я уже, когда писал код, составлял черновик статьи, думая что кому нить помогу, т.к. сроки как всегда были вчера и как всегда на чем нить возникал ступор. Как дописал программу, отложил черновик в долгий ящик, пока один коллега, не обратился ко мне за помощью, с теми же вопросами, которые возникали и у меня. Ну и я решил выложить статью, а заодно и получить долгожданный инвайт.
Начнем с данных аккаунта.
Текстовый файл, который мне дали, оказался сертификат.
Но что бы его использовать, надо применить определенное шаманство.
Если коротко то надо:
1. Файл сертификата в формате xtx, скопировать, переименовать в расширение rem.
2. Скачать утилиту Win32 OpenSSL v0.9.8l Light и если не стоит 8 студия то Visual C++ 2008 Redistributables, и зашифровать сертификат.
3. Скачать WinHttpCertCfg.exe и установить сертификат из п3.
Подробнее об этот тут.
Проще использовать сигнатуру вместо сертификата. Сертификат устанавливается на комп и могут возникнуть трудности с переносом приложения и больше возни при разработке.
У Paypal существует тестовый сервер, аналогичный боевому, и лучше на нем сразу зарегаться, даже если вам дали (боевые)учетные данные, чтобы самому можно было настраивать учетные данные, и можно следить за движением денег в кабинете, поработать в тестовой среде накоенец). Там все просто, вводите мыло, ждете подтверждения на мыло, проходите по ссылке активируете аккаунт и у вас появляется возможность создавать тестовые данные учетной записи для авторизации (API Credentials ) а так же тестовые счета(мыла) для оплаты. Внимание по умолчанию Payment Review, счета Disabled, надо по нему кликнуть, что бы включить.
Что делать дальше…
Дальше надо сразу скачать установить SDK, и пример его использования, на первый взгляд все тут мягко и пушисто. Но у меня были ошибки и для их решения пришлось поднимать демо сервис PayPal у себя (который идет с sdk), что бы отследить схему работы, я час попробую все расписать, что бы вы так не заморачивались.
И так ставим SDK, подключаем
С примером идет только 1 библиотека paypal_base.dll,
а еще нунжно log4net.dll
брать тут
Её еще надо прописать ее в свой конфиг, как в конфиге проекта SDK, первые 2 абзаца сверху
Обзор по ошибкам
В подробном описании ошибок, видно что у одного кода ошибки, могут быть разные причины.
PayPal API SOAP error code 10002. You do not have permissions to make this API call.
Вот с этим долго пришлось биться, ErrorCode10002, тут еще сказалось, что саппорт paypala отвечая на вопрос, видимо сам не зная ответа, отмазывается нагоняя на сертификат ну и я ушел в эту степь устанавливал его туды-сюды, сносил, создавал, устанавливал сертификат, и даже мой локальный веб сервис выдавал мне такую же ошибку когда я на него стучался через браузер. Ответ я нашел только когда вопрос уже был решен, если прочитать статью до конца видно что ошибка в разных методах создания профайлера:
В итоге мне прислали сигнатуру и наткнулся на другую багу: Ошибика авторизации 10002
Где то в хелпе нашел ее возможные причины.
That error message indicates that your API credentials aren't being accepted by PayPal.
Common causes:
1. You have your PayPal module configured to «Sandbox» but have not used Sandbox API credentials.
2. You have your PayPal module configured to «Live» but have not used Live API credentials.
3. You have mis-typed one or more API credentials entries, including but not limited to leaving trailing spaces.
4. You have deleted and/or recreated new API credentials in your PayPal account but have not copied those new credentials back to your store.
Моя проблема была в том, что я подключался на тестовый сервер, думая что мне дали тестовую учетку, а это оказалось не так, зарегайся я в тестовой среде как описано выше, проблемы бы не было.
Еще всем рекомендую использовать программу Fiddler2, что бы снифить ответы запросы и еще по ней видно куда ты подключаешься.
Я потом рылся в форумах, с аналогичной проблемой, и увидел что у кого то подобный запрос работает на боевой базе и он продолжает разработку и мой первый 0.01€ ушел в гости.
Но не сразу, переименование всех найденных значение url тестовой среды на боевую ничего не дало, Fiddler2 четко показывал что я подключаюсь к тестовой системе.
Меняется вот так:
Проблема проверки введенных данных.
Еще для тех, кто пишет платежные системы, известно что сначала необходимо получить подтверждение о существовании номера, счета и тд. В моем случае счет- это мыло. И возможности проверить его у Paypala нет. Но Есть функционал
AddressVerify API Operation но что бы проверить мыло надо вводить обязательно и мыло и адрес и зип код. Но вводить адрес на терминале, это не удобно и для доступа к данному функционалу, нужны особые права.
Думая о том, как же его сделать проверяемым, додумался до того, что бы проводить платеж, отменять его и проводить еще раз, при первом успешном проведении. Первое проведение его как бы носило тестовый характер, но не тут то было. Если так делать сказали будут банить
Так что если даже мыла не существует, в ответ от MasPay приходит — что платеж прошел удачно.
Как вариант наблюдения за платежами еще можно еще использовать Instant Payment Notification (IPN).
В личном кабинете можно включить, что бы на наш сервис приходила информация о платежах.
И когда он пришлет ответ там то и видно что
Путеводитель по сайту Paypal.
1. Прием платежей
2. Подробно по ошибкам
3. Точки входа
4. Подробно про сертификат
5. Подробно про сигнатуру
6. Пример использования SDK
7. Скачать SDK
8. WSDL схема
9. Уведомление о платежах/Instant Payment Notification (IPN)
PS: Вроде все написал что помню, если появится такая возможность, может добавлю еще что нить.
Дали данные акаунта: логин пароль и какой то текстовый файл с подписанным хэшем внутри. Сказали хелп тут, тоже же что и https://www.paypal.com/и пройти по вкладке developers.
К сожалению, ушло 2 дня на решение каких то тривиальных вопросов.
Меня сбивало с толку что я был ограничен в информации, было мало начальных данных. Не привычно поднимать систему, без тех специалиста на др конце. Например, даже аккаунт, не понятно от боевой или тестовой системы. Не знаю, почему, но я его сразу (ошибочно) приписал к тестовой среде и долго на этом стоял. Не говорю уже о сертификате, который пришел в виде тхт.
Я уже, когда писал код, составлял черновик статьи, думая что кому нить помогу, т.к. сроки как всегда были вчера и как всегда на чем нить возникал ступор. Как дописал программу, отложил черновик в долгий ящик, пока один коллега, не обратился ко мне за помощью, с теми же вопросами, которые возникали и у меня. Ну и я решил выложить статью, а заодно и получить долгожданный инвайт.
Начнем с данных аккаунта.
Текстовый файл, который мне дали, оказался сертификат.
Но что бы его использовать, надо применить определенное шаманство.
Если коротко то надо:
1. Файл сертификата в формате xtx, скопировать, переименовать в расширение rem.
2. Скачать утилиту Win32 OpenSSL v0.9.8l Light и если не стоит 8 студия то Visual C++ 2008 Redistributables, и зашифровать сертификат.
3. Скачать WinHttpCertCfg.exe и установить сертификат из п3.
Подробнее об этот тут.
Проще использовать сигнатуру вместо сертификата. Сертификат устанавливается на комп и могут возникнуть трудности с переносом приложения и больше возни при разработке.
У Paypal существует тестовый сервер, аналогичный боевому, и лучше на нем сразу зарегаться, даже если вам дали (боевые)учетные данные, чтобы самому можно было настраивать учетные данные, и можно следить за движением денег в кабинете, поработать в тестовой среде накоенец). Там все просто, вводите мыло, ждете подтверждения на мыло, проходите по ссылке активируете аккаунт и у вас появляется возможность создавать тестовые данные учетной записи для авторизации (API Credentials ) а так же тестовые счета(мыла) для оплаты. Внимание по умолчанию Payment Review, счета Disabled, надо по нему кликнуть, что бы включить.
Что делать дальше…
Дальше надо сразу скачать установить SDK, и пример его использования, на первый взгляд все тут мягко и пушисто. Но у меня были ошибки и для их решения пришлось поднимать демо сервис PayPal у себя (который идет с sdk), что бы отследить схему работы, я час попробую все расписать, что бы вы так не заморачивались.
И так ставим SDK, подключаем
using com.paypal.sdk.services;
using com.paypal.soap.api;
using com.paypal.sdk.profiles;
С примером идет только 1 библиотека paypal_base.dll,
а еще нунжно log4net.dll
брать тут
…\PayPal ASP.NET SDK\samples\AspNet\bin
Её еще надо прописать ее в свой конфиг, как в конфиге проекта SDK, первые 2 абзаца сверху
…\PayPal ASP.NET SDK\samples\AspNet\Web.config
Обзор по ошибкам
В подробном описании ошибок, видно что у одного кода ошибки, могут быть разные причины.
PayPal API SOAP error code 10002. You do not have permissions to make this API call.
Вот с этим долго пришлось биться, ErrorCode10002, тут еще сказалось, что саппорт paypala отвечая на вопрос, видимо сам не зная ответа, отмазывается нагоняя на сертификат ну и я ушел в эту степь устанавливал его туды-сюды, сносил, создавал, устанавливал сертификат, и даже мой локальный веб сервис выдавал мне такую же ошибку когда я на него стучался через браузер. Ответ я нашел только когда вопрос уже был решен, если прочитать статью до конца видно что ошибка в разных методах создания профайлера:
//Для сертификата
IAPIProfile profile = ProfileFactory.createSSLAPIProfile();
//Для сигнатуры
IAPIProfile profile = ProfileFactory.createSignatureAPIProfile();
В итоге мне прислали сигнатуру и наткнулся на другую багу: Ошибика авторизации 10002
Где то в хелпе нашел ее возможные причины.
That error message indicates that your API credentials aren't being accepted by PayPal.
Common causes:
1. You have your PayPal module configured to «Sandbox» but have not used Sandbox API credentials.
2. You have your PayPal module configured to «Live» but have not used Live API credentials.
3. You have mis-typed one or more API credentials entries, including but not limited to leaving trailing spaces.
4. You have deleted and/or recreated new API credentials in your PayPal account but have not copied those new credentials back to your store.
Моя проблема была в том, что я подключался на тестовый сервер, думая что мне дали тестовую учетку, а это оказалось не так, зарегайся я в тестовой среде как описано выше, проблемы бы не было.
Еще всем рекомендую использовать программу Fiddler2, что бы снифить ответы запросы и еще по ней видно куда ты подключаешься.
Я потом рылся в форумах, с аналогичной проблемой, и увидел что у кого то подобный запрос работает на боевой базе и он продолжает разработку и мой первый 0.01€ ушел в гости.
Но не сразу, переименование всех найденных значение url тестовой среды на боевую ничего не дало, Fiddler2 четко показывал что я подключаюсь к тестовой системе.
Меняется вот так:
if (cfg.TestMode == 1)
{
//тестовый режим
profile.Environment = "sandbox";
}
else
{
//боевой режим
profile.Environment = "live";
}
Проблема проверки введенных данных.
Еще для тех, кто пишет платежные системы, известно что сначала необходимо получить подтверждение о существовании номера, счета и тд. В моем случае счет- это мыло. И возможности проверить его у Paypala нет. Но Есть функционал
AddressVerify API Operation но что бы проверить мыло надо вводить обязательно и мыло и адрес и зип код. Но вводить адрес на терминале, это не удобно и для доступа к данному функционалу, нужны особые права.
Думая о том, как же его сделать проверяемым, додумался до того, что бы проводить платеж, отменять его и проводить еще раз, при первом успешном проведении. Первое проведение его как бы носило тестовый характер, но не тут то было. Если так делать сказали будут банить
Так что если даже мыла не существует, в ответ от MasPay приходит — что платеж прошел удачно.
Как вариант наблюдения за платежами еще можно еще использовать Instant Payment Notification (IPN).
В личном кабинете можно включить, что бы на наш сервис приходила информация о платежах.
И когда он пришлет ответ там то и видно что
………&payment_status=Completed&status_1=Failed…….
Путеводитель по сайту Paypal.
1. Прием платежей
2. Подробно по ошибкам
3. Точки входа
4. Подробно про сертификат
5. Подробно про сигнатуру
6. Пример использования SDK
7. Скачать SDK
8. WSDL схема
9. Уведомление о платежах/Instant Payment Notification (IPN)
PS: Вроде все написал что помню, если появится такая возможность, может добавлю еще что нить.