2010-11-05 63 views
16

我正在設計一個訂購網站使用PHP & Mysql。在最後階段,用戶被給予貝寶按鈕來支付他所做的訂單。所以,項目名稱,值是變量。 這些值是變量,我不能使用貝寶的加密按鈕。我必須使用非加密按鈕或在將其顯示給用戶之前對其進行加密。動態貝寶按鈕加密

爲安全起見,我希望對其進行加密。我想知道如何在我的服務器上做到這一點。

回答

2

也許你可以嘗試把這些變量放在一個具有唯一ID的臨時表中。然後使用該ID作爲按鈕。每當客戶點擊貝寶按鈕時查詢表中的變量。我只希望我能理解你的陳述權xD

1

你可以做到這一點的唯一方法是動態查詢貝寶每次加密按鈕。

但是這種方法效率不高,我認爲使用PayPal IPN會好得多。網上有很多關於如何做到這一點的例子和課程。

+0

我認爲IPN可能是解決這個問題的方法。要麼是自定義按鈕。我會進一步研究它... – 2011-08-01 18:08:30

+2

注意:IPN會在付款後進行檢查,因此您仍然會遇到發送篡改付款的情況。雖然他們沒有收到產品,但看起來有點混亂,因爲您偶爾會篡改付款發送給您。 – 2013-08-28 19:17:15

29

你需要做的是相當複雜的,第一,介紹,貝寶加密按鈕具有以下佈局:

<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> 

CMD字段表示加密的立即購買按鈕(檢查值的按鈕,你要創建),和加密領域是按鈕的佈局如下的實際內容:

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 

注意,這些都是在對= value的格式,一個完整的參考看看這裏:https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_Appx_websitestandard_htmlvariables

現在理論上,要獲得加密字段,加密很好,您需要用您的證書(x509證書)和您的私鑰簽署這些值,然後您需要使用貝寶的公共證書對此簽名的消息進行加密。實踐中,您可以(需要)使用以下兩個PHP函數(OpenSSL擴展的一部分):openssl_pkcs7_sign和openssl_pkcs7_encrypt。

我發現這最後一部分設置非常棘手,所以我建議您下載適用於PayPal的PHP SDK:http://www.x.com/ community/ppx/sdks#WPST並直接在此處:https://cms.paypal.com/cms_content/US/en_US/files/developer/PP_PHP_WPS_Toolkit.zip ,這個SDK附帶包含方法encryptButton的EWPServices類,它給你加密的按鈕很容易;如果你想看看骨頭,那麼看看PPCrypto類,它爲你提供了signAndEncrypt方法,它只給你這個字段所需的加密字符串,並向你顯示加密按鈕的過程。

+2

順便說一下,如果你不知道如何獲得你的證書和你的私鑰(和/或貝寶的證書),請看這裏:https://cms.paypal.com/us/cgi-bin/?cmd= _render含量&CONTENT_ID =顯影劑/ e_howto_html_encryptedwebpayments#id08A3I0N30Y4 – Rafael 2011-07-31 01:30:28

+0

本教程也是有幫助的:http://www.stellarwebsolutions.com/en/articles/paypal_button_encryption_php.php – curtisblackwell 2013-06-28 08:21:57

+5

最佳解決方案。應該標記爲答案。實際上講述瞭如何動態加密貝寶按鈕。 – 2013-08-28 19:19:18

4

從你的文章看來,你對加密手段以及應用方法似乎非常困惑。什麼是威脅模型? (即如何被顛覆)。

您不應該期望貝寶將永遠處理您發送到客戶端瀏覽器的訂單。你必須檢查貝寶的處理過程。

您可以更好地確定訂單離開您的網站後的完整性,例如,通過將訂單的散列添加到您發送給PayPal的訂單號(和鹽!)中。這應該允許您在不參考PLU /存儲的訂單的情況下驗證訂單(只要處理從PayPal返回的腳本知道鹽)。

+0

輝煌。當我發佈這個關於我的問題時,我沒有想到這個問題(http://stackoverflow.com/q/14489512/105539)。因此,只需使用'custom'變量,並且可能需要在其中添加像md5($ sSalt。$ sProduct。$ sPrice)並確保它們在IPN進程中排隊。 – Volomike 2013-01-24 12:57:27

+1

這不是提問者尋找的解決方案。他可能已經在做這個。加密按鈕的原因將首先通過非常難以發送篡改付款來大大減少威脅。 – 2013-08-28 19:21:02

2

我公司開發的PHP integration toolkit with PayPal Website Payments Standard

所有你在這裏提到的問題是由輔助類內部處理。提供了一些基本配置以便於設置。例如,所有加密變量(您的私鑰,公共證書,...)和受限制的配置。文章詳細解釋瞭如何使用這些類。

PS:只有IPN確認由輔助類實現的。

0

無法與任何人您的PayPal的電子郵件地址向您發送僞造的發票,在錯誤的價格詢問產品名稱?如果他們要經歷改變你的js/html代碼給你發送虛假髮票的麻煩......他們可以寫自己的(只是提交給'paypal.com/cgi-bin/webscr'的表單)。你真正需要的是賣家的PayPal電子郵件嗎?

那麼爲什麼加密按鈕的所有麻煩?

+0

任何人都可以在瀏覽器的付款頁面按'F12'鍵,然後根據需要編輯HTML。降低金額是顯而易見的,除非您在發貨前檢查比賽(由PayPal推薦),否則便宜。即使您發現了這種差異,您仍然不得不與客戶發生爭議,並可能會退還款項。使用加密按鈕,所有重要信息都不會被篡改,並且在您的PayPal偏好設置中,您只能允許加密的按鈕,以防止出現您的情況。 – Patanjali 2018-01-27 00:24:57