Библиотека Paypal Payflow pro
-
24-10-2019 - |
Вопрос
У меня уже есть экспресс-проверка, интегрированная с моим приложением Codeigniter.Теперь я хочу интегрировать бесшовный PayPal, где я собираю информацию CC и передаю ее Paypal (через серверную часть), и как только все будет одобрено, мое приложение покажет это пользователю.И все это без какого-либо перехода на веб-сайт Paypal.
Я знаю, что Paypal предоставляет кучу примеров кода, но у них так много разных продуктов, которые рекламируют одно и то же.
Есть ли какая-нибудь библиотека-оболочка в PHP, которую я могу использовать для обработки всего этого?
Какое проектное решение требуется для перехода на такую систему?Понадобятся ли мне для этого SSL-сертификаты?
Решение
Я создал сайт электронной коммерции в CodeIgniter, а также сделал бесшовную интеграцию с Paypal.
Когда я проводил свою охоту, мне показалось, что там не было никаких симпатичных объектно-ориентированных оберток, но я заметил несколько хороших попыток.
Мое решение оказалось немного пресным.Я скачал PHP API отсюда:https://cms.paypal.com/cms_content/US/en_US/files/developer/PP_PHP_NVP_Samples.zip
Я спас CallerService.php
файл как application/helpers/paypal_helper.php
и добавил его к application/config/autoload.php
чтобы вставить его в приложение.
Сейчас, CallerService.php
требует constants.php
, поэтому вам нужно либо скопировать и вставить его, либо включить constants.php
файл в вашем каталоге helpers.Я просто скопировал и вставил.Затем обязательно настройте все константы для своей учетной записи.
Как только это будет настроено, мой код будет выглядеть примерно так:
$nvp_query_string = '&PAYMENTACTION=Sale'
. '&AMT='.urlencode($order->total)
. '&CREDITCARDTYPE='.urlencode($this->input->post('credit_card_type'))
. '&ACCT='.urlencode($this->input->post('acct'))
. '&EXPDATE='.urlencode(str_pad($this->input->post('exp_date_month'), 2, '0', STR_PAD_LEFT).'20'.$this->input->post('exp_date_year'))
. '&CVV2='.urlencode($this->input->post('cvv2_number'))
. '&FIRSTNAME='.urlencode($first_name)
. '&LASTNAME='.urlencode($last_name)
. '&STREET='.urlencode($order->billing_address_1)
. '&CITY='.urlencode($order->billing_city)
. '&STATE='.urlencode($order->billing_state)
. '&ZIP='.urlencode($order->billing_zip)
. '&COUNTRYCODE=US&CURRENCYCODE=USD';
$response = hash_call('doDirectPayment', $nvp_query_string);
if (strpos(strtoupper($response['ACK']), 'SUCCESS') !== false) {
// Product purchase was successful.
}
else {
// Product purchase was unsuccessful.
// The Paypal response will be in $response['ACK'].
// The Paypal error message to show the customer will be in $response['L_LONGMESSAGE0'].
}
Это не слишком элегантно, но определенно работает хорошо.
Кроме того, вам ОПРЕДЕЛЕННО нужен SSL-сертификат.Их можно приобрести примерно за 30 долларов за один домен.Поначалу их немного сложно настроить, но вы не можете пропустить этот шаг.Протокол SSL защищает передачу данных между компьютером клиента и вашим сервером, поэтому их CC-информация не может быть прочитана, поскольку она проходит через все серверы и маршрутизаторы (или перехватывается через Wi-Fi) по пути следования.Итак, просто убедитесь, что в форме, которую вы используете для получения информации CC, форма отправляется по протоколу https: //, а не по незащищенному http: //.
Другие советы
Я почти уверен, что несмотря ни на что, если ваш веб-сайт принимает конфиденциальные данные (т.е.номер кредитной карты), затем вам понадобится ssl-сертификат.Если только они не находятся на чьем-то другом сервере (paypal.com), вам нужно позаботиться об этом.И, как вы сказали, вы не хотите отправлять их в paypal.com, так что да, они вам понадобятся.
Кроме того, если у вас уже интегрирована экспресс-проверка, вы все равно должны использовать для этого ssl-сертификат, не так ли?