Задать вопрос
@9StarRu

Как исправить success ответ от paypal?

Настраиваю прием платежей через paypal
Произвожу платеж и попадаю на success страницу с php ошибками:

Notice: Undefined index: custom in /app/lib/billings/paypal.php on line 134
Notice: Undefined index: item_number in /app/lib/billings/paypal.php on line 140

Строка 134
$item_id = isset($_SESSION[$_POST['custom']]) ? $_SESSION[$_POST['custom']] : false;

строка 140
$_BILL['inv_id'] = $_POST['item_number'];

Не понимаю, где ошибка.
Пожалуйста, помогите исправить.

Код целиком:
<?php

if($_module == 'merchant_bill') {

	// Данные о товаре
	$item = getItem($_item);
	
	// Проверка на свободную цену
	if(isset($_POST['price'])) {
		
		$item['free_price'] = formatPrice($_POST['price']);
		
		if($item['free_price'] < $item['price']) {
		
			header('Location: ' . $_SERVER['HTTP_REFERER']);
			exit;
			
		} else {
		
			$item['price'] = $item['free_price'];
			
			// Если цена 0.00
			if($item['price'] == '0.00') {				
				// Получение видов валют
				$currencies = unserialize(ESHOP_CURRENCIES);
				
				// Установка id транзакции
				$_BILL['inv_id']   = time();
				
				// Успешная оплата
				successPayment($item, $item['price'], $currencies[$item['currency']], $item['id'], $_BILL);
				
				exit;
			}
		}
		
	}
 
	// Адрес сервера
	$_BILL['SERVER'] = ESHOP_DEBUG ? 'https://www.sandbox.paypal.com/cgi-bin/webscr' : 
									 'https://www.paypal.com/cgi-bin/webscr';
		
	// Получение видов валют
	$currencies = unserialize(ESHOP_CURRENCIES);
	
	// ID транзакции
	$_BILL['TRANS_ID']  = time();
	
	// ID товара
	$_BILL['item_id'] = $item['id'];
	
	if($item != false) {

		// Русский язык при оплате
		$_BILL['LANGUAGE'] 	= 'RU';

		$_BILL['ACTION_CMD']  = '_xclick';

		// Email продавца
		$_BILL['RECEIVER_EMAIL']  = $_BILL['facilitator'];

		// Название товара
		$_BILL['GOODS_NAME']   = $item['name'];

		// Описание товара
		$_BILL['PAYMENT_DESC']   = $item['descr'];
		
		// Стоимость товара (в валюте биллинга)
		$_BILL['PAYMENT_AMOUNT']  = convertPrice($item['price'], $currencies[$item['currency']], 'USD');
		
		// Адрес сервера и параметры
		$_BILL['request_data'] = array(
			'notify_url'        => ESHOP_FULL_URL . ESHOP_ROOT_URL . '/?merchant=paypal&return=result',
			'return'       		=> ESHOP_FULL_URL . ESHOP_ROOT_URL . '/?merchant=paypal&return=success',
			'cancel_return'     => ESHOP_FULL_URL . ESHOP_ROOT_URL . '/?merchant=paypal&return=fail',
			
			'no_shipping'    	=> 1,
			'lc'    			=> $_BILL['LANGUAGE'],
			'cmd'    			=> $_BILL['ACTION_CMD'],
			'business'       	=> $_BILL['RECEIVER_EMAIL'],
			'item_name'      	=> $_BILL['GOODS_NAME'],
			'item_number'      	=> $_BILL['TRANS_ID'],
			'amount'      		=> $_BILL['PAYMENT_AMOUNT'],
			'custom'      		=> $item['name']
		);
		
		// Запоминание товара
		$_SESSION[$_BILL['request_data']['custom']] = $_BILL['item_id'];
		
		// Форма и отправка POST запроса
		$tpl  = '<html><head><title>Обработка платежа Paypal…</title></head>';
		$tpl .= '<body';
		$tpl .= ' onload="document.getElementById(\'paypal-payment\').submit();"';
		$tpl .= '><form id="paypal-payment" method="post" action="' . $_BILL['SERVER'] . '" style="margin: 100px auto; width: 300px; text-align: center">';
		
		while (list($key, $value) = each($_BILL['request_data']))
			$tpl .= '<input type="hidden" name="' . $key . '" value="' . $value . '" />';
		
		$tpl .= '<script type="text/javascript">document.write(\'Обработка платежа Paypal…\');</script>';
		$tpl .= '<noscript><input type="submit" name="submit" value="Заплатить ' . displayPrice($item['price'], $item['currency']) . ' с помощью Webmoney" /></noscript></form></body></html>';
		
		echo $tpl;
	}

	exit;
}



/**
 * Обработка ответов
 * биллинга Webmoney
 */
 
if($_module == 'merchant_return' && $_action != '') {


	// Получение ID товара
	$item_id = isset($_SESSION[$_POST['custom']]) ? $_SESSION[$_POST['custom']] : false;
		
	// Получение информации о товаре
	$item    = getItem($item_id);
	
	// Получение ID транзакции
	$_BILL['inv_id'] = $_POST['item_number'];
	

	/**
	 * Обработка оповещения о платеже
	 * (Result URL)
	 */
	 
	if('result' == $_action) {
		


		// STEP 1: read POST data
		// Reading POSTed data directly from $_POST causes serialization issues with array data in the POST.
		// Instead, read raw POST data from the input stream.
		$data = file_get_contents('php://input');
		$array = explode('&', $data);
		$post = array();

		foreach ($array as $keyval) {
			$keyval = explode ('=', $keyval);
			if (count($keyval) == 2)
		    	$post[$keyval[0]] = urldecode($keyval[1]);
		}

		// read the IPN message sent from PayPal and prepend 'cmd=_notify-validate'
		$req = 'cmd=_notify-validate';
		if (function_exists('get_magic_quotes_gpc')) {
			$get_magic_quotes_exists = true;
		}

		foreach ($post as $key => $value) {
			if ($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) {
				$value = urlencode(stripslashes($value));
			} else {
				$value = urlencode($value);
			}
			$req .= "&{$key}={$value}";
		}

		// Step 2: POST IPN data back to PayPal to validate
		$ch = curl_init('https://ipnpb.paypal.com/cgi-bin/webscr');
		curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
		curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
		curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));
		// In wamp-like environments that do not come bundled with root authority certificates,
		// please download 'cacert.pem' from "https://curl.haxx.se/docs/caextract.html" and set
		// the directory path of the certificate as shown below:
		// curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
		if ( !($res = curl_exec($ch)) ) {
		  	// Ошибка! Закрываем соединение 
		  	// с сервером и завершаем скрипт
			curl_close($ch);
			exit;
		}

		// Закрываем соединение с сервером
		curl_close($ch);


		// inspect IPN validation result and act accordingly
		if (strcmp ($res, "VERIFIED") == 0) {

			// Все успешно прошло, мы можем записать пользователя
			// как купившего файл. Но мы делать этого конечно-же не будем :)

		} else if (strcmp ($res, "INVALID") == 0) {
			// Отдаём сообщение о том, что наш платёж не прошёл валидацию!
			echo "The response from IPN was: <b>" .$res ."</b>";
			sendErroMerchantEmail('PayPal', $item['name']);
			exit;
		}
		
		// Отправка уведомления владельцу
		sendMerchantEmail();
		exit;
	}
	
	/**
	 * Успешное проведение платежа
	 * (Success URL)
	 */
	 
	else if('success' == $_action && $item) {	
			
		// Установка id транзакции
		$_BILL['inv_id']   = time();
		
		// Установка правильной цены
		$currencies          = unserialize(ESHOP_CURRENCIES);
		$currencies_l        = unserialize(ESHOP_CURRENCIES_LABELS);
		$_BILL['item_cur']   = $currencies_l[array_search(ESHOP_GA_PRICE, $currencies)];

		// Успешное оплата
		successPayment($item, $item['price'], $currencies[$item['currency']], $item['id'], $_BILL);
		
		exit;
	}
	
	
	/**
	 * Неудачное проведение платежа
	 * (Fail URL)
	 */
	
	else if('fail' == $_action && $item) {
		// Переход на страницу товара
		header('Location: ./?buy=' . $item_id, true, 301);				
		exit;			
	}
	
	exit;
}

exit;
?>
  • Вопрос задан
  • 124 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы