Перейти к содержанию
Официальный форум поддержки Simpla

Платежный модуль для Яндекс Денег


Рекомендуемые сообщения

В корзине 100 руб

К оплате 100 руб

А на кошелек поступит 98 руб

В итоге 98 руб не равно 100 руб!!! 

Правьте файл callback.php!

 

нет! 100 реблей поступит! Комиссии с карты на кошелек у Яндекса нет!

Я выше исправил свой коммент -- помогите плиз!

Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 156
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

Изображения в теме

Вы хоть раз оплатить пробовали или условия яндекса открывали?

Если вы убрали строчку с увеличением суммы на 2%, то на счет поступит сумма меньше суммы заказа на 2%! Пока вы этого не поймете у вас ничего не заработает.

 

 

 Комиссия с получателя
2% при оплате с карты, 0,5% — из кошелька
Ссылка на сообщение
Поделиться на другие сайты

Вы хоть раз оплатить пробовали или условия яндекса открывали?

Если вы убрали строчку с увеличением суммы на 2%, то на счет поступит сумма меньше суммы заказа на 2%! Пока вы этого не поймете у вас ничего не заработает.

 

Да я все равно не смогу это понять! Вариант, что с клиента проценты не будут браться мне нужен! тк 39 00 рублей товар стоит!

 

Я понимаю, что нужно сделать, но как? Какую-то функцию писать надо? Как ее писать?

 

UPD: Да на кошелек меньше падает, но как сделать правильно? Это я повторяю уже раз 500...

Изменено пользователем Maksclub
Ссылка на сообщение
Поделиться на другие сайты

Вы хоть раз оплатить пробовали или условия яндекса открывали?

Если вы убрали строчку с увеличением суммы на 2%, то на счет поступит сумма меньше суммы заказа на 2%! Пока вы этого не поймете у вас ничего не заработает.

 

я так понимаю тут что-то мутить нужно?

// Сумма заказа у нас в магазине
$order_amount = $simpla->money->convert($order->total_price, $method->currency_id, false);
       
// Должна быть равна переданной сумме
if(floatval($order_amount) !== floatval($_POST['orderSumAmount']))
	print_error("Неверная сумма оплаты");
Ссылка на сообщение
Поделиться на другие сайты

Вы хоть раз оплатить пробовали или условия яндекса открывали?

Если вы убрали строчку с увеличением суммы на 2%, то на счет поступит сумма меньше суммы заказа на 2%! Пока вы этого не поймете у вас ничего не заработает.

 

Собственно до удаления той строчки я платил с комиссей, но сумма на счет приходила равная сумме заказа, но статус не менялся, об этом выше я писал и еще пару людей.

 

Так что полагаю такие действия результата не дадут:

$order_amount = $simpla->money->convert($order->total_price, $method->currency_id, false);
$order_amount = $order_amount / 0.98;

Морокой только занимаются тут все

Ссылка на сообщение
Поделиться на другие сайты

 

я так понимаю тут что-то мутить нужно?

// Сумма заказа у нас в магазине
$order_amount = $simpla->money->convert($order->total_price, $method->currency_id, false);
       
// Должна быть равна переданной сумме
if(floatval($order_amount) !== floatval($_POST['orderSumAmount']))
	print_error("Неверная сумма оплаты");

 

У вас какая версия симплы то?

 

Мой callback совершенно другой........... а следовательно мою инструкцию вы не выполняли. 

Ссылка на сообщение
Поделиться на другие сайты

У вас какая версия симплы то?

 

Мой callback совершенно другой........... а следовательно мою инструкцию вы не выполняли. 

 

За сколько отладите? Нет сил уже, ваша инструкция + добавление этого кода:

$price = round(($price/98)*100, 2);

не работает!

 

А мне еще нужно убрать комиссию с покупателя на себя ко всему прочему

Изменено пользователем Maksclub
Ссылка на сообщение
Поделиться на другие сайты
  • 3 месяца спустя...

Тоже не могу сделать чтобы статус заказа менялся при комиссии с меня а не клиента.

Скажите что в callback.php и YandexCard.php поправить чтобы и комиссия с меня бралась а не с клиента и статус менялся на оплаченный?

За ранее спасибо!

Ссылка на сообщение
Поделиться на другие сайты

Тоже не могу сделать чтобы статус заказа менялся при комиссии с меня а не клиента.

Скажите что в callback.php и YandexCard.php поправить чтобы и комиссия с меня бралась а не с клиента и статус менялся на оплаченный?

За ранее спасибо!

Только с клиента, иначе никак.
Ссылка на сообщение
Поделиться на другие сайты

очень жаль

 

Тут дело не в Simpla, а в ЯД. Оплата реально происходит на их сайте, куда от Вашего сайта передается сумма платежа. А у них правило - комиссией.

Если Вы хотите по своему, то можно модифицировать сумму к оплате, уменьшая ее на нужную величину для случая оплаты через ЯД. Но это уже надо специально программировать.  И возможны трудности с округлением...

Ссылка на сообщение
Поделиться на другие сайты
  • 2 месяца спустя...
  • 2 месяца спустя...

Помогите пожалуйста почему то слетела система по банковским картам, после оплаты клиенту не отсылается заказ на почту. Что делать?

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

Я так полагаю тема мертвая уже? И прийдется искать сторонних программистов что бы сделали отправку заказа на почту после оплаты.

Ссылка на сообщение
Поделиться на другие сайты

Я так полагаю тема мертвая уже? И прийдется искать сторонних программистов что бы сделали отправку заказа на почту после оплаты.

Попробуйте мое решение, если не сработает пишите в скайп simplacms.
Ссылка на сообщение
Поделиться на другие сайты

Попробуйте мое решение, если не сработает пишите в скайп simplacms.

 

Сравнил callback.php из предложенного решения и и стандартного дистрибутива Simpla.

ИМХО, по сути - одно и то же. Нашел отличия  такого сорта.

1. * @author

В стандартном         Denis Pikusov, 

в предложенном      Noxter

2. Комментарии отличаются к нескольких местах, например

В стандартном      

////////////////////////////////////////////////

// Проверка статуса

////////////////////////////////////////////////

в предложенном   покороче

// Проверка статуса

3. Сообщения об ошибках отличаются к нескольких местах, например

В стандартном      

if($hash !== $_POST['sha1_hash'])

    err('bad sign');

в предложенном 

// Проверка статуса

if($hash !== $_POST['sha1_hash'])

{

    error('Не верный секретный ключ');

}

 

Вопрос: такие изменения достаточно существенны, чтобы ставить свой copyright ?  Или я пропустил что-то важное?

 

4  * @copyright 

В стандартном          * @copyright     2013 Denis Pikusov

в предложенном       * @copyright     2014 Noxter

Ссылка на сообщение
Поделиться на другие сайты

Ну я писал этот модуль очень давно, до того как Денис внес свои правки в стандартный модуль.

Да и то написан он был как я помню по причине не рабочего модуля в симпле, точно не помню вроде Яндекс поля какие-то в форме поменял.

Ссылка на сообщение
Поделиться на другие сайты

Ну я писал этот модуль очень давно, до того как Денис внес свои правки в стандартный модуль.

 

Текущий стандартный модуль Simpla появился в версии 2.2.5 в феврале 2014 и сам  файл callback.php датируется 2013 годом.

В предлагаемом решении в архиве файл callback.php и другие датируется 2015 годом. А внутри файла  стоит "* @copyright     2014 Noxter"...

 

Да и то написан он был как я помню по причине не рабочего модуля в симпле, точно не помню вроде Яндекс поля какие-то в форме поменял.

 

Хорошо было бы вспомнить, по какой причине и вставить эту причину в описание. А то в файле callback.php не видно ни одного реального изменения, одни косметические прикрасы...

Ссылка на сообщение
Поделиться на другие сайты
  • 2 месяца спустя...

Никак не настрою статус. кто поможет? После оплаты он не меняется.

Статус ждет обработки Оплата оплачен
Ссылка на сообщение
Поделиться на другие сайты
  • 4 месяца спустя...

В общем сам разобрался. Сейчас все работает.

Yandex.php

<?php

require_once('api/Simpla.php');

class Yandex extends Simpla
{

	// Комиссия Яндекса, %
	private $fee = 1;

	public function checkout_form($order_id, $button_text = null)
	{
		if(empty($button_text))
			$button_text = 'Перейти к оплате';
		
		$order = $this->orders->get_order((int)$order_id);
		$payment_method = $this->payment->get_payment_method($order->payment_method_id);
		$payment_currency = $this->money->get_currency(intval($payment_method->currency_id));
		$settings = $this->payment->get_payment_settings($payment_method->id);
		
		$price = round($this->money->convert($order->total_price, $payment_method->currency_id, false), 2);
		
		// Учесть комиссию Яндекса
		$price = $price+max(0.01, $price*$this->fee/100);

		// описание заказа
		$desc = 'Оплата заказа №'.$order->id.' на сайте '.$this->settings->site_name;
							
		$button = '<form method="POST" action="https://money.yandex.ru/quickpay/confirm.xml">
					<input name="receiver" type="hidden" value="'.$settings['yandex_id'].'">
					<input name="formcomment" type="hidden" value="'.$desc.'">
					<input name="short-dest" type="hidden" value="'.$desc.'">
					<input name="targets" type="hidden" value="'.$desc.'">
					<input name="quickpay-form" type="hidden" value="shop">
					<input name="sum" data-type="number" type="hidden" value="'.$price.'">
					<input name="label" type="hidden" value="'.$order->id.'">
					<input name="paymentType" type="hidden" value="PC">
					<input type="submit" name="submit-button" value="'.$button_text.'"  class="checkout_button">
					</form>';
		return $button;
	}
}

 

callback.php - общий для карт и для яндекса

 

<?php

/*
 *
 * К этому скрипту обращается Yandex для уведомления об оплате
 * Документация https://money.yandex.ru/i/forms/guide-to-custom-p2p-forms.pdf
 *
 */
 
// Работаем в корневой директории
chdir ('../../');
require_once('api/Simpla.php');
$simpla = new Simpla();

// Проверка статуса
if($_POST['notification_type'] !== 'p2p-incoming' && $_POST['notification_type'] !== 'card-incoming')
{
	error('Плохой статус');
}
	
// Выберем заказ из базы
$order = $simpla->orders->get_order(intval($_POST['label']));
if(empty($order))
{
	error('Оплачиваемый заказ не найден');
}
 
// Выбираем из базы соответствующий метод оплаты
$method = $simpla->payment->get_payment_method(intval($order->payment_method_id));
if(empty($method))
{
	error("Неизвестный метод оплаты");
}
	
$settings = unserialize($method->settings);
$payment_currency = $simpla->money->get_currency(intval($method->currency_id));

// Проверяем контрольную подпись
$hash = sha1($_POST['notification_type'].'&'.$_POST['operation_id'].'&'.$_POST['amount'].'&'.$_POST['currency'].'&'.$_POST['datetime'].'&'.$_POST['sender'].'&'.$_POST['codepro'].'&'.$settings['yandex_secret'].'&'.$_POST['label']);

if($hash !== $_POST['sha1_hash'])
{
	error('Не верный секретный ключ');
}

// Нельзя оплатить уже оплаченный заказ  
if($order->paid)
{
	error('Этот заказ уже оплачен');
}

// Учет комиссии Яндекса
$amount = round($simpla->money->convert($order->total_price, $method->currency_id, false), 2);

if($_POST['amount'] != $amount || $_POST['amount']<=0)
	error("Не корректная цена");

// Установим статус оплачен
$simpla->orders->update_order(intval($order->id), array('paid'=>1));

// Отправим уведомление на email
$simpla->notify->email_order_user(intval($order->id));
$simpla->notify->email_order_admin(intval($order->id));

// Спишем товары  
$simpla->orders->close(intval($order->id));

function error($msg)
{
	header($_SERVER['SERVER_PROTOCOL'].' 400 Bad Request', true, 400);
	mail($simpla->settings->order_email, "yandex: $msg", $msg);
	die($msg);
}

 

 

Дарю безвозмездно

Ссылка на сообщение
Поделиться на другие сайты
  • 8 месяцев спустя...

Уже как неделю перестал меняться статус оплаты заказов. 

Оплата происходит через карты. 

<input name="paymentType" type="hidden" value="AC"> 

Заметил, что окно оплаты у Яндекс изменилось, теперь при оплате можно выбрать либо с кошелька, либо с карты. 

Пробовал через Я.Деньги статус меняется, если карта, то нет. 

Изменено пользователем sergeevizh
Ссылка на сообщение
Поделиться на другие сайты

×
×
  • Создать...