[英]PayPal Encrypted Payments Not Working PHP APACHE XAMPP
我这里有一些无法运行的代码。
这里的关键问题是通过 PHP 中的 exec 命令进行 SSL 加密。
<< EOF \\n$data\\n_EOF_\\n 部分会导致问题,因为它会导致加密失败。 我已经尝试了没有 << EOF \\n$data\\n_EOF_\\n 的其余命令,它工作正常。
笔记:
我在 Windows 10、XAMPP 控制面板 v3.2.2、PHP 和 Apache 上运行。
这是个人电脑。
它具有 XAMPP 的完整安装。
OpenSSL 已启用。
PHP 安全模式被禁用。
OpenSSL 和证书文件的路径是正确的。
我对这个问题做了很多研究,但找不到可靠的解决方案。 我将不胜感激! 谢谢!
$types = array('bronze','silver','gold','platinum','diamond');
if(!in_array($_GET['type'],$types)) {
die('<error />');
}
$type = $_GET['type'];
if($type == 'bronze') {
$amount = '15.00';
} elseif ($type == 'silver') {
$amount = '25.00';
} elseif ($type == 'gold') {
$amount = '50.00';
} elseif ($type == 'platinum') {
$amount = '75.00';
} elseif ($type == 'diamond') {
$amount = '100.00';
}
#Discount Rate
$discount_rate = '0';
$IPN_URL = 'https://www.example.net/paypal/ipn';
$PAYPAL_CERT_FILE = 'C:\\xampp\\example.net\\paypal\\paypal_cert.pem';
$MY_KEY_FILE = 'C:\\xampp\\example.net\\paypal\\prvkey.pem';
$MY_CERT_FILE = 'C:\\xampp\\example.net\\paypal\\pubcert.pem';
$OPENSSL = 'C:\\xampp\\apache\\bin\\openssl.exe';
$form = array(
'cmd' => '_xclick',
'amount' => $amount,
'item_number' => explode('"',$userinfo['external_auth'])[3],
'discount_rate' => $discount_rate,
'item_name' => ucfirst($type).' EXAMPLE :: TEST',
'notify_url' => $IPN_URL,
'business' => 'example@live.ca',
'cert_id' => 'SOME_ID_HERE',
'currency_code' => 'USD',
'no_shipping' => '1'
);
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";
}
//Assign Build Notation for PayPal Support
$hash['bn']= 'domain.PHP_EWP2';
$data = "";
foreach ($hash as $key => $value) {
if ($value != "") {
$data .= "$key=".escapeshellcmd($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";
}
};
$encrypted = paypal_encrypt($form);
die('<success />'.$encrypted);
编辑:
我使用https://www.stellarwebsolutions.com/en/articles/paypal_button_encryption_php.php作为指南。
如果您使用的是 xampp 并且您的通知 url 中包含“localhost”,则您处于另一个级别。 如果您有一个域屏蔽了您的 xampp 服务器,则不能使用该 url。 您的通知网址必须是 IP 地址。 ;) 只知道我回来告诉你。 只是自己想出来的。 如果有帮助,请通过贝宝捐赠给 foziazzubaidi@gmail.com 哈哈。 如果没有,我已经制作网站十年了。 给我发电子邮件,我很乐意提供帮助。
和平!!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.