动态PayPal按钮加密

2022-08-30 22:58:53

我正在使用PHP和Mysql设计一个订单网站。在最后阶段,用户将获得PayPal按钮来支付他所做的订单。因此,项目名称,值是变量。这些值是变量,我不能使用PayPal加密按钮。在向用户显示之前,我必须使用未加密的按钮或对其进行加密。

出于安全原因,我希望对其进行加密。我想知道如何在我的服务器上执行此操作。


答案 1

您需要做的是相当复杂的,首先,介绍,PayPal加密按钮具有以下布局:

    <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
    business=contact@mybiz.com
    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 

请注意,这些是成对=值格式,有关完整参考,请查看此处:https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_Appx_websitestandard_htmlvariables

现在的理论是,要获得加密的字段,加密良好,您需要使用证书(x509证书)和私钥对这些值进行签名,然后您需要使用PayPal的公共证书加密此签名消息。

去练习,为了做到这一点,你可以(需要)使用以下两个PHP函数(OpenSSL扩展的一部分):openssl_pkcs7_sign和openssl_pkcs7_encrypt。

我发现最后一部分设置起来非常棘手,所以我建议你下载PHP SDK,以便在这里PayPal可用:https://www.x.com/community/ppx/sdks#WPST,直接在这里:https://cms.paypal.com/cms_content/US/en_US/files/developer/PP_PHP_WPS_Toolkit.zip,这个SDK带有EWPServices类,其中包含cryptitButton方法,它为您提供了非常简单的加密按钮;如果你想看骨头,那么看看PPCrypto类,它为你提供了signAndEncrypt方法,它只给你需要的字段加密字符串,并告诉你加密按钮的过程。

顺便说一句,如果您不知道如何获取证书和私钥(和/或PayPal的证书),请查看此处:https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_encryptedwebpayments#id08A3I0N30Y4


答案 2

从您的帖子中,您似乎对加密的含义以及将其应用于什么感到非常困惑。什么是威胁模型?(即它如何被颠覆)。

您不可能期望PayPal将始终处理您发送到客户端浏览器的订单。您必须检查PayPal处理了什么。

您可以在订单离开您的网站后更好地确保订单的完整性,例如,通过将订单的哈希值添加到您发送给PayPal的订单号(和盐!)。这应该允许您在不参考 PLU/存储订单的情况下验证订单(只要处理PayPal返回的脚本知道盐)。


推荐