2010-06-08 25 views
5

Tôi đã thanh toán nhanh được tích hợp với ứng dụng Codeigniter của mình. Bây giờ tôi muốn tích hợp paypal liền mạch, nơi tôi thu thập các thông tin CC và vượt qua nó để Paypal (thông qua phụ trợ) và một khi tất cả mọi thứ được phê duyệt, ứng dụng của tôi cho thấy rằng với người dùng. Tất cả điều này với ra bao giờ đi đến trang web của Paypal.Thư viện chuyên nghiệp Paypal Payflow

Tôi biết rằng Paypal cung cấp một loạt mã mẫu nhưng họ có quá nhiều sản phẩm khác nhau quảng cáo để làm điều tương tự.

Có thư viện trình bao bọc nào trong PHP mà tôi có thể sử dụng để xử lý tất cả điều này không?

Quyết định thiết kế nào liên quan đến việc di chuyển sang hệ thống như vậy? Tôi có cần giấy chứng nhận SSL cho điều này không?

Trả lời

2

Tôi đã xây dựng một trang web thương mại điện tử trong CodeIgniter, cũng làm tích hợp Paypal liền mạch.

Dường như không có bất kỳ trình bao bọc theo hướng đối tượng suuuuuper-pretty nào ở đó khi tôi đi săn, nhưng tôi đã nhận thấy một số nỗ lực tốt.

Giải pháp của tôi đã kết thúc một chút nhạt nhẽo. Tôi tải về các API PHP từ đây: https://cms.paypal.com/cms_content/US/en_US/files/developer/PP_PHP_NVP_Samples.zip

Tôi đã lưu tập tin CallerService.php như application/helpers/paypal_helper.php và thêm nó vào application/config/autoload.php để kéo nó vào ứng dụng.

Hiện tại, CallerService.php yêu cầu constants.php, vì vậy bạn cần phải sao chép và dán vào hoặc bao gồm tệp constants.php trong thư mục người giúp đỡ của bạn. Tôi chỉ cần sao chép và dán. Sau đó, hãy chắc chắn định cấu hình tất cả các hằng số cho tài khoản của bạn.

Khi đã thiết lập, mã của tôi chỉ nhìn như thế này:

$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']. 
    } 

Nó không quá sang trọng, nhưng nó chắc chắn hoạt động tốt.

Ngoài ra, bạn chắc chắn cần có chứng chỉ SSL. Đây có thể được mua với giá $ 30 hoặc hơn cho một tên miền duy nhất. Ban đầu họ khó thiết lập một chút, nhưng bạn không thể bỏ qua bước này. SSL bảo vệ truyền tải giữa máy tính của khách hàng và máy chủ của bạn, vì vậy thông tin CC của họ không thể đọc được khi nó đi qua tất cả các máy chủ và bộ định tuyến (hoặc ngửi qua wifi) trên đường đi. Vì vậy, chỉ cần đảm bảo rằng, trên biểu mẫu bạn sử dụng để lấy thông tin CC, biểu mẫu gửi tới https: // chứ không phải http: // không an toàn.

+1

Cảm ơn Alan! Đó là những gì tôi đang tìm kiếm .. nó sẽ giúp tôi rất nhiều để bắt đầu từ suy nghĩ này và có lẽ tạo ra một lib wrapper tốt đẹp mà chúng tôi cũng có thể sử dụng trong các dự án CI trong tương lai. Nếu bạn có bất kỳ mẹo/gợi ý nào khác/những điều cần không rơi vào xin vui lòng cho tôi biết. – Obaid

0

Tôi khá chắc chắn rằng không có vấn đề gì nếu trang web của bạn đang lấy dữ liệu nhạy cảm (ví dụ: số thẻ tín dụng), sau đó bạn cần chứng chỉ ssl. Trừ khi họ đang trên máy chủ của người khác (paypal.com), bạn cần phải chăm sóc đó. Và, như bạn đã nói, bạn không muốn gửi chúng đến paypal.com, do đó, yeah, bạn sẽ cần một.

Ngoài ra, nếu bạn đã tích hợp thanh toán nhanh, bạn vẫn nên sử dụng chứng chỉ ssl cho điều đó, đúng không?

Các vấn đề liên quan