2016-12-28 13 views
1

私はpaypal支払いゲートウェイをサイトの1つに統合しています。支払いが成功した後、success.phpファイルにリダイレクトしています。 success.phpファイルには、すべての挿入パラメータと成功メッセージが含まれています。支払いが完了した後、支払いが失敗したことを示すメッセージが表示され、データベースにデータが挿入されていない場合は、ファイルが正しくsuccess.phpにリダイレクトされています。以下は、私が間違っているの何私のsuccess.phpページコードpaypal payment gateway integration

<?php 
include 'dbConfig.php'; 


//Get payment information from PayPal 
$item_number = $_GET['item_number']; 
$txn_id = $_GET['tx']; 
$payment_gross = $_GET['amt']; 
$currency_code = $_GET['cc']; 
$payment_status = $_GET['st']; 

//Get product price from database 
$productResult = $db->query("SELECT price FROM products WHERE id = = '".$item_number."'"); 
$productRow = $productResult->fetch_assoc(); 
$productPrice = $productRow['price']; 

if(!empty($txn_id) && $payment_gross == $productPrice){ 
//Check if payment data exists with the same TXN ID. 
$prevPaymentResult = $db->query("SELECT payment_id FROM payments WHERE txn_id = '".$txn_id."'"); 

if($prevPaymentResult->num_rows > 0){ 
    $paymentRow = $prevPaymentResult->fetch_assoc(); 
    $last_insert_id = $paymentRow['payment_id']; 
}else{ 
    //Insert tansaction data into the database 
    $insert = $db->query("INSERT INTO payments(item_number,txn_id,payment_gross,currency_code,payment_status) VALUES('".$item_number."','".$txn_id."','".$payment_gross."','".$currency_code."','".$payment_status."')"); 
    $last_insert_id = $db->insert_id; 
} 
?> 
<h1>Your payment has been successful.</h1> 
<h1>Your Payment ID - <?php echo $last_insert_id; ?></h1> 
<?php }else{ ?> 
<h1>Your payment has failed.</h1> 
<?php } ?> 

のですか?

+0

準備完了ステートメントはありません。あなたは[SQLインジェクションまで幅広い](http://stackoverflow.com/documentation/php/5828/pdo/2685/preventing-sql-injection-with-parametrized-queries) – Machavity

答えて

0

Van Hoaの提案によると、paypalは、ユーザーを成功ページにリダイレクトするときに、支払い情報をパラメータとして送信しません。 PayPalはトークンと支払人IDのみを返送します。 paypal.com、 ペイパルから戻ってあなたのウェブサイトに買い手をリダイレクトすると、あなたのRETURNのURLにGETパラメータとしてトークンエクスプレスチェックアウト取引と独自の のPayPal買い手IDを付加し

。 これらのGETパラメータは、トークンPayerIDという名前です。

PayPal docs(強調追加)

あなたはGetExpressCheckoutDetailsを使用し、それをあなたが戻ってペイパルから取得したトークンを渡し、支払いの詳細情報を取得するために返されたトークンを使用することができます。