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";
}
if (!file_exists($OPENSSL)) {
echo "ERROR: OPENSSL $OPENSSL not found\n";
}
//Assign Build Notation for PayPal Support
//$hash['bn']= 'StellarWebSolutions.PHP_EWP';
$openssl_cmd = "$OPENSSL smime -sign -signer $MY_CERT_FILE -inkey
$MY_KEY_FILE " .
"-outform der -nodetach -binary | $OPENSSL smime -encrypt " .
"-des3 -binary -outform pem $PAYPAL_CERT_FILE";
$descriptors = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
);
$process = proc_open($openssl_cmd, $descriptors, $pipes);
if (is_resource($process)) {
foreach ($hash as $key => $value) {
if ($value != "") {
//echo "Adding to blob: $key=$value\n";
fwrite($pipes[0], "$key=$value\n");
}
}
fflush($pipes[0]);
fclose($pipes[0]);
$output = "";
while (!feof($pipes[1])) {
$output .= fgets($pipes[1]);
}
//echo $output;
fclose($pipes[1]);
$return_value = proc_close($process);
return $output;
}
return "ERROR";
};
以上,利用 pipe,proc_open
做到了執行外部程式及讀回結果
相信解決了同步問題
而我的問題是,我要把這段程式,改寫成不必呼叫外部 openssl 的純PHP版本
(php 有 openssl 系列指令呀!!)
因為這還要跨足到密碼學 及 PayPal 付費機制
所以我也沒把握在這兒能問到答案
只好希望本板臥虎藏龍..
而且對於傳哪些參數進 openssl ,我是怎麼看覺得怎麼怪
搞不懂為什麼要把自己的私鑰都給傳進去
怪,非常怪.. Orz
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.219.65.16
先聲明,這是我的作業
但剛好可以回答這個問題
回答完後,我自己的問題還沒解決
所以我其實是想問做業的
(當然我最後得自己解決啦,畢竟景氣不好,做不出來就等死吧..)
----
sample code 來自於某網站
我還沒看懂
function paypal_encrypt($hash)
{
//Sample PayPal Button Encryption: Copyright 2006,2007
StellarWebSolutions.com
//Not for resale - license agreement at
//