动态Paypal按钮加密

问题描述 投票:17回答:6

我正在使用PHP和Mysql设计订单站点。在最后阶段,用户被给予Paypal按钮以支付他所做的订单。因此,项目名称,值是变量。这些值是变量,我不能使用Paypal的加密按钮。我必须使用非加密按钮或在将其显示给用户之前对其进行加密。

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

php paypal
6个回答
2
投票

也许您可以尝试将这些变量放在具有唯一ID的临时表中。然后使用该ID作为按钮。每当客户点击paypal按钮时,从表中查询变量。我希望我理解你的陈述是正确的xD


31
投票

你需要做的是相当复杂,首先,介绍,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
    [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 

注意,这些都是pair = value格式,完整参考一下: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。

我发现这最后一部分设置起来非常棘手,所以我建议你在这里下载适用于PayPal的PHP SDK: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类,它包含了encryptButton方法,它为你提供了加密的按钮简单;如果您想查看骨骼,请查看为您提供signAndEncrypt方法的PPCrypto类,该方法仅为您提供该字段所需的加密字符串,并向您显示加密按钮的过程。

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


4
投票

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

您无法期望paypal始终处理您发送到客户端浏览器的订单。你必须检查Paypal的处理过程。

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


2
投票

我开发了一个PHP integration toolkit with PayPal Website Payments Standard

你在这里提到的所有问题都是由辅助类处理的。提供了一些基本配置以便于设置。例如,所有加密变量(您的私钥,公共证书......)并受配置限制。本文详细介绍了如何使用这些类。

PS:助手类只实现IPN确认。


1
投票

您可以执行此操作的唯一方法是每次动态查询PayPal以加密按钮。

然而,这种方法效率不高,我认为使用PayPal IPN要好得多。有很多关于如何执行此操作的示例和类。


0
投票

你的PayPal电子邮件地址的任何人都不能向你发送虚假发票,要求错误的产品名称?如果他们要经历更改你的js / html代码以向你发送虚假发票的麻烦......他们可以自己编写(只是提交给'paypal.com/cgi-bin/webscr'的表单)。你真正需要的是卖家的paypal电子邮件吗?

那么为什么加密按钮的麻烦呢?

© www.soinside.com 2019 - 2024. All rights reserved.