php - 在 PHP 中创建动态 PayPal 立即购买按钮

标签 php paypal paypal-buttons

目前我正在使用 PayPal 按钮接收用户的付款。我有一个网站可以自动计算特定商品的邮费,我想更新 PayPal 页面上的费用以反射(reflect)运费。我该如何实现?

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

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

最佳答案

按照说明创建 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);

关于php - 在 PHP 中创建动态 PayPal 立即购买按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28922736/

相关文章:

php - Yii RESTful 认证

php - 显示 cookie 数组中的 3 个值?

php - 在引导模式框中加载远程数据之前添加等待消息

php - PayPal Express Checkout - 扣除金额的自定义文本

c# - 我们目前无法使用您的 PayPal 帐户处理您的付款

paypal - 使用 Paypal javascript按钮时按钮数据不显示

php - 在 Slim DI 服务中传递参数

paypal - 非托管 Paypal 立即购买按钮的数量没有改变

Paypal 'Pay now' 按钮与 wordpress 中的联系表