Яндекс деньги - оплата картой

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

trainracing M
Аватара
trainracing M
Возраст: 31
Репутация: 13
Сообщения: 121
Зарегистрирован: 07.10.2016
С нами: 7 лет 5 месяцев
Сайт

Сообщение #1 trainracing » 16.01.2019, 11:47

проблема - статус не меняется на оплачен в модуле оплаты яндекс деньги (не касса)

сделал все этапы:

    Подключите HTTP уведомления здесь https://sp-money.yandex.ru/myservices/online.xml, в поле укажите ссылку на файл payment/Yandex/callback.php,
    Зайти в админку далее Настройки->Оплата->Добавить способ оплаты
    Укажите имя и в выпадающем списке выберите Яндекс Деньги (версия от Simpla-Addons.org)
    Укажите кошелек получателя
    Укажите секретный ключ который Вы можете получить тут https://sp-money.yandex.ru/myservices/online.xml

но при оплате картой не ставится статус оплачен.
в калбэк даже добавил

Код: Выделить всё

if($_POST['notification_type'] !== 'p2p-incoming' && $_POST['notification_type'] !== 'card-incoming')

но все равно не меняет статус((

Подскажите, почему так может быть?
кто как решил проблему?

sergeevizh
sergeevizh
Репутация: 17
Сообщения: 151
Зарегистрирован: 16.10.2016
С нами: 7 лет 5 месяцев

Сообщение #2 sergeevizh » 16.01.2019, 13:45

Статус не меняется из-за неправильного расчета цены с учетом комиссии сервиса
в файле Yandex.php
где-то
$price = $price+max(0.01, $price*$this->fee/100);

trainracing M
Аватара
trainracing M
Возраст: 31
Репутация: 13
Сообщения: 121
Зарегистрирован: 07.10.2016
С нами: 7 лет 5 месяцев
Сайт

Сообщение #3 trainracing » 16.01.2019, 16:36

sergeevizh писал(а):Статус не меняется из-за неправильного расчета цены с учетом комиссии сервиса
в файле Yandex.php
где-то
$price = $price+max(0.01, $price*$this->fee/100);
Но я как раз закомментировал эту строку чтоб цена была 1в1 и все равно не меняется статус (

sergeevizh
sergeevizh
Репутация: 17
Сообщения: 151
Зарегистрирован: 16.10.2016
С нами: 7 лет 5 месяцев

Сообщение #4 sergeevizh » 16.01.2019, 16:41

trainracing писал(а):
sergeevizh писал(а):Статус не меняется из-за неправильного расчета цены с учетом комиссии сервиса
в файле Yandex.php
где-то
$price = $price+max(0.01, $price*$this->fee/100);
Но я как раз закомментировал эту строку чтоб цена была 1в1 и все равно не меняется статус (
Один в один цена быть не может. Так как после оплаты ответ идёт уже с другой ценой.
Я сделал так :
$price = round(($price/98)*100, 2);

Но это не лучший вариант

trainracing M
Аватара
trainracing M
Возраст: 31
Репутация: 13
Сообщения: 121
Зарегистрирован: 07.10.2016
С нами: 7 лет 5 месяцев
Сайт

Сообщение #5 trainracing » 16.01.2019, 18:18

sergeevizh писал(а):Один в один цена быть не может. Так как после оплаты ответ идёт уже с другой ценой.
Я сделал так :
$price = round(($price/98)*100, 2);

дело в том, что цена реально 1в1, при оплате картой яндекс не берет комиссию, и если товар стоит 2руб то я плачу с карты ровно 2 руб, я тау оплатил тестово 3 раза уже

Я поэтому и не понимаю, почему статус не меняется((

sergeevizh
sergeevizh
Репутация: 17
Сообщения: 151
Зарегистрирован: 16.10.2016
С нами: 7 лет 5 месяцев

Сообщение #6 sergeevizh » 16.01.2019, 19:52

https://tech.yandex.ru/money/doc/payment-buttons/reference/forms-docpage/
https://tech.yandex.ru/money/doc/dg/reference/showcase-docpage/
Нужно знать, что Яндекс не дурак и без комиссии себя не оставит.
Поэтому нужно использовать код что писал выше. Так как ответ от сервера после успешной оплаты приходит меньше.
При использовании оплаты через банковскую карту берется комиссия 0,02. Так что 1в1 не получится.

Добавлено спустя 14 минут 25 секунд:
То как вы хотите 1в1 не выйдет. После оплаты сервер Яндекс присылает ответ на сайт с суммой меньше чем в заказе, скрипт не может перевести в статус оплачено, так как сумма заказа больше чем сумма оплаты после вычета комиссии.
Должно быть так:
Сумма в корзине 1590₽
Сумма на странице оплаты 1590+2%=1621,80
После оплаты, вы у себя в Яндекс.Кошельке увидите сумму 1590₽ и сайт получит ответ от сервера с суммой 1590₽ только в этом случае заказ станет оплачен.
А у вас получается в корзине 1590₽
На странице оплаты 1590-2%=1558,20₽
Сервер Яндекс высылает в callback.php ответ, okay смотрит, что id заказ совпадает, а вот сумма нет. Вот и не ставит в оплачен, так как суммы разные.

Добавлено спустя 1 минуту 21 секунду:
trainracing писал(а):
sergeevizh писал(а):Один в один цена быть не может. Так как после оплаты ответ идёт уже с другой ценой.
Я сделал так :
$price = round(($price/98)*100, 2);

дело в том, что цена реально 1в1, при оплате картой яндекс не берет комиссию, и если товар стоит 2руб то я плачу с карты ровно 2 руб, я тау оплатил тестово 3 раза уже

Я поэтому и не понимаю, почему статус не меняется((

Вот так будет если у вас AC
$price = $price+max(0.02, $price*$this->fee/100);
или
$price = round(($price/98)*100, 2);

trainracing M
Аватара
trainracing M
Возраст: 31
Репутация: 13
Сообщения: 121
Зарегистрирован: 07.10.2016
С нами: 7 лет 5 месяцев
Сайт

Сообщение #7 trainracing » 16.01.2019, 20:21

Да, я поставил AC
sergeevizh писал(а):Вот так будет если у вас AC
$price = $price+max(0.02, $price*$this->fee/100);
или
$price = round(($price/98)*100, 2);

попробовал сейчас так как вы посоветовали оба варианта, все равно не меняется статус.


Эх((

sergeevizh
sergeevizh
Репутация: 17
Сообщения: 151
Зарегистрирован: 16.10.2016
С нами: 7 лет 5 месяцев

Сообщение #8 sergeevizh » 16.01.2019, 20:37

trainracing писал(а):Да, я поставил AC
sergeevizh писал(а):Вот так будет если у вас AC
$price = $price+max(0.02, $price*$this->fee/100);
или
$price = round(($price/98)*100, 2);

попробовал сейчас так как вы посоветовали оба варианта, все равно не меняется статус.


Эх((

Не могу понять вашей причины, так как сам попробовал и у меня проходит платеж и статус меняется.
Либо вы на странице https://sp-money.yandex.ru/myservices/online.xml не указали ответ
Либо что-то переделано в коде

Добавлено спустя 6 минут 23 секунды:
Главное оставить галочку на HTTP ответ на станице https://sp-money.yandex.ru/myservices/online.xml
В общем так:
Если у вас только оплата картой то в строчке https://github.com/OkayCMS/Okay_Lite/blob/master/payment/Yandex/Yandex.php#L9
меняете

Код: Выделить всё

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

на

Код: Выделить всё

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

Расчет остается без изменений
https://github.com/OkayCMS/Okay_Lite/blob/master/payment/Yandex/Yandex.php#L24

или комментируете код

Код: Выделить всё

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

и расчет https://github.com/OkayCMS/Okay_Lite/blob/master/payment/Yandex/Yandex.php#L24
меняете на

Код: Выделить всё

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

trainracing M
Аватара
trainracing M
Возраст: 31
Репутация: 13
Сообщения: 121
Зарегистрирован: 07.10.2016
С нами: 7 лет 5 месяцев
Сайт

Сообщение #9 trainracing » 17.01.2019, 07:15

Огромное спасибо!!!!

связка

Код: Выделить всё

$price = $price+max(0.02, $price*$this->fee/100);
 // Комиссия Яндекса, %
   private $fee = 2;


Работает!!!! Статус оплачен!!!))))))))))))))


Название раздела: Вопросы по работе с OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Вопросы по работе с OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 30 гостей