#php #mysql #paypal
#php #mysql #paypal
Вопрос:
в настоящее время я разрабатываю интернет-магазин для покупок. Для этого веб-сайта я не сохранял историю покупок в своей базе данных, поэтому у меня нет никаких сведений о заказах клиентов. Я планирую получить детали заказа сразу после того, как клиент произведет платеж.
Моя проблема сейчас в том, что мой продукт отправляется в виде массива в PayPal, и все транзакции сохраняются в поле таблицы моей базы данных, как показано ниже:
20-1,21-1
20 и 21 — это идентификатор продукта, а прямо рядом с ним указано количество.
Мне нужно знать, возможно ли для меня получать заказы только из paypal IPN без создания специальной базы данных для хранения заказов от клиента?
Пожалуйста, мне действительно нужна ваша помощь в этом
$product_id_string = $_POST['custom'];
$product_id_string = rtrim($product_id_string, ","); // remove last comma
// Explode the string, make it an array, then query all the prices out, add them up, and make sure they match the payment_gross amount
$id_str_array = explode(",", $product_id_string); // Uses Comma(,) as delimiter(break point)
$fullAmount = 0;
foreach ($id_str_array as $key => $value) {
$id_quantity_pair = explode("-", $value); // Uses Hyphen(-) as delimiter to separate product ID from its quantity
$product_id = $id_quantity_pair[0]; // Get the product ID
$product_quantity = $id_quantity_pair[1]; // Get the quantity
$query = "SELECT price FROM products WHERE id='$product_id' LIMIT 1";
$result = mysqli_query($conn, $query);
while($row = mysqli_fetch_array($result)){
$product_price = $row["price"];
}
$product_price = $product_price * $product_quantity;
$fullAmount = $fullAmount $product_price;
}
$fullAmount = number_format($fullAmount, 2);
$grossAmount = $_POST['mc_gross'];
if ($fullAmount != $grossAmount) {
$message = "Possible Price Jack: " . $_POST['mc_gross'] . " != $fullAmount nnn$req";
mail("email@gmail.com", "Price Jack or Bad Programming", $message, "From: email@gmail.com" );
exit(); // exit script
}
// END ALL SECURITY CHECKS NOW IN THE DATABASE IT GOES ------------------------------------
////////////////////////////////////////////////////
// Assign local variables from the POST PayPal variables
$custom = $_POST['custom'];
$payer_email = $_POST['payer_email'];
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$payment_date = $_POST['payment_date'];
$mc_gross = $_POST['mc_gross'];
$payment_currency = $_POST['payment_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payment_type = $_POST['payment_type'];
$payment_status = $_POST['payment_status'];
$txn_type = $_POST['txn_type'];
$payer_status = $_POST['payer_status'];
$address_street = $_POST['address_street'];
$address_city = $_POST['address_city'];
$address_state = $_POST['address_state'];
$address_zip = $_POST['address_zip'];
$address_country = $_POST['address_country'];
$address_status = $_POST['address_status'];
$notify_version = $_POST['notify_version'];
$verify_sign = $_POST['verify_sign'];
$payer_id = $_POST['payer_id'];
$mc_currency = $_POST['mc_currency'];
$mc_fee = $_POST['mc_fee'];
// Place the transaction into the database
$sql = mysqli_query($conn, "INSERT INTO transactions (id, product_id_array, payer_email, first_name, last_name, payment_date, mc_gross, payment_currency, receiver_email, payment_type, payment_status, txn_type, payer_status, address_street, address_city, address_state, address_zip, address_country, address_status, notify_version, verify_sign, payer_id, mc_currency, mc_fee)
VALUES('$txn_id','$custom','$payer_email','$first_name','$last_name','$payment_date','$mc_gross','$payment_currency','$receiver_email','$payment_type','$payment_status','$txn_type','$payer_status','$address_street','$address_city','$address_state','$address_zip','$address_country','$address_status','$notify_version','$verify_sign','$payer_id','$mc_currency','$mc_fee')") or die ("unable to execute the query");
mysqli_close();
// Mail yourself the details
mail("email@gmail.com", "New Order Entered: ".$txn_id, $req, "From: email@gmail.com");
?>
Комментарии:
1. Возможно, я не понял, но вы можете добавить полное описание в запрос, используя
item_namex
поле, или можете получить описание после оплаты с помощью запроса, который вы используете для получения цены для проверки. Но помимо этого учтите, что транзакция является очень важным событием и может быть разумным сохранить все значения всех параметров, связанных с транзакцией, при совершении транзакции: что произойдет, если тем временем кто-то купит у вас изменение цены товара? FullAmount и GrossAmount не будут совпадать, но платеж правильный, наконец, проверьте fullamount и gross_amount недостаточно2. необходимо четко проверить, не является ли ответ НЕДЕЙСТВИТЕЛЬНЫМ, что это не изолированный платеж (test_ipn!= 1), что receiver_email — это ваш адрес электронной почты PayPal, что txn_id еще не был обработан и что payment_status = завершен
3. Приведенный выше код — это всего лишь фрагмент из моего полного кода. Ответ действителен, и цена соответствует полной сумме и валовой сумме. Моя проблема сейчас в том, как я предполагаю извлечь сведения о продукте из поля массива