Оплата С Пластика На Яндекс Для Физиков

В общем вот готовый процессор для принятия к себе на кошелек пластика, яндекс денег и платежи с телефонов

В строке 77 выбирается тип платежа

paymentType — способ оплаты. Возможные значения:

  • PC — оплата из кошелька в Яндекс.Деньгах;
  • AC — с банковской карты;
  • MC — с баланса мобильного.
$processor_data['processor_params']['number'] - номер кошелька, выводится из tpl, ее выкладывать не буду, там все просто
'targets' => $processor_data['processor_params']['name'] . ' - ' . $order_info[order_id], - то что покупатель будет видеть при оплате, например в tpl-ке написано будет Оплата заказа, дальше скрипт подставит номер
Чтобы после оплаты создавался заказ, нужно вот тут https://money.yandex.ru/myservices/online.xml
Задать вот такой адрес для уведомлений http://ваш_сайт/index.php?dispatch=payment_notification.ok&payment=yandex_card
Секрет, опять же, выводим из tpl-ки
Если секрет неверный, бабки спишет, а заказ не переведет в статус активных. Пока заказ не оплачен он будет неактивен и человек может вернуться в корзину и оплатить
Если я где-то накосячил в коде, прошу поправить, я выгоды никакой не несу, думаю что хоть-кому-то пригодится. Я протестировал на 4.2.4 и 4.3.6, все работало как задумано
<?php
/***************************************************************************
*                                                                          *
*   (c) 2004 Vladimir V. Kalynyak, Alexey V. Vinokurov, Ilya M. Shalnev    *
*                                                                          *
* This  is  commercial  software,  only  users  who have purchased a valid *
* license  and  accept  to the terms of the  License Agreement can install *
* and use this program.                                                    *
*                                                                          *
****************************************************************************
* PLEASE READ THE FULL TEXT  OF THE SOFTWARE  LICENSE   AGREEMENT  IN  THE *
* "copyright.txt" FILE PROVIDED WITH THIS DISTRIBUTION PACKAGE.            *
****************************************************************************/

if (defined(‘PAYMENT_NOTIFICATION’)) {

if ($mode == 'ok') {
		
	$order_id = $_POST['label'];
	$payment_id = db_get_field("SELECT payment_id FROM ?:orders WHERE order_id = ?i", $order_id);
	$processor_data = fn_get_processor_data($payment_id);
	$notification_type = $_POST["notification_type"]; 
	$operation_id = $_POST["operation_id"];
	$amount = $_POST["amount"];
	$currency = $_POST["currency"];
	$datetime = $_POST["datetime"];
	$sender = $_POST["sender"];
	$codepro = $_POST["codepro"];
	$notification_secret = $processor_data['processor_params']['password'];
	$label = $_POST["label"];
	$sha1_hash = $_POST["sha1_hash"];

	$hash = $notification_type . '&' . $operation_id . '&' . $amount . '&' . $currency . '&' . $datetime . '&' . $sender . '&' . $codepro . '&' . $notification_secret . '&' . $label;

	$sha1 = hash("sha1", $hash);

	if ( $sha1 == $sha1_hash ) {
	
		if (fn_check_payment_script('yandex_card.php', $order_id)) {
 
			$_order_id = db_get_field("SELECT order_id FROM ?:order_data WHERE order_id = ?i AND type = 'S'", $order_id);
			if (empty($_order_id)) {
				break;
			}

			$order_status = db_get_field("SELECT status FROM ?:orders WHERE order_id = ?i", $order_id);
			
			if ($order_status == STATUS_INCOMPLETED_ORDER) {
				fn_change_order_status($order_id, 'O');
			}

			fn_order_placement_routines('route', $order_id, false);
		}
	}
}

exit;

} else {

if (!defined(‘BOOTSTRAP’)) { die(‘Access denied’); }

$post_address = "https://money.yandex.ru/quickpay/confirm.xml";

$post_data = array(
		'receiver' => $processor_data['processor_params']['number'],
		'quickpay-form' => 'shop',
		'targets' => $processor_data['processor_params']['name'] . ' - ' . $order_info[order_id],
		'label' => $order_id,
		'sum' => $order_info[total],
		'need-fio' => 'false', 
		'need-email' => 'false', 
		'need-phone' => 'false', 
		'need-address' => 'false',
		'successURL' => fn_url("index.php?dispatch=checkout.complete&order_id=" . $order_info[order_id]),
		'paymentType' => 'AC',
);

fn_create_payment_form($post_address, $post_data, 'YandexCard', false);

}

В общем вот 3 готовых модуля, единственное чтобы они правильно работали нужно иметь 3 кошелька, т.е деньги на один, карты на другой и телефоны на третий, потому что уведомления Яндекс для каждого модуля должны идти по своей ссылке.

Я уже делать не буду, т.к кому эти модули нужны извернутся и с 3 кошельками :grin:

Ридми в архиве

https://www.dropbox.com/s/4gngbujw2jyjenx/yandex_pay.zip?dl=0

Только запомните, если будут криво настроены уведомления, клиенты конечно платить будут, только вот заказы вы не увидите оплаченные, они будут как незавершенные