—»     —»   Начинаем работать с API PayPal
  Раздел: eCommerce   Комментариев: 2  

Начинаем работать с API PayPal



PayPal является самой популярной платежной системой в интернете. Ключевым фактором, почему данная система настолько популярна, являются простота открытия счета и получение/отправка платежей. Также немаловажным аспектом можно выделить наличие API, которое позволяет вам встраивать платежную систему в ваши проекты. В нашей сегодняшней статье, дабы исключить сложности в интеграции, мы расскажем вам о некоторых способах и подходах к работе с API от PayPal.

Дисклеймер: API от PayPal – это, наверное, худшее, с чем нам когда-либо приходилось работать. Проблемы с несовместимостью приложения, расхождениями в документации, непредсказуемыми ошибками и изменениями в аккаунтах, а также значительные расхождения между живой и версией и версией для тестирования сделают вашу работу с API очередной и продолжительной головной болью для вас. С течением лет мы уже приспособились работать с API от PayPal, но мы обязательно должны порекомендовать вам обратиться к уже опубликованным в Binpress отчетам о ходе работы.

Начинаем работать с API PayPal

Различные опции оплаты

PayPal предлагает различные способы проведения оплаты, которые на первый взгляд могут запутать:

1. Экспресс платежи (Express Checkout)

Основной сервис PayPal. Экспресс оплата позволяет вам получать платежи, даже не создавая аккаунт продавца, а также без соблюдения особых требований (типа подтверждения вашего аккаунта посредством кредитной карточки или банковского счета). Ранее вы могли бы получать экспресс платежи только от пользователей системы PayPal, но совсем недавно была разработана функция приема платежей от владельцев пластиковых карт, не являющихся пользователями системы PayPal. Данный способ оплаты совместим практическими со всеми видами пластиковых карт. Учтите, что процесс экспресс оплаты нельзя полноценно внедрить в ваш веб-сайт, так как он производится в пределах платформы PayPal.

2. Прямые платежи (Direct Payment)

Прямые платежи позволяют вам получать оплату с пластиковых карт напрямую через запрос к API. Это позволяет вам размещать весь процесс оплаты в пределах вашего веб-сайта, а это крайне удобно для посетителей и, главное – покупателей. Прямые платежи имеют несколько вариаций, позволяющих вам вписать данные о платеже, и завершить его позже. Методы имеют соответствующие названия: Авторизация и Фиксирование. Эти вариации являются частью API Website Payments Pro, который доступен только для аккаунтов США, Канады и Великобритании.

3. Повторяющиеся платежи (Recurring Payments)

Данный метод позволит вам настроить систему из периодических платежей (например, оплата за подписку).

4. Массовые платежи (Mass Payments)

Данный метод позволяет вам осуществлять платежи сразу на несколько аккаунтов за раз.

5. Адаптивные платежи (Adaptive Payments)

Еще один API для отправки средств нескольким получателем, но с некоторыми отличиями от API массовых платежей (мы ведь не зря вас предупреждали, что здесь легко можно запутаться…).

Данный список не так уж и сложен, и он охватывает основные методы оплаты (для большей информации смотрите документацию по API).

Создание запроса к API

PayPal поддерживает два основных формата HTTP: NVP и SOAP. NVP – это сокращение от Name-Value Pair (Пара «Имя-Значение»), и SOAP – это Simple Object Access Protocol (Простой Протокол Доступа к Объектам). Давайте разберем подход NVP, который мы предпочитаем ввиду громоздкости и сложности SOAP.

Каждый из этих методов имеет различные параметры, но основные параметры они, все же, разделяют – они используются для идентификации аккаунта API и проведения трансакции. Например:

USER – ваше имя пользователя в API PayPal.

PWD – ваш пароль в API PayPal.

VERSION – номер версии сервиса NVP в API, например 74.0 (наиболее распространенный вариант на момент написания данной статьи).

SIGNATURE – строка подписи в API PayPal. Данный параметр опционален, если для авторизации вы используете сертификат.

Последний востребованный параметр, METHOD, объявляет, какой метод API был вызван.

Запросы делают посредством 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;
      }
   }
}

Учитывайте, что для валидации SSL сертификата мы используем CA файл сертификата. Вы можете получить файл с вебсайта cURL или другого проверенного источника. Обновите путь до файла сертификата в соответствии с тем, куда вы его поместили.

Полученный ответ также будет в формате NVP, и перед возвращением его, мы переформатируем его в массив. Параметр под названием ACK подписывает статус запроса (Success (успешно) или SuccessWithWarning (успешно, но с подозрением)), когда производится запрос, либо Error (ошибка) или Warning (предупреждение), если запрос провалился.

Запрос может провалиться по многим причинам, и здесь есть различные причины для каждого метода API (всё это детально освещено в руководстве). Далее мы вернемся к некоторым из них, и расскажем вам, как избежать подобного результата. Помните, что значения параметров чувствительно к регистру, и не забывайте оформлять их надлежащим образом.

Экспресс платежи

Один из популярнейших API – это API Express Checkout, который позволяет вам получать платежи без открытия аккаунта Website Payments Pro (который доступен только для проверенных аккаунтов пользователей из США), или самостоятельного размещения текущей трансакции (для чего требуется дополнительные нормы безопасности).

Процесс экспресс платежей проходит следующим образом:

1. Используя данные о трансакции, мы запрашиваем платежный талон из PayPal;
2. Если трансакция успешна, мы перенаправляем пользователя на конечную точку PayPal, используя полученный талон;
3. Пользователь завершает или отменяет платеж в платформе PayPal и перенаправляется обратно на наш вебсайт;
4. Мы завершаем платеж либо после того, как пользователь перенаправлен обратно, либо посредством IPN (Instant Payment Notification – Мгновенное оповещение о платеже).

Начинаем работать с API PayPal

1. Получаем платежный талон: SetExpressCheckout

Мы приступаем к процессу осуществления экспресс платежа путем передачи данных о заказе в API PayPal, и получаем талон, который определяет конкретный платеж. Данный талон используется для перехода в PayPal.

Давайте рассмотрим необходимые параметры:

METHOD – Это именно тот метод API, который мы применили (другими словами, SetExpressCheckout).

RETURNURL – URL, на который пользователь будет перенаправлен после того, как платеж будет осуществлен.

CANCELURL – URL, на который пользователь будет перенаправлен после того, как отменит платеж.

PAYMENTREQUEST_0_AMT – общее число трансакции. Здесь у нас два десятичных поля с десятичным разделителем (.). Разделитель при введении тысячных чисел должен быть (,).

PAYMENTREQUEST_0_ITEMAMT – общая стоимость единиц в заказе, за исключением платы за доставку, налогов и других надбавленных стоимостей. Если здесь нет надбавок, то это значение будет тем же, что и в PAYMENTREQUEST_0_AMT.

Мы можем внести дополнительные параметры для того, чтобы добавить больше информации о заказе. Давайте рассмотрим некоторые параметры со стандартными значениями:

PAYMENTREQUEST_0_CURRENCYCODE – валюта, в которой осуществляется платеж (Формат в три буквы. Стандартное значение: USD).

PAYMENTREQUEST_0_SHIPPINGAMT – общая стоимость доставки заказа.

PAYMENTREQUEST_0_TAXAMT – общая величина налогов для заказа. Эта опция важна, если вы указали налогообложение для каждой единицы заказа (смотрите ниже).

PAYMENTREQUEST_0_DESC – описание заказа.

Мы также можем внести данные об отдельных единицах в заказе:

L_PAYMENTREQUEST_0_NAMEm – Наименование единицы.

L_PAYMENTREQUEST_0_DESCm – Описание единицы.

L_PAYMENTREQUEST_0_AMTm – Стоимость единицы.

L_PAYMENTREQUEST_0_QTYm – Количество заказанных единиц.

Переменный индекс «m» определяет единицу заказа (используйте ту же переменную для всех деталей идентичной единицы заказа).

Существует множество других опциональных параметров, которые можно найти в документации по API.

Мы используем функцию, о которой писали выше, для создания запроса 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. Перенаправление в PayPay посредством полученного талона экспресс оплаты

Если запрос будет успешным, мы получаем талон об оплате в параметре TOKEN.

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. Когда он подтверждает или отменяет оплату, он будет возвращен на одну из URL, которые мы указали в запросе.

3. Завершение трансакции

Предположим, что пользователь подтверждает трансакцию, то он не будет перенаправлен на вебсайт посредством PayPal. Основываясь на этом, мы должны применить два важных метода API:
DoExpressCheckoutPayment завершит трансакцию, но перед этим мы должны получить дополнительную информацию о покупателе используя GetExpressCheckoutDetails.

PayPal перенаправит пользователя обратно на страницу покупки с талоном об оплате, который и вызовет данные методы. Талон будет доступен в параметрах URL-запроса через параметр token. Мы проверим его наличие в URL для подтверждения, а затем отправим наши API-запросы, если он будет обнаружен.

Метод GetExpressCheckoutDetails требует лишь талон об оплате.
DoExpressCheckoutPayment требует несколько дополнительных параметров:

PAYMENTREQUEST_0_PAYMENTACTION – Это действие оплаты. Он должен быть установлен на Sale до тех пор, пока мы не укажем другое действие в методе SetExpressCheckout (возможно, значения включают Авторизацию (Authorization) и Фиксирование (Capture)).

PAYERID – это уникальная идентификация для аккаунта в PayPal. Она также возвращается к параметрам URL-запроса (в параметре PayerID) и также может быть вызвана посредством деталей, полученный в ответ от GetExpressCheckoutDetails.

if( isset($_GET['token']) && !empty($_GET['token']) ) { // Token parameter exists
   // Get checkout details, including buyer information.
   // We can save it for future reference or cross-check with the data we have
   $paypal = new Paypal();
   $checkoutDetails = $paypal -> request('GetExpressCheckoutDetails', array('TOKEN' => $_GET['token']));

   // Complete the checkout transaction
   $requestParams = array(
      'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
      'PAYERID' => $_GET['PayerID']
   );

   $response = $paypal -> request('DoExpressCheckoutPayment',$requestParams);
   if( is_array($response) && $response['ACK'] == 'Success') { // Payment successful
      // We'll fetch the transaction ID for internal bookkeeping
      $transactionId = $response['PAYMENTINFO_0_TRANSACTIONID'];
   }
}

Прямые платежи

API Direct Payment (прямые платежи) позволяет вам получать оплату напрямую через ваш веб-сайт или приложение, что даёт вам полный контроль над процессом оплаты. PayPal старается принудить пользователей зарегистрироваться в системе PayPal, что и понятно, но это расходится с нашими интересами, которые подразумевают максимально облегченный и понятный процесс расчета для покупателей. По этой причине, мы предпочитаем полный контроль над процессом оплаты, что даёт нам больше возможностей по оптимизации и увеличению продаж.

Начинаем работать с API PayPal

Здесь процесс немного проще, чем в случае с экспресс платежами, так как всё взаимодействие осуществляется в пределах веб-сайта, и нам нужно делать всего один API запрос, чтобы осуществить стандартную процедуру оплаты: DoDirectPayment.

Нам потребуется еще парочка API запросов, если нам нужно будет провести трансакцию, счет на которую будет выставлен на несколько дней позже (например, если нужно проверить наличие или доставить товар морской почтой). Здесь нам потребуются методы Авторизации и Фиксирования, о которых в нашей сегодняшней статье мы, к сожалению, не расскажем, но будьте уверены, что такая опция существует.

Параметры DirectPayment

DirectPayment требует иных параметров, нежели экспресс платежи, что вполне ожидаемо. Хотя детали параметров трансакции схожи (не считая различия в именах ключей), данный метод также требует пластиковую карточку и адресные данные.

Основные параметры DirectPayment:

METHOD – DoDirectPayment.

IPADDRESS – IP адрес плательщика. В PHP мы можем запросить его посредством глобального $_SERVER['REMOTE_ADDR']. Вам придется потрудиться немного больше, если вам нужно достать IP адрес при работе с настройками через прокси между PHP-процессом и внешней сетью (как, например, nginx).

PAYMENTACTION – это тип действия, которое нам нужно произвести. Значение Sale определяет мгновенную трансакцию. Значение Авторизации определяет то, что данная трансакция не будет проведена мгновенно, но будет зафиксирована и проведена посредством API Authorization & Capture позже.

Данные о пластиковой карте:

CREDITCARDTYPE – тип пластиковой (кредитной) карты (Visa, MasterCard и т.д.). Для полного списка поддерживаемых карт ознакомьтесь с документацией к API.

ACCT – номер пластиковой карты. Этот параметр должен соответствовать точному формату номера определенного типа карты.

EXPDATE – срок истечения карты в формате MMYYYY (другими словами, две цифры месяца, 4 цифры года одной строкой).

CVV2 – значение подтверждение карты. Код безопасности.

Информация о плательщике и адресные данные:

FIRSTNAME, LASTNAME – Имя и фамилия плательщика, соответственно (в отдельных полях). Вы также можете внести параметр электронной почты, но это не столь важно.

CITY, STATE, COUNTRYCODE, ZIP – город, штат и код страны (двумя буквами), а также индекс. Все поля обязательны к заполнению.

STREET, STREET2 – Две строки для адреса (только первая обязательна к заполнению).

Данный адрес будет использован для системы подтверждения адресов (AVS – address verification system). Вы получите специальный код ошибки, если трансакция будет провалена из-за невозможности подтвердить адрес.

Параметры деталей платежа схожи с экспресс платежами, за исключением некоторых небольших различий в именах (AMT, ITEMAMT, CURRENCYCODE, SHIPPINGAMT, TAXAMT и DESC), а также отсутствия префикса PAYMENTREQUEST_0_. Для получения детальной информации обратитесь к документации к API, либо к предыдущему разделу статьи.

Далее, параметры деталей единиц также схожи с параметрами в экспресс платежах. Они включают L_NAMEm, L_DESCm, L_AMTm and L_QTYm, что дает вам не совсем полный контроль над деталями единиц. Переменная «m» используется в аккаунте для множественных единиц (замените её на 0, 1 и так далее, чтобы выстроить сортировку пунктов). Для более подробной информации о списках ознакомьтесь с документацией к API.

Проведение трансакции

Отправление запроса при помощи нашей функции крайне схоже с GetExpressCheckoutToken. Мы проводим все параметры в функцию запроса, как и прежде; метод должен быть выставлен на DoDirectPayment.

$requestParams = array(
   'IPADDRESS' => $_SERVER['REMOTE_ADDR'],
   'PAYMENTACTION' => 'Sale'
);

$creditCardDetails = array(
   'CREDITCARDTYPE' => 'Visa',
   'ACCT' => '4929802607281663',
   'EXPDATE' => '062012',
   'CVV2' => '984'
);

$payerDetails = array(
   'FIRSTNAME' => 'John',
   'LASTNAME' => 'Doe',
   'COUNTRYCODE' => 'US',
   'STATE' => 'NY',
   'CITY' => 'New York',
   'STREET' => '14 Argyle Rd.',
   'ZIP' => '10010'
);

$orderParams = array(
   'AMT' => '500',
   'ITEMAMT' => '496',
   'SHIPPINGAMT' => '4',
   'CURRENCYCODE' => 'GBP'
);

$item = array(
   'L_NAME0' => 'iPhone',
   'L_DESC0' => 'White iPhone, 16GB',
   'L_AMT0' => '496',
   'L_QTY0' => '1'
);

$paypal = new Paypal();
$response = $paypal -> request('DoDirectPayment',
   $requestParams + $creditCardDetails + $payerDetails + $orderParams + $item
);

if( is_array($response) && $response['ACK'] == 'Success') { // Payment successful
   // We'll fetch the transaction ID for internal bookkeeping
   $transactionId = $response['TRANSACTIONID'];
}

Существует множество параметров, но все они вполне просты.

Оперирование ошибками

Если бы мы жили в сказке, этого пункта вообще не было бы в статье. В реальности же, вы будете обращаться к подобным разделам почти в любом деле. PayPal может провалить трансакцию по многим причинам, и не во всех случаях вы сможете совладать с ситуацией.

Переменная $response, которую мы получили из нашей функции paypalApiRequest(), может содержать значение, отличное от значения «Успешно» в параметре ACK. Значение может быть:

Success – указывает на успешно проведенную операцию.

SuccessWithWarning – указывает на успешную операцию, а также на то, что некоторые полученные данные следует перепроверить.

Failure – указывает на то, что операция была провалена, и ответ содержит один или более сообщений об ошибке.

FailureWithWarning – указывает на то, что операция была провалена, и сообщения, которые были получены в ответ, следует перепроверить.

В итоге у нас есть 2 успешных статуса и 2 статуса провала. Приведенный выше код тестирует только успешное значение Success, но мы можем изменить его, и также направить на проверку SuccessWithWarning. И помните, что нам нужно выяснить, в чем заключается сообщение с предупреждением. По традиционному сценарию бывает так, что прямой платеж был произведен успешно, но вот с кредитной картой возникли какие-то проблемы.

Ошибки, полученные в ответ от PayPal, бывают 4-х видов:

L_ERRORCODE0 – числовой код ошибки, по которому можно определить тип ошибки, сверившись со списком ошибок в PayPal (их не так много).

L_SHORTMESSAGE0 – короткое сообщение об ошибке с описанием проблемы.

L_LONGMESSAGE0 – более детальное сообщение об ошибке с описанием проблемы.

L_SEVERITYCODE0 – код «серьезности» ошибки (мы не обнаружили какой-либо развернутой документации на этот счет, поэтому нам показалось, что данный пункт не столь важен).

0 в этих параметрах – это число различных сообщений об ошибке (1, 2 и так далее)

Давайте ознакомимся с наиболее частыми ошибками, с которыми возможно и вам придется повстречаться:

10002ошибка при авторизации или аутентификации. Это обычно указывает на неверные мандаты API, либо неверные мандаты, которые не соответствуют типу среды, в которой вы работаете.

81***недостающий параметр. Существует не так много подобных ошибок, и все они начинаются с 81. Каждая отвечает за отдельный востребованный параметр, который отсутствует в запросе.

104**неверный аргумент. Это указывает на то, что один из поддерживаемых параметров обозначен неверным значением. Каждый аргумент имеет отдельную ошибку; каждая из ошибок начинается с 104. Самая распространенная – 10413. Она означает, что общая стоимость корзины товаров не соответствует количеству единиц в заказе (другими словами, ситуация, когда итоговая стоимость не совпадает с количеством единиц в заказе + доставка, налоги и прочие надбавки к цене (total amount parameter AMT)).

Как избежать данных ошибок на практике?

Сообщения об ошибках в PayPal отличаются друг от друга и могут содержать личную информацию, которую вы не хотели бы показывать пользователям (например, неверные настройки магазина). Хотя по умолчанию мы не советуем вам показывать тексты ошибок вашим пользователям, все же стоит отметить, что некоторые из них могут быть очень полезными.

В большинстве случаев, мы бы советовали сделать следующее:

1. Настройте белый список для ошибок, которые можно свободно показывать пользователям (например, если пользователь забыл ввести данные кредитной карты или дату истечения срока её действия);

2. Проверьте код ответа созданного массива с белым списком;

3. Если сообщение об ошибке не входит в белый список, то отобразите отвлеченное сообщение типа «При проведении трансакции возникла ошибка. Пожалуйста, повторите попытку через пару минут».

Если ошибки не входят в белый список, то мы бы рекомендовали все равно вписывать их в лог-файл на сервере, и отправлять электронное письмо администратору с подробными деталями. По факту, ведения лога запросов и ответов PayPal – это отличная идея независимо от того, будут там ошибки или нет. Ведь таким образом вы сможете мониторить работоспособность системы.

Ну что, готовы начать работу с API от PayPal?

В нашей сегодняшней статье мы рассказали вам о двух наиболее популярных методах API, а также немного охватили примеры ошибок и способы их оперирования. Для хорошего начала этого должно быть достаточно. Теперь вы можете без задней мысли начать использовать самую популярную в мире платежную систему.

API от PayPal предоставляет и другие методы и процессы, гораздо больше, чем можно охватить в любой отдельной статье. Как только вы освоите основные методы, другие будет изучить достаточно просто. Надеемся, что данная статья поможет вам выбрать лучший метод.

Дисклеймер: API от PayPal – это, наверное, худшее, с чем нам когда-либо приходилось работать. Проблемы с несовместимостью приложения, расхождениями в документации, непредсказуемыми ошибками и изменениями в аккаунтах, а также значительные расхождения между живой и версией и версией для тестирования сделают вашу работу с API очередной и продолжительной головной болью для вас. С течением лет мы уже приспособились работать с API от PayPal, но мы обязательно должны порекомендовать вам обратиться к уже опубликованным в Binpress отчетам о ходе работы.
Обнаружили ошибку или мёртвую ссылку?
Выделите проблемный фрагмент мышкой и нажмите CTRL+ENTER.
В появившемся окне опишите проблему и отправьте уведомление Администрации ресурса.
Нужна органическая вечная ссылка из данной статьи? Постовой?
Подробности здесь
Вам понравился материал? Поблагодарить легко!
Будем весьма признательны, если поделитесь этой статьей в социальных сетях:

Ключевые тэги: PayPal, электронная торговля
Опубликовал Design FactoRy   Прочитано (раз): 20080   |   Оставлено комментариев: 2
Источник материала / оригинал статьи   Распечатать
Другие статьи и новости по теме:
Комментарий #1: 9 февраля 2012 @ 12:14
Написал: LesnajaNimfa — группа: Гости  
На сайте с: --   |   Публикаций: 0   |   Комментариев: 0
ICQ: --- не указано ---
очень полезная статья, API от PayPa меня заинтересовало
Комментарий #2: 14 мая 2013 @ 22:37
Написал: marashka — группа: Гости  
На сайте с: --   |   Публикаций: 0   |   Комментариев: 0
ICQ: --- не указано ---
PayPal - один из самых популярных платежных сервисов у буржуйских клиентов. Но для русских сайтов больше подходят более близкие платежные системы, например Pay2Pal
Добавление комментария
Уважаемые пользователи!
При добавлении комментариев на сайт Вам следует учитывать следующее - все комментарии проверяются Администрацией на предмет отсутствия спама. При обнаружении признаков спама, в оставленном Вами комментарии, сам комментарий будет незамедлительно удалён, а Ваш IP-адрес будет забанен без предупреждения! Учётные записи пользователей, рассылающих спам, блокируются/удаляются без права последующего восстановления.

С уважением, Администрация сайта.
* = поля обязательны к заполнению
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Вопрос : Назовите месяц November по-русски
Подтверждение кода безопасности :

Включите эту картинку для отображения кода безопасности
обновить, если не виден код


Популярные публикации


















Свежие шаблоны сайтов каждый день
С миру по нитке
«    Сентябрь 2017    »
ПнВтСрЧтПтСбВс
 123
45678910
11121314151617
18192021222324
252627282930