openssl命令不起作用,所以我可以使用php openssl函数

时间:2014-02-28 10:51:42

标签: php openssl

我想我已经两次问了这个问题,没有人甚至不愿意这样看。请帮助我,并在忘记问题之前尝试至少考虑一下。 所以我正在学习本教程:http://www.stellarwebsolutions.com/en/articles/paypal_button_encryption_php.php当我使用他们的代码并插入所有与我不同的东西时,我运行代码并从paypal“无法解密证书ID”获得错误消息。经过一番研究后,我发现代码中的函数返回“ERROR:Encryption failed”。我认为错误是由以下代码引起的:

$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";
}

有没有办法将此openssl命令转换为openssl_something();来电?我非常感谢任何帮助。这是完整的代码和另一个注释:请不要对主题进行愚蠢的评论,例如问题很糟糕,e.t.c。 :

<?php
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);
?>
<HTML>
<?php
//Sample PayPal Button Encryption: Copyright 2006-2010 StellarWebSolutions.com
//Not for resale  - license agreement at
//http://www.stellarwebsolutions.com/en/eula.php
//Updated: 2010 02 01

# private key file to use
$MY_KEY_FILE = "my-prvkey.pem";

# public certificate file to use
$MY_CERT_FILE = "my-pubcert.pem";

# Paypal's public certificate
$PAYPAL_CERT_FILE = "paypal_cert_pem.txt";

# path to the openssl binary
$OPENSSL = "/usr/bin/openssl";


$form = array('cmd' => '_xclick',
        'business' => 'naclo3samuel@gmail.com',
        'cert_id' => 'PRIVACY?',
        'lc' => 'RU',
        'custom' => 'test',
        'invoice' => '',
        'currency_code' => 'USD',
        'no_shipping' => '1',
        'item_name' => 'Donation',
        'item_number' => '1',
    'amount' => '10'
    );


    $encrypted = paypal_encrypt($form);


function paypal_encrypt($hash)
{
    //Sample PayPal Button Encryption: Copyright 2006-2010 StellarWebSolutions.com
    //Not for resale - license agreement at
    //http://www.stellarwebsolutions.com/en/eula.php
    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']= 'StellarWebSolutions.PHP_EWP2';

    $data = "";
    foreach ($hash as $key => $value) {
        if ($value != "") {
            //echo "Adding to blob: $key=$value\n";
            $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";
    }
};
?> 
<HEAD>
<LINK REL=stylesheet HREF="/styles/stellar.css" TYPE="text/css">
<TITLE>PHP Sample Donation using PayPal Encrypted Buttons</TITLE>
</HEAD>
<BODY bgcolor=white>
<TABLE border=0>
<TR><TD align=center>
<h1>Sample Donation Page</h1>
<P>This page uses encrypted PayPal buttons for your security.</P>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target=_blank>
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="encrypted" value="
<?PHP echo $encrypted; ?>">
<input type="submit" value="Donate $10">
</form>
<P><SMALL>(PayPal will open in a new window for demonstration purposes.)</SMALL></P>
</TD></TR></TABLE>
</BODY>

</HTML>

1 个答案:

答案 0 :(得分:1)

那么,这是我的答案;)您可能遇到safe_mode的问题,这会阻止您的代码执行openssl二进制文件。