2010-06-08 5 views
5

У меня уже есть экспресс-проверка, интегрированная с моим приложением Codeigniter. Теперь я хочу интегрировать бесшовные paypal, где я собираю информацию CC и передаю ее Paypal (через бэкэнд), и как только все будет одобрено, мое приложение показывает это пользователю. Все это, когда-либо выходящее на веб-сайт Paypal.Paypal Payflow pro library

Я знаю, что Paypal дает кучу образца кода, но у них так много разных продуктов, которые рекламируют, чтобы делать то же самое.

Есть ли какая-либо библиотека-оболочка в PHP, которую я могу использовать для обработки всего этого?

Какое дизайнерское решение принимает участие в переходе на такую ​​систему? Мне нужны сертификаты SSL для этого?

ответ

2

Я построил сайт электронной коммерции в CodeIgniter, также делая бесшовную интеграцию Paypal.

Там, казалось, не было каких-либо объектно-ориентированных оболочек suuuuuper, когда я делал свою охоту, но я заметил некоторые хорошие попытки.

Мое решение оказалось немного мягким. Я скачал 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.phpconstants.php, поэтому вам необходимо скопировать и вставить его или включить файл constants.php в каталог ваших помощников. Я просто скопировал и вставил. Затем обязательно настройте все константы для своей учетной записи.

Как только это установлено, мой код выглядел как это:

$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: //.

+1

Спасибо Алан! Это то, что я искал .. это очень помогло бы мне начать с этой мысли и, возможно, создать красивую обертку lib, которую мы также можем использовать в будущих проектах CI. Если у вас есть другие советы/подсказки/вещи, чтобы не упасть, пожалуйста, дайте мне знать. – Obaid

0

Я уверен, что независимо от того, что, если ваш веб-сайт принимает конфиденциальные данные (например, номер кредитной карты), вам нужен сертификат ssl. Если они не находятся на чужом сервере (paypal.com), вам нужно позаботиться об этом. И, как вы сказали, вы не хотите отправлять их на paypal.com, так что да, вам это понадобится.

Кроме того, если у вас уже есть экспресс-проверка, вы должны использовать сертификат ssl для этого, так или иначе?

Смежные вопросы