php - PayPal 加密付款不起作用 PHP APACHE XAMPP

标签 php paypal openssl xampp payment

我这里有一些代码无法运行。

这里的关键问题是通过 PHP 中的 exec 命令进行 SSL 加密。

<<EOF\n$data\n_EOF_\n 部分会导致问题,因为它会导致加密失败。我已经尝试了命令的其余部分,没有 <<EOF\n$data\n_EOF_\n 并且工作正常。

注释:

  1. 我在 Windows 10、XAMPP 控制面板 v3.2.2、PHP 和 Apache 上运行。

  2. 这是一台个人计算机。

  3. 它已完整安装 XAMPP。

  4. OpenSSL 已启用。

  5. PHP 安全模式已禁用。

  6. 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' => '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="204558414d504c45604c4956450e4341" rel="noreferrer noopener nofollow">[email protected]</a>',
                '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。您的通知 URL 必须是 IP 地址。 ;)只知道我回来是为了告诉你这一点。我自己刚刚弄清楚。如果有帮助,请捐赠至[email protected]通过paypal哈哈。如果没有的话,我制作网站已经有十年了。给我发电子邮件,我很乐意提供帮助。

和平!!!

关于php - PayPal 加密付款不起作用 PHP APACHE XAMPP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34781832/

相关文章:

PayPal - 无效的资源 ID 使用沙箱 txn_id 通过 rest api 查询销售详细信息

php - 您可以再使用 PayPal Php SDK 进行直接信用卡支付吗?

php - PayPal Webhook 不发送 POST 数据

使用 Websockets 服务器的 SSL/TLS - go lang

php - Apache 服务器抛出 500 内部服务器错误

php - 无法在嵌套 foreach 循环中多次循环遍历 mysql 结果

php - 在 Yii/PHP 中跟踪未登录的用户

php - jQuery、JSON、PHP 和 gMap

cryptography - Go 中的加密库与 OpenSSL 相比如何?

linux - 如何删除openssl库依赖