Сообщение #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);
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 не получится.
То как вы хотите 1в1 не выйдет. После оплаты сервер Яндекс присылает ответ на сайт с суммой меньше чем в заказе, скрипт не может перевести в статус оплачено, так как сумма заказа больше чем сумма оплаты после вычета комиссии.
Должно быть так:
Сумма в корзине 1590₽
Сумма на странице оплаты 1590+2%=1621,80
После оплаты, вы у себя в Яндекс.Кошельке увидите сумму 1590₽ и сайт получит ответ от сервера с суммой 1590₽ только в этом случае заказ станет оплачен.
А у вас получается в корзине 1590₽
На странице оплаты 1590-2%=1558,20₽
Сервер Яндекс высылает в callback.php ответ, okay смотрит, что id заказ совпадает, а вот сумма нет. Вот и не ставит в оплачен, так как суммы разные.
[quote="trainracing"][quote="sergeevizh"]Один в один цена быть не может. Так как после оплаты ответ идёт уже с другой ценой.
Я сделал так :
$price = round(($price/98)*100, 2);[/quote]
дело в том, что цена реально 1в1, при оплате картой яндекс не берет комиссию, и если товар стоит 2руб то я плачу с карты ровно 2 руб, я тау оплатил тестово 3 раза уже
Я поэтому и не понимаю, почему статус не меняется(([/quote]
Вот так будет если у вас AC
$price = $price+max(0.02, $price*$this->fee/100);
или
$price = round(($price/98)*100, 2);