php - 如果使用 GET 而不是 POST,则旧的 PayPal 结帐页面

标签 php post paypal get

我正在使用以下 PHP 代码来加密我传递给 PayPal 的帐单详细信息:

<?php
$MY_KEY_FILE = "my-prvkey.pem";
$MY_CERT_FILE = "my-pubcert.pem";
$PAYPAL_CERT_FILE = "paypal_cert.pem";
$OPENSSL = "/usr/bin/openssl";

$form = array(
    'cmd' => '_xclick',
    'cert_id' => 'HSFU5KJLFS8JD',
    'business' => 'example@icloud.com',
    'currency_code' => 'EUR',
    'no_shipping' => '1',
    'charset' => 'utf-8',
    'lc' => 'DE',
    'item_name' => 'Test',
    'amount' => '4.20',
    'return' => 'http://www.example.com/success.php',
    'cancel_return' => 'http://www.example.com/error.php',
);

$encrypted = paypal_encrypt($form);

function paypal_encrypt($hash)
{
    global $MY_KEY_FILE;
    global $MY_CERT_FILE;
    global $PAYPAL_CERT_FILE;
    global $OPENSSL;

if (!file_exists($MY_KEY_FILE)) {
    echo "ERROR: MY_KEY_FILE $MY_KEY_FILE not found\n";
}
if (!file_exists($MY_CERT_FILE)) {
    echo "ERROR: MY_CERT_FILE $MY_CERT_FILE not found\n";
}
if (!file_exists($PAYPAL_CERT_FILE)) {
    echo "ERROR: PAYPAL_CERT_FILE $PAYPAL_CERT_FILE not found\n";
}

$data = "";
foreach ($hash as $key => $value) {
    if ($value != "") {
    $data .= "$key=$value\n";
}
}

$openssl_cmd = "($OPENSSL smime -sign -signer $MY_CERT_FILE -inkey $MY_KEY_FILE "."-outform der -nodetach -binary <<_EOF_\n$data\n_EOF_\n) | "."$OPENSSL smime -encrypt -des3 -binary -outform pem $PAYPAL_CERT_FILE";

exec($openssl_cmd, $output, $error);

if (!$error) {
    return implode("\n",$output);
} else {
    return "ERROR: encryption failed";
}
};
?>

<!DOCTYPE html>
<html>
<body>
<form action="https://www.paypal.com/cgi-bin/webscr" method="get">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="encrypted" value=" <?php echo $encrypted;?>">
<input type="submit">
</form>
</body>
</html>

当点击提交按钮时,我将被重定向到 PayPal 并可以进行付款。

我可以使用 method="post"method="get" 发送表单数据。

如果我将我的代码与 method="post" 一起使用,我将被重定向到如下所示的页面:

PayPal checkout with method="post"

当使用完全相同的代码但将 method="post" 更改为 method="get" 时,我被重定向到如下页面:

PayPal checkout with method="get"]

这看起来并不漂亮。我更喜欢第一个,我认为我的客户也会这样做。

有人知道我该如何解决吗?我做错了什么?

最佳答案

我也在 Freelancer 网站上看到了你的问题。对于 HTTP GET 的要求: PayPal 从 2017 年 6 月起停止使用 HTTP GET。 https://www.paypal.com/au/webapps/mpp/discontinuation-get-method

关于php - 如果使用 GET 而不是 POST,则旧的 PayPal 结帐页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42608020/

相关文章:

php - 全方位支付产品系列

paypal - PayPal 是针对位于德国的点对点在线市场的解决方案吗?

javascript - PDFbox 可以在 html、php 和 javascript 中使用吗?

php - 在 Zend Framework 中关闭 MySQL 连接(或 "Too many connections"解决方案)

java - 如何使用 selenium 下载 POST 响应文件

php - 防止 PHP 在 POST 之前运行

已发送付款的 PayPal 通知

php - while 循环中第一个数据丢失

php - 订购 mysql 查询?

python - 属性错误 : 'bytes' object has no attribute 'encode' ; base64 encode a pdf file