IPN を使用して「今すぐ購入」(PayPal アカウントに保存されていない) 動的ボタンを実装しましたが、正常に動作します (そうです!)。
誰かがファイアバグで (たとえば) 金額を変更した場合、私の IPN リスナーが金額に問題があると言った場合でも、取引はペイパルに対して有効であるため、今、私は彼のセキュリティに疑問を持っています。
私の質問は、「フォームを php / codeigniter ライブラリで暗号化できますか?」です。
IPN リスナーで金額を確認しようとしましたが、paypal での取引は正しく続行され、IPN からブロックされていないためです。
ここに、私のリスナー コードの一部があります。
private function isVerifiedIPN(){
$req = 'cmd=_notify-validate';
$posts = $this->input->post();
foreach ($posts as $key => $value){
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
if($this->config->item('SIMULATION'))
$url = $this->config->item('SIMULATION_URL');
else
$url = $this->config->item('PRODUCTION_URL');
if(!$this->isVerifiedAmmount() ||
!$this->isPrimaryPayPalEmail() ||
!$this->isNotProcessed()){
$req = '';
}
$header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Host: $url\r\n"; //443
$header .= "Content-type: application/x-www-form-urlencoded\r\n";
$header .= "Content-length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ("ssl://$url", 443, $errno, $errstr, 30);
if (!$fp)
{
$this->sendReport("Errore connessione socket");
return FALSE;
}
else
{
fputs ($fp, $header . $req);
while (!feof($fp))
{
$res = fgets ($fp, 1024);
if (strcmp($res, "VERIFIED") == 0)
{
// transizione valida
fclose ($fp);
return TRUE;
}
else if (strcmp ($res, "INVALID") == 0)
{
$this->sendReport('Transizione non valida');
fclose ($fp);
return FALSE;
}
}
}
}