PayPal является самой популярной платформой для приема онлайн-платежей сегодня.
Простота открытия счета PayPal и получения платежей по сравнению с открытием торгового счета с традиционным платежным шлюзом, вероятно, является причиной номер один для его популярность, второе место быть всеобъемлющим, что API PayPal предоставляет своим платежных услуг.В этом посте я буду ломать некоторые из методы и подходы к работе с PayPal API, для того, чтобы интеграция и устранение неисправностей проще и easier.
Отказ от ответственности: API PayPal является одним из самых худших, которые я когда-либо имел дело.Несоответствия, иногда плохое или противоречивые документы, непредсказуемые сбои и внимание изменения, и основные различия между живым и песочницы версии все сговорились, чтобы сделать PayPal API довольно боль в заднице, чтобы работать.За эти годы, я взял мою куски от работы совсем немного с PayPal API, и я опубликовали результаты своего жесткого извлеченные уроки в качестве коммерческого PHP PayPal API component на исходный код рынке Binpress.
Различные оплаты Options
PayPal предлагает различные варианты оплаты, которая может ввести в заблуждение сначала:
- Экспресс CheckoutПремьер-службы PayPal.Express Checkout позволяет принимать платежи без торговый счет и без того, чтобы соответствовать особым требованиям, кроме проверки Вашего счета (или через банковский счет или кредитную карту).Раньше вы могли бы получить Express Checkout платежей от PayPal только для пользователей, но с тех пор PayPal добавил кредитной карты вариант для не-пользователей PayPal, делая эту услугу доступной практически любому человеку с кредитную карту.Обратите внимание, что процесс Express Checkout происходит на платформу PayPal и поэтому никогда не может быть полностью интегрирован в вашего сайта experience.
- Прямые PaymentПрямой метод оплаты позволяет получить кредитную карту платежи непосредственно через вызов API.Это позволяет организовать процесс оплаты на вашем сайте в полном объеме, что может сделать для более полного торговый опыт для своих клиентов.Прямой метод оплаты имеет несколько вариантов, которые позволяют авторизовать платеж и завершить его в более поздние даты: с соответствующим названием Авторизация и Capture методами.Эти изменения являются частью Платежи сайта Pro API,которая доступна только для США, Канады и Великобритании accounts.
- новое PaymentsЭто позволяет установить повторяющиеся транзакции (т.е. абонентская плата)
- Mass PaymentsЭто позволяет перевести деньги на несколько счетов в once.
- Адаптивная PaymentsВот еще один API для отправки средств нескольким получателям, с некоторыми отличиями от API массовым платежам.(Я уже говорил, что API PayPal сбивает с толку и немного избыточным?)
Этот список не является исчерпывающим, но охватывает основные варианты оплаты ( см. в документации по API для more).
Создание API Requests
PayPal поддерживает два основных форматов на HTTP: NVP и SOAP.NVP это сокращение от пары имя-значение, и SOAP выступает за простой протокол доступа к объектам.Я расскажу NVP подход, который я предпочитаю, чтобы SOAP, относительно подробные и сложные syntax.
Каждый из методов API имеет различные параметры, но все они имеют некоторые основные parameters, которые используются для идентификации API счета и подписать сделку.К ним относятся:
-
USER
Ваш PayPal пользователь API name. -
PWD
Ваш PayPal API password. -
VERSION
Номер версии NVP API услуг, таких как 74.0. (Последняя на момент написания статьи) -
SIGNATURE
Ваша подпись PayPal API строку.Этот параметр является необязательным, если вы используете сертификат authenticate.
Последний обязательный параметр составляет METHOD
, который заявляет, которая API метода мы calling.
Запросы осуществляются через HTTPS.Мы будем использовать CURL строить наш основной запрос, а затем инкапсулировать процесса в классе:
class Paypal { /** * Last error message(s) * @var array */ protected $_errors = array(); /** * API Credentials * Use the correct credentials for the environment in use (Live / Sandbox) * @var array */ protected $_credentials = array( 'USER' => 'seller_1297608781_biz_api1.lionite.com', 'PWD' => '1297608792', 'SIGNATURE' => 'A3g66.FS3NAf4mkHn3BDQdpo6JD.ACcPc4wMrInvUEqO3Uapovity47p', ); /** * API endpoint * Live - https://api-3t.paypal.com/nvp * Sandbox - https://api-3t.sandbox.paypal.com/nvp * @var string */ protected $_endPoint = 'https://api-3t.sandbox.paypal.com/nvp'; /** * API Version * @var string */ protected $_version = '74.0'; /** * Make API request * * @param string $method string API method to request * @param array $params Additional request parameters * @return array / boolean Response array / boolean false on failure */ public function request($method,$params = array()) { $this -> _errors = array(); if( empty($method) ) { //Check if API method is not empty $this -> _errors = array('API method is missing'); return false; } //Our request parameters $requestParams = array( 'METHOD' => $method, 'VERSION' => $this -> _version ) + $this -> _credentials; //Building our NVP string $request = http_build_query($requestParams + $params); //cURL settings $curlOptions = array ( CURLOPT_URL => $this -> _endPoint, CURLOPT_VERBOSE => 1, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_SSL_VERIFYHOST => 2, CURLOPT_CAINFO => dirname(__FILE__) . '/cacert.pem', //CA cert file CURLOPT_RETURNTRANSFER => 1, CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $request ); $ch = curl_init(); curl_setopt_array($ch,$curlOptions); //Sending our request - $response will hold the API response $response = curl_exec($ch); //Checking for cURL errors if (curl_errno($ch)) { $this -> _errors = curl_error($ch); curl_close($ch); return false; //Handle errors } else { curl_close($ch); $responseArray = array(); parse_str($response,$responseArray); // Break the NVP string to an array return $responseArray; } } }
Обратите внимание, что я использую файл CA сертификата SSL для проверки сертификатов.Вы можете получить файл с Curl website или любого надежного источника.Измените путь к файлу сертификата в соответствии с которой вы разместили it.
Ответ будет возвращено в NVP формате, а также, и я переформатировать его в массив перед его возвращением.Параметр с именем ACK
означает статус запроса: Success
или SuccessWithWarning
, когда запрос успешно, и Error
или Warning
, когда запрос fails.
Запрос может потерпеть неудачу по многим причинам, и есть разные причины для каждого метода API, которые подробно описаны в manual.Мы пройдемся по некоторым дальше в этой статье и искать пути, чтобы справиться с ними.Имейте в виду, что значения параметров чувствительны к регистру, поэтому код противих accordingly.
Экспресс Checkout
Один из самых популярных API, является Express Checkout API, который позволяет принимать платежи без открытия Website Payments Pro счета (который доступен только для проверено счетов в США) или хостинг фактической сделки самостоятельно (что требует дополнительного обеспечения).
Процесс Express Checkout работает следующим образом:
- Мы просим проверки маркера от PayPal с использованием транзакции детали;
- В случае успеха, мы перенаправить пользователя на PayPal конечную точку, используя полученный маркер;
- Пользователь завершает или отмена оплаты на PayPal платформы и перенаправляется обратно на наш сайт;
- Мы завершения платежа либо когда пользователь перенаправляется обратно или через Моментальная оплата Notification. (IPN)
1.Получение Оформить заказ Token: SetExpressCheckout
Мы начинаем процесс Express Checkout, передавая сведения о заказе на PayPal API, и мы получаем маркер строка, которая идентифицирует его.Этот знак будет использоваться на следующем этапе, чтобы перенаправить PayPal.
Вот необходимые параметры:
-
METHOD
Это API метод, который мы используем (т.е.SetExpressCheckout
). -
RETURNURL
URL-адрес, который пользователь будет перенаправлен после оплаты процессе completed. -
CANCELURL
URL-адрес, который пользователь будет перенаправлен после того, как отменили оплату process. -
PAYMENTREQUEST_0_AMT
Общая сумма сделки.Это должно быть два знака после запятой, с десятичного разделителя будучи период (.
).Дополнительный разделитель тысяч должна быть запятая (,
). -
PAYMENTREQUEST_0_ITEMAMT
Общая стоимость товаров в порядке, за исключением доставки, налоги и другие расходы.Если нет никаких дополнительных затрат, то это должно быть то же значение,PAYMENTREQUEST_0_AMT
.
Мы можем передать дополнительные параметры, чтобы добавить больше информации о порядке, некоторые из которых имеют значения по умолчанию:
-
PAYMENTREQUEST_0_CURRENCYCODE
Оплата в валюте, а три буквы кода.По умолчанию USD. -
PAYMENTREQUEST_0_SHIPPINGAMT
Общая стоимость груза для этого order. -
PAYMENTREQUEST_0_TAXAMT
Общая сумма налога за этот заказ.Это необходимо, если за налоговый пункт указан (см. ниже) -
PAYMENTREQUEST_0_DESC
Заказа description.
Мы можем также добавить информацию о отдельные элементы в следующем порядке:
-
L_PAYMENTREQUEST_0_NAMEm
Элемента name. -
L_PAYMENTREQUEST_0_DESCm
Элемента description. -
L_PAYMENTREQUEST_0_AMTm
Элемента cost. -
L_PAYMENTREQUEST_0_QTYm
Количество item.
Переменный индекс m
идентифицирует элемент.(Используйте ту же переменную для всех деталей этого же пункта).
Есть много других дополнительных параметров, которые могут быть найдены в API documentation.
Мы будем использовать функции, которые мы писали выше, чтобы построить SetExpressCheckout
запрос:
//Our request parameters $requestParams = array( 'RETURNURL' => 'http://www.yourdomain.com/payment/success', 'CANCELURL' => 'http://www.yourdomain.com/payment/cancelled' ); $orderParams = array( 'PAYMENTREQUEST_0_AMT' => '500', 'PAYMENTREQUEST_0_SHIPPINGAMT' => '4', 'PAYMENTREQUEST_0_CURRENCYCODE' => 'GBP', 'PAYMENTREQUEST_0_ITEMAMT' => '496' ); $item = array( 'L_PAYMENTREQUEST_0_NAME0' => 'iPhone', 'L_PAYMENTREQUEST_0_DESC0' => 'White iPhone, 16GB', 'L_PAYMENTREQUEST_0_AMT0' => '496', 'L_PAYMENTREQUEST_0_QTY0' => '1' ); $paypal = new Paypal(); $response = $paypal -> request('SetExpressCheckout',$requestParams + $orderParams + $item);
2.Перенаправление на PayPal Checkout с помощью экспресс Token
Если запрос выполнен успешно, то мы получим маркер проверки в TOKEN
Параметр response.
if(is_array($response) && $response['ACK'] == 'Success') { //Request successful $token = $response['TOKEN']; header( 'Location: https://www.paypal.com/webscr?cmd=_express-checkout&token=' . urlencode($token) ); }
Пользователь теперь проходит через процесс покупки на веб-сайте PayPal.Когда они подтвердить или отменить его, они вернутся к одному из адресов, которые мы указали в request.
3.Завершение Transaction
Предположим, что пользователь подтверждает сделку, они будут перенаправлены на наш сайт по PayPal.На данный момент, мы должны использовать два соответствующих методов API:. DoExpressCheckoutPayment
завершит сделку, но до этого мы могли бы получить дополнительную информацию о покупателе использованием GetExpressCheckoutDetails
PayPal будет перенаправлять пользователя обратно от покупки с маркером проверки, которые мы будем использовать для вызова этих методов.Маркер будет доступен в URL запроса параметров через token
параметр.Мы будем проверять его существование в подтверждение URL, а затем отправить наши запросы API, если мы найдем it.
GetExpressCheckoutDetails
метод требует только маркер проверки.DoExpressCheckoutPayment
требуется несколько дополнительных параметров:
-
PAYMENTREQUEST_0_PAYMENTACTION
Это оплаты действий.Он должен быть установлен доSale
, если мы не указали раз …
Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров