【问题标题】:Create dynamic PayPal buy now button in PHP在 PHP 中创建动态 PayPal 立即购买按钮
【发布时间】:2015-05-09 11:19:21
【问题描述】:

目前我正在使用 PayPal 按钮来接收用户的付款。我有一个网站可以自动计算特定商品的邮费,我想更新 PayPal 页面上的成本以反映运费。我该如何做到这一点?

我认为应该有一种方法可以在 PayPal 中动态创建加密的 PayPal“立即购买”按钮,然后将该表单显示给用户,但有关如何执行此操作的文档很分散。

如果可能,我想避免在数据库中记录交易并进行验证。我只想要一个 PayPal 按钮,我可以安全地更改运费,不允许用户手动设置费用。

【问题讨论】:

    标签: php paypal paypal-buttons


    【解决方案1】:

    按照说明创建 PayPal 证书:https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/encryptedwebpayments/#id08A3I0P20E9

    在 PHP 中:

    define('OPENSSL', '/usr/bin/openssl');
    
    class PayPal {
        public function __construct() {
            $this->key_file = 'my-prvkey.pem';
            $this->cert_file = 'my?pubcert.pem';
            $this->paypal_key = 'paypal_cert.pem';
            $this->button = array(
                'cert_id' => 'YOUR CERT ID',
                'cmd' => '_xclick',
                'business' => 'YOUR PAYPAL EMAIL',
                'lc' => 'US',
                'item_name' => 'ITEM NAME',
                'amount' => 'X',
                'currency_code' => 'USD',
                'button_subtype' => 'services',
                'no_note' => '0',
                'bn' => 'PP-BuyNowBF:btn_buynow_LG.gif:NonHostedGuest'
            );
        }
    
        public function create_form($shipping) {
            $this->button['shipping'] = $shipping;
            return '<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top"><input name="cmd" type="hidden" value="_s-xclick" />
    <input name="encrypted" type="hidden" value="'.$this->encrypt().'" />
    <input type="image" src="https://www.paypalobjects.com/en_AU/i/btn/btn_buynow_LG.gif" border="0" name="submit" alt="PayPal — The safer, easier way to pay online.">
    <img src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" alt="" width="1" height="1" border="0" /></form>';
        }
    
        private function encrypt() {
            $data = '';
            foreach ($this->button as $key => $value) {
                if ($value) $data .= "$key=$value\n";
            }
    
            $cmd = '('.OPENSSL." smime -sign -signer {$this->cert_file} -inkey {$this->key_file} " .
                "-outform der -nodetach -binary <<_EOF_\n{$data}\n_EOF_\n) | " .
                OPENSSL." smime -encrypt -des3 -binary -outform pem {$this->paypal_key}";
    
            exec($cmd, $output, $error);
            return implode("\n", $output);
        }
    }
    

    然后输出动态的PayPal表单:

    $paypal = new Paypal();
    echo $paypal->create_form(20);
    

    【讨论】:

      【解决方案2】:

      考虑使用被 PayPal 收购的 Braintree 来实现更简化的 PayPal。

      要回答您的问题,您应该在将购买数据发送到 PayPal 之前进行邮资计算,以便用户确认最终金额。

      我不熟悉这些按钮,但它们的实现需要考虑到运费的波动。

      显然,在用户确认较低/不同的价格后,PayPal 将不允许更改价格。

      【讨论】:

      • Braintree 似乎并不容易。我已经有邮资计算,我想知道如何将购买数据发送到 PayPal。这就是我的问题。
      • 代码不相关。我正在寻找可以创建按钮或将用户重定向到 PayPal 结帐页面的代码。一个 API、一个库、任何东西。 PayPal 文档太差了,让人无法忍受。
      • 我会再次建议您看看 Braintree 的 PayPal php 库。非常简单。
      • 可能是这样,但由于业务限制,我目前无法使用Braintree。我专门寻找 PayPal 解决方案,而不是 Braintree PayPal 解决方案。
      猜你喜欢
      • 2014-12-18
      • 1970-01-01
      • 2013-01-03
      • 2016-09-22
      • 2014-10-05
      • 2023-03-24
      • 2011-07-17
      • 2015-08-06
      • 2014-08-03
      相关资源
      最近更新 更多