2010-11-05 32 views
16

Tôi đang thiết kế Trang web đặt hàng bằng cách sử dụng PHP & Mysql. Trong giai đoạn cuối cùng người dùng được cung cấp các nút Paypal để thanh toán cho các Đơn đặt hàng mà anh đã thực hiện. Vì vậy, Tên mục, Giá trị là các biến. Các giá trị này là biến, tôi không thể sử dụng nút được mã hóa từ Paypal. Tôi sẽ phải sử dụng một nút không được mã hóa hoặc mã hóa nó trước khi hiển thị nó cho người dùng.Mã hóa nút Paypal động

Tôi muốn mã hóa nó vì lý do bảo mật. Tôi muốn biết làm thế nào để làm điều đó trên máy chủ của tôi.

Trả lời

2

có thể bạn có thể thử đặt các biến đó vào bảng tạm thời bằng id duy nhất. sau đó sử dụng id đó cho các nút. truy vấn các biến từ bảng bất cứ khi nào khách hàng nhấp vào nút paypal. Tôi chỉ hy vọng tôi hiểu tuyên bố của bạn ngay xD

1

Cách duy nhất bạn có thể làm điều này là tự động truy vấn PayPal để mã hóa nút mỗi lần.

Tuy nhiên phương pháp này không hiệu quả, tôi nghĩ sẽ tốt hơn nếu sử dụng PayPal IPN. Có rất nhiều ví dụ và lớp học trực tuyến về cách thực hiện điều này.

+0

Tôi nghĩ IPN có thể là cách để giải quyết vấn đề này. Hoặc là nút đó hoặc nút tùy chỉnh. Tôi sẽ xem xét kỹ hơn ... –

+2

Lưu ý: IPN sẽ kiểm tra sau khi thanh toán, vì vậy bạn sẽ vẫn có các trường hợp bạn nhận được một khoản thanh toán giả mạo. Mặc dù họ không nhận được sản phẩm, có vẻ như một chút lộn xộn bởi vì bạn sẽ bị giả mạo thanh toán nhận được gửi cho bạn mỗi một lần trong một thời gian. –

29

Những gì bạn cần làm là khá phức tạp, đầu tiên, giới thiệu, các nút paypal được mã hóa có cách bố trí như sau:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> 
<input type="hidden" name="cmd" value="_s-xclick"> 
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIIEQYJKo...Encrypted stuff...IF5ioje8JH0LAA+5U7P+tabAMOL37k=-----END PKCS7-----"> 
<input type="image" src="https://www.paypalobjects.com/es_XC/MX/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal, la forma más segura y rápida de pagar en línea."> 
<img alt="" border="0" src="https://www.paypalobjects.com/es_XC/i/scr/pixel.gif" width="1" height="1"> 
    </form> 

Trường cmd chỉ ra một nút Mua ngay được mã hóa (kiểm tra các giá trị cho các nút bạn muốn tạo), và các lĩnh vực mã hóa là nội dung thực tế của các nút trong cách bố trí như sau:

cert_id=ZQCMJTZS27U4F 
    cmd=_xclick 
    [email protected] 
    item_name=Handheld Computer 
    item_number=1234 
    custom=sc-id-789 
    amount=500.00 
    currency_code=USD 
    tax=41.25 
    shipping=20.00 
    no_note=1 
    cancel_return=http://www.company.com/cancel.htm 

Lưu ý, đây là những định dạng cặp = giá trị, đối với một tài liệu tham khảo cái nhìn đầy đủ ở đây: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_Appx_websitestandard_htmlvariables. Bây giờ lý thuyết, để có được trường mã hóa, mã hóa tốt, bạn cần ký các giá trị này với chứng chỉ của bạn (chứng chỉ x509) và khóa riêng, sau đó bạn cần mã hóa thông báo đã ký này bằng chứng chỉ công khai của paypal.

Đi thực hành, để thực hiện điều đó, bạn có thể (cần) sử dụng hai hàm PHP sau (một phần của phần mở rộng OpenSSL): openssl_pkcs7_sign và openssl_pkcs7_encrypt.

Tôi thấy phần cuối này rất phức tạp để thiết lập, vì vậy tôi khuyên bạn nên tải xuống PHP SDK cho PayPal avalaible tại đây: https: // www.x.com/ community/ppx/sdks # WPST và trực tiếp tại đây: https://cms.paypal.com/cms_content/US/en_US/files/developer/PP_PHP_WPS_Toolkit.zip , SDK này đi kèm với lớp EWPServices chứa phương thức encryptButton cung cấp cho bạn nút mã hóa khá dễ dàng; nếu bạn muốn xem xét các xương thì hãy tìm trong lớp PPCrypto, người cung cấp cho bạn phương thức signAndEncrypt chỉ cung cấp cho bạn chuỗi được mã hóa mà bạn cần cho trường và hiển thị cho bạn quá trình mã hóa nút.

+2

Nhân tiện, nếu bạn không biết cách lấy chứng chỉ và khóa riêng của bạn (và/hoặc chứng chỉ của Paypal), hãy xem tại đây: https://cms.paypal.com/us/cgi-bin/?cmd= _render-content & content_ID = developer/e_howto_html_encryptedwebpayments # id08A3I0N30Y4 – Rafael

+0

Hướng dẫn này cũng hữu ích: http://www.stellarwebsolutions.com/en/articles/paypal_button_encryption_php.php – curtisblackwell

+5

Giải pháp tốt nhất. Nên được đánh dấu là câu trả lời. Trên thực tế cho biết làm thế nào để tự động mã hóa các nút paypal. –

4

Từ bài đăng của bạn, bạn có vẻ rất bối rối về ý nghĩa của mã hóa và những gì để áp dụng nó. Mô hình mối đe dọa là gì? (nghĩa là làm thế nào nó có thể bị lật đổ).

Không có cách nào bạn nên mong đợi rằng paypal sẽ luôn xử lý đơn đặt hàng bạn đã gửi đến trình duyệt của khách hàng. Bạn PHẢI kiểm tra những gì Paypal đã xử lý.

Bạn có thể yên tâm hơn về tính toàn vẹn của đơn hàng sau khi rời khỏi trang web của bạn, ví dụ: bằng cách thêm một băm của đơn đặt hàng vào số thứ tự (và một muối!) bạn gửi đến Paypal. Điều này sẽ cho phép bạn xác minh thứ tự mà không cần tham chiếu đến lệnh PLU/được lưu trữ (miễn là tập lệnh xử lý trả lại từ paypal biết muối).

+0

Rực rỡ. Tôi đã không nghĩ về điều này khi tôi đăng câu hỏi này đã đóng cửa trên tôi (http://stackoverflow.com/q/14489512/105539). Vì vậy, chỉ cần sử dụng biến 'tùy chỉnh' và, trong số những thứ khác người ta có thể cần phải đặt trong đó, thêm như md5 ($ sSalt. $ SProduct. $ SPrice) và đảm bảo chúng xếp hàng trong quy trình IPN. – Volomike

+1

Đây không phải là giải pháp mà người hỏi đang tìm kiếm. Có lẽ anh ấy đã làm điều này. Lý do cho một nút mã hóa sẽ làm giảm đáng kể mối đe dọa ở nơi đầu tiên bằng cách làm cho nó rất khó khăn để gửi thanh toán giả mạo ở nơi đầu tiên. –

2

Tôi đã phát triển một số PHP integration toolkit with PayPal Website Payments Standard.

Tất cả các vấn đề bạn đã đề cập ở đây được xử lý bên trong bởi các lớp trợ giúp. Một số cấu hình cơ bản được cung cấp để thiết lập dễ dàng. Ví dụ, tất cả các biến mã hóa (khóa riêng của bạn, chứng chỉ công cộng, ...) và tùy thuộc vào cấu hình. Bài viết giải thích chi tiết cách sử dụng các lớp.

PS: Chỉ xác nhận IPN được thực hiện bởi các lớp trợ giúp.

0

Không ai có địa chỉ email paypal của bạn gửi cho bạn một hóa đơn không có thật, yêu cầu tên sản phẩm với giá sai? Nếu họ sẽ đi qua những rắc rối của việc thay đổi mã js/html của bạn để gửi cho bạn một hóa đơn không có thật ... họ chỉ có thể viết riêng của họ (chỉ là một hình thức gửi đến 'paypal.com/cgi-bin/webscr'). Tất cả những gì bạn thực sự cần là email paypal của người bán phải không?

Vậy tại sao tất cả sự cố mã hóa nút?

+0

Bất cứ ai cũng có thể nhấn phím 'F12' tại trang thanh toán trong trình duyệt của họ, sau đó chỉnh sửa HTML theo yêu cầu. Giảm số tiền là một trong những rõ ràng, và trừ khi bạn kiểm tra một trận đấu trước khi vận chuyển (khuyến cáo của PayPal), họ đã có nó rẻ hơn. Ngay cả khi bạn bắt gặp sự khác biệt, bạn đang mắc kẹt với việc phải tranh chấp với khách hàng và có thể hoàn lại tiền. Với các nút được mã hóa, tất cả các thông tin cần thiết được ngăn cản giả mạo và trong tùy chọn PayPal của bạn, bạn chỉ có thể cho phép các nút được mã hóa, ngăn chặn các tình huống của bạn. – Patanjali

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