Несколько продуктов в слушателе, PayPal IPN - PullRequest
0 голосов
/ 26 октября 2018

я использую PayPal IPN для отправки информации в мой php-код, который будет принимать эту информацию и отправлять вложения продукта на электронную почту покупателей.

У меня вопрос, могу ли я иметь несколько продуктов в одном слушателе, или мне нужен отдельный файл для каждого продукта?

Что, если продукт покупают одновременно 2 или более клиентов, могут ли быть проблемы? Как отправка вложения только одному из них вместо двух или более.

<?php
	use PHPMailer\PHPMailer\PHPMailer;
	require "PHPMailer/PHPMailer.php";
	require "PHPMailer/Exception.php";

	if ($_SERVER['REQUEST_METHOD'] != 'POST') {
		header('Location: index.php');
		exit();
	}

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, 'https://ipnpb.sandbox.paypal.com/cgi-bin/webscr');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, "cmd=_notify-validate&" . http_build_query($_POST));
	$response = curl_exec($ch);
	curl_close($ch);

	if ($response == "VERIFIED" && $_POST['receiver_email'] == "your-email@hotmail.com") {
		$cEmail = $_POST['payer_email'];
		$name = $_POST['first_name'] . " " . $_POST['last_name'];

		$price = $_POST['mc_gross'];
		$currency = $_POST['mc_currency'];
		$item = $_POST['item_number'];
		$paymentStatus = $_POST['payment_status'];

		if ($item == "wordpressPlugin" && $currency == "USD" && $paymentStatus == "Completed" && $price == 67) {
			$mail = new PHPMailer();

			$mail->setFrom("your-email@hotmail.com", "Sales");
			$mail->addAttachment("attachment/wordpress-plugin.zip", "WordPress Plugin");
			$mail->addAddress($cEmail, $name);
			$mail->isHTML(true);
			$mail->Subject = "Your Purchase Details";
			$mail->Body = "
				Hi, <br><br>
				Thank you for purchase. In the attachment you will 
                find product<br><br>
				
				Kind regards.
			";

			$mail->send();
		}
	}

?>

1 Ответ

0 голосов
/ 28 октября 2018

Нет, с этим не было бы проблем. Данные IPN будут включать в себя массив элементов корзины, поэтому вы можете просматривать их и делать все, что вам нужно, с каждым элементом.

Вас может заинтересовать наш шаблон IPN . Сейчас это немного устарело, но вы можете увидеть, как мы готовим $ cart_items в массив , который легко перебрать.

// Cart Items
$num_cart_items = isset($_POST['num_cart_items']) ? $_POST['num_cart_items'] : '';

$i = 1;
$cart_items = array();   
while(isset($_POST['item_number' . $i]))   
{   
    $item_number = isset($_POST['item_number' . $i]) ? $_POST['item_number' . $i] : '';   
    $item_name = isset($_POST['item_name' . $i]) ? $_POST['item_name' . $i] : '';   
    $quantity = isset($_POST['quantity' . $i]) ? $_POST['quantity' . $i] : '';  
    $mc_gross = isset($_POST['mc_gross_' . $i]) ? $_POST['mc_gross_' . $i] : 0;
    $mc_handling = isset($_POST['mc_handling' . $i]) ? $_POST['mc_handling' . $i] : 0;
    $mc_shipping = isset($_POST['mc_shipping' . $i]) ? $_POST['mc_shipping' . $i] : 0;
    $custom = isset($_POST['custom' . $i]) ? $_POST['custom' . $i] : '';   
    $option_name1 = isset($_POST['option_name1_' . $i]) ? $_POST['option_name1_' . $i] : '';   
    $option_selection1 = isset($_POST['option_selection1_' . $i]) ? $_POST['option_selection1_' . $i] : '';   
    $option_name2 = isset($_POST['option_name2_' . $i]) ? $_POST['option_name2_' . $i] : '';   
    $option_selection2 = isset($_POST['option_selection2_' . $i]) ? $_POST['option_selection2_' . $i] : '';
    $option_name3 = isset($_POST['option_name3_' . $i]) ? $_POST['option_name3_' . $i] : '';   
    $option_selection3 = isset($_POST['option_selection3_' . $i]) ? $_POST['option_selection3_' . $i] : '';
    $option_name4 = isset($_POST['option_name4_' . $i]) ? $_POST['option_name4_' . $i] : '';   
    $option_selection4 = isset($_POST['option_selection4_' . $i]) ? $_POST['option_selection4_' . $i] : '';
    $option_name5 = isset($_POST['option_name5_' . $i]) ? $_POST['option_name5_' . $i] : '';   
    $option_selection5 = isset($_POST['option_selection5_' . $i]) ? $_POST['option_selection5_' . $i] : '';
    $option_name6 = isset($_POST['option_name6_' . $i]) ? $_POST['option_name6_' . $i] : '';   
    $option_selection6 = isset($_POST['option_selection6_' . $i]) ? $_POST['option_selection6_' . $i] : '';
    $option_name7 = isset($_POST['option_name7_' . $i]) ? $_POST['option_name7_' . $i] : '';   
    $option_selection7 = isset($_POST['option_selection7_' . $i]) ? $_POST['option_selection7_' . $i] : '';
    $option_name8 = isset($_POST['option_name8_' . $i]) ? $_POST['option_name8_' . $i] : '';   
    $option_selection8 = isset($_POST['option_selection8_' . $i]) ? $_POST['option_selection8_' . $i] : '';
    $option_name9 = isset($_POST['option_name9_' . $i]) ? $_POST['option_name9_' . $i] : '';   
    $option_selection9 = isset($_POST['option_selection9_' . $i]) ? $_POST['option_selection9_' . $i] : '';

    $btn_id = isset($_POST['btn_id' . $i]) ? $_POST['btn_id' . $i] : '';

    $current_item = array(   
                           'item_number' => $item_number,   
                           'item_name' => $item_name,   
                           'quantity' => $quantity, 
                           'mc_gross' => $mc_gross, 
                           'mc_handling' => $mc_handling, 
                           'mc_shipping' => $mc_shipping, 
                           'custom' => $custom,   
                           'option_name1' => $option_name1,   
                           'option_selection1' => $option_selection1,   
                           'option_name2' => $option_name2,   
                           'option_selection2' => $option_selection2, 
                           'option_name3' => $option_name3, 
                           'option_selection3' => $option_selection3, 
                           'option_name4' => $option_name4, 
                           'option_selection4' => $option_selection4, 
                           'option_name5' => $option_name5, 
                           'option_selection5' => $option_selection5, 
                           'option_name6' => $option_name6, 
                           'option_selection6' => $option_selection6, 
                           'option_name7' => $option_name7, 
                           'option_selection7' => $option_selection7, 
                           'option_name8' => $option_name8, 
                           'option_selection8' => $option_selection8, 
                           'option_name9' => $option_name9, 
                           'option_selection9' => $option_selection9, 
                           'btn_id' => $btn_id
                          );   

    array_push($cart_items, $current_item);   
    $i++;   
} 

А потом ...

// Loop through cart items and add each to related order_items table
foreach($cart_items as $cart_item)
{
    $cart_item_data['order_id'] = $order_id;
    $cart_item_data['subscr_id'] = $subscr_id;
    $cart_item_data['item_name'] = $cart_item['item_name'];
    $cart_item_data['item_number'] = $cart_item['item_number'];
    $cart_item_data['os0'] = $cart_item['option_selection1'];
    $cart_item_data['on0'] = $cart_item['option_name1'];
    $cart_item_data['os1'] = $cart_item['option_selection2'];
    $cart_item_data['on1'] = $cart_item['option_name2'];
    $cart_item_data['os2'] = $cart_item['option_selection3'];
    $cart_item_data['on2'] = $cart_item['option_name3'];
    $cart_item_data['os3'] = $cart_item['option_selection4'];
    $cart_item_data['on3'] = $cart_item['option_name4'];
    $cart_item_data['os4'] = $cart_item['option_selection5'];
    $cart_item_data['on4'] = $cart_item['option_name5'];
    $cart_item_data['os5'] = $cart_item['option_selection6'];
    $cart_item_data['on5'] = $cart_item['option_name6'];
    $cart_item_data['os6'] = $cart_item['option_selection7'];
    $cart_item_data['on6'] = $cart_item['option_name7'];
    $cart_item_data['os7'] = $cart_item['option_selection8'];
    $cart_item_data['on7'] = $cart_item['option_name8'];
    $cart_item_data['os8'] = $cart_item['option_selection9'];
    $cart_item_data['on8'] = $cart_item['option_name9'];
    $cart_item_data['quantity'] = $cart_item['quantity'];
    $cart_item_data['custom'] = $cart_item['custom'];
    $cart_item_data['mc_gross'] = $cart_item['mc_gross'];
    $cart_item_data['mc_handling'] = $cart_item['mc_handling'];
    $cart_item_data['mc_shipping'] = $cart_item['mc_shipping'];
    $cart_item_data['raw_log_id'] = $ipn_log_data_id;
    $cart_item_data['btn_id'] = $cart_item['btn_id'];

    $cart_item_id = $db -> query_insert('order_items', $cart_item_data);
}

Этот пример подготавливает данные для ввода в базу данных, но вы должны иметь возможность применить это к тому, что вы делаете.

...