Самый простой способ интеграции оплаты через PayPal - использовать Website Payments Standard. Это просто форма с данными о покупке и кнопка, например, "Buy Now". После нажатия на кнопку пользователь попадает на сайт PayPal, где и заканчивает процесс оплаты. Среди прочего, в форме можно указать URL, куда сервером PayPal будут отправляться сообщения (Instant Payment Notification) после каждого изменения статуса оплаты заказа.
В этой заметке я перевожу "private" как "секретный" и "public" как "открытый" применительно к ключам и сертификатам.
В Sandbox в меню "Test Account" нажимаем Preconfigured. Создаем два аккаунта: один для продавца, другой для покупателя. Покупателю в графе баланс указываем сумму, которую он будет тратить на покупки. Примеры заполнения формы ниже:
|
|
Для защиты информации будем использовать Encrypted Website Payments. Это один из способов защиты передаваемой информации, рекомендованных PayPal. Данные в виде name-value pair (пара ключ-значение) шифруются и присваиваются полю с именем encrypt. Также cmd должно быть установлено в правильное значение.
Для шифрования нам понадобится создать секретный ключ и открытый сертификат. Последний мы загрузим в свой аккаунт на PayPal. После загрузки ему будет присвоен CertID, который будет передаваться в форме вместе с информацией о покупке. Также надо будет скачать открытый сертификат PayPal.
О способах защиты, рекомендованных PayPal, можно почитать тут: Securing Your PayPal Payments Standard Buttons.
OpenSSL для Windows можно скачать тут (я использовал Win64 OpenSSL v1.0.1c). Это ссылка с официального сайта, с этой страницы. После запуска инсталлятор сообщил мне, что на компьютере не установлена Visual C++ 2008 Redistributables, которая необходима для работы программы. Скачиваем
тут же.
Из командной строки переходим в директорию OpenSSL/bin.
Генерируем
секретный
ключ.
openssl genrsa -out my.sandbox-prvkey.pem 1024 -config openssl.cfg
На основе секретного ключа генерируем открытый сертификат.
openssl req -new -key my.sandbox-prvkey.pem -x509 -days 365 -out my.sandbox-pubcert.pem -config openssl.cfg
-x509 означает самоподписанный сертификат. С этой опцией используется опция
-days.
После ввода команды в диалоговом режиме можно будет ввести информацию
о владельце сертификата (название организации, страна, e-mail и т.д.).
PayPal использует только сертификаты X.509.
Теперь нужно создать сертификат p12. Нужно будет придумать и ввести пароль, который будет использоваться позже для подписывания сообщения. Сам сертификат p12, похоже, в процессе шифрования не участвует.
openssl pkcs12 -export -in my.sandbox-pubcert.pem -inkey my.sandbox-prvkey.pem -out my.sandbox-cert.p12
Теперь нам надо загрузить наш сертификат и скачать сертификат PayPal. Чтобы зайти на тестовый PayPal, согласно документации, нужно выбрать аккаунт из списка в "Test Accounts" на developer.paypal.com и нажать кнопку "Enter Sandbox Test Site". Но какой бы я аккаунт не выбрал, я почему-то всегда заходил в первый в списке аккаунт, поэтому я просто заходил на www.sandbox.paypal.com
из другого браузера.
Заходим в тестовый аккаунт продавца на sandbox.paypal.com, только в качестве логина используем не "Login Email", который мы задавали при регистрации тестового аккаунта, а фиктивный почтовый ящик, который был присвоен тестовому аккаунту автоматически (указан в списке тестовых пользователей, раздел Test Accounts в левом меню Sandbox).
E-mail тестовой учетной записи продавца, который используется в качестве логина на sandbox.paypal.com |
Теперь My Account -> Profile -> My Settings, Encrypted Payment Settings.
В разделе Your Public Certificates добавляем наш сгенерированный открытый сертификат. После загрузки он появится в списке. На интересует присвоенный ему Cert ID. Его мы будем передавать в форме.
В разделе PayPal Public Certificate есть кнопка Download. Скачиваем открытый сертификат PayPal. С нашей стороны он будет использоваться для шифрования данных формы.
PayPal предоставляет готовые решения
для шифрования формы
на нескольких языках программирования. Их можно скачать на странице SDKs and Downloads в разделе "Website Payments Standard".
Продолжение следует.