Jump to content

У кого есть решение Яндекс кассы для оплаты со скидкой


Recommended Posts

Есть у кого готовое решение по скидке при оплате яндекс кассы? 

Чтоб скидка делилась на все товары пропорционально.

Edited by Kami
Link to post
Share on other sites

1) Получаем скидку для каждого товара $order->coupon_discount / count($purchases)

2) вычитаем скидку из каждого товара

 

Так можно получить много разных неожиданных сюрпризов, если в заказе товар не один. Например, отрицательную цену на товар...

Link to post
Share on other sites

 

Так можно получить много разных неожиданных сюрпризов, если в заказе товар не один. Например, отрицательную цену на товар...

 

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

имею ввиду в плане как правильней составить алгоритм?

Link to post
Share on other sites

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

имею ввиду в плане как правильней составить алгоритм?

 

Конечно, можно. Но тогда можно получить НУЛЕВУЮ ЦЕНУ на товар, что немногим лучше...

 

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

 

 

Правильно - вычитать скидку у каждого  товара пропорционально его стоимости.

Link to post
Share on other sites

Готового решения видимо нет.

Но такое решение было логично сделать не только при оплате Яндекс.Кассой, а вообще из коробки при применении купона на сайте, чтобы менялись {$cart->total_price|convert} и {($purchase->variant->price*$purchase->amount)|convert} корзины. Видимо как-то нужно реализовать это в api/Cart.php

 

Если брать за основу пример из одной стать, допустим

В корзине 3 товара

1. 2827 руб ( {($purchase->variant->price*$purchase->amount)|convert} )

2. 1365 руб ( {($purchase->variant->price*$purchase->amount)|convert} )
3. 1538 руб ( {($purchase->variant->price*$purchase->amount)|convert} )
Итого 5730 руб ( {$cart->total_price|convert}  )
Скидка 300 руб
 
Первое, что нам нужно узнать, это долю товара в итоговой сумме
1. 2827*100%/5730 = 0.49 %
2. 1365*100%/5730 = 0.24 %
3. 1538*100%/5730 = 0.27 %
 
Второе узнать сумму скидки каждого товара
1. 300*0,49 = 148 руб
2. 300*0,24 = 71 руб
3. 300*0,27 = 81 руб
 
Третье вычесть сумму пропорциональной скидки из каждого товара
1. 2827-148 = 2679 руб ( {($purchase->variant->price*$purchase->amount)|convert} )
2. 1365-71 = 1294 руб ( {($purchase->variant->price*$purchase->amount)|convert} )
3. 1538-81 = 1457 руб ( {($purchase->variant->price*$purchase->amount)|convert} )
 
Итого после применения скидки 300 руб и пропорционально ее распределили
5430 руб ( {$cart->total_price|convert}  )
Link to post
Share on other sites

Вопрос в другом ,кто может сделать и какая цена доработки?

 

Также стоит модуль скидка от суммы заказа, который в зависимости от суммы заказа делает  ,скидку.

 

Соответственно все родные скидки должны работать + скидка от суммы заказа. Пишите цену и сроки.

Link to post
Share on other sites

Вопрос в другом ,кто может сделать и какая цена доработки?

 

Также стоит модуль скидка от суммы заказа, который в зависимости от суммы заказа делает  ,скидку.

 

Соответственно все родные скидки должны работать + скидка от суммы заказа. Пишите цену и сроки.

 

Чтобы это сделать, надо сначала точно знать, что хотите. Стандартный модуль Яндекс-кассы

https://yandex.ru/support/checkout/instructions/simpla.html

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

Если у Вас что-то свое специфичное, то надо и объяснять в деталях...

Link to post
Share on other sites

 

Чтобы это сделать, надо сначала точно знать, что хотите. Стандартный модуль Яндекс-кассы

https://yandex.ru/support/checkout/instructions/simpla.html

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

Если у Вас что-то свое специфичное, то надо и объяснять в деталях...

 

использовать в "идеальном варианте" нужно только на яндекс кассе, не трогая симплу, но если так не получится то можно и на стороне симплы пересчитывать. т.е. чтоб при заказе было все как обычно, а при отправке в яндекс кассу скидка делилась (как указано выше) 

 

скидки 3

родная скидка группы

купоны 

скидка от суммы заказа.

Link to post
Share on other sites

использовать в "идеальном варианте" нужно только на яндекс кассе, не трогая симплу, но если так не получится то можно и на стороне симплы пересчитывать. т.е. чтоб при заказе было все как обычно, а при отправке в яндекс кассу скидка делилась (как указано выше) 

 

скидки 3

родная скидка группы

купоны 

скидка от суммы заказа.

 

Ничего не понятно.

Стандартно при работе с Яндекс Кассой  НЕ отправляются отдельные товары и цены отдельных товаров. Если Вам надо отправлять, то писать надо точно и конкретно - что, где, когда...

Link to post
Share on other sites

 

Ничего не понятно.

Стандартно при работе с Яндекс Кассой  НЕ отправляются отдельные товары и цены отдельных товаров. Если Вам надо отправлять, то писать надо точно и конкретно - что, где, когда...

 

Как это не отправляется? Отправляется в чеке 

 

https://kassa.yandex.ru/developers/api#receipt

 

Соответственно из за этого и происходит ошибка.

 

[2020-06-10 11:15:20] [info] Message: Send request: POST /payments with body: {"amount":{"value":"5399.00","currency":"RUB"},
"description":"\u041e\u043f\u043b\u0430\u0442\u0430 \u0437\u0430\u043a\u0430\u0437\u0430 \u21164756",
"receipt":{"items":[{"description":"\u0411\u043b\u043e\u043a \u043f\u0438\u0442\u0430\u043d\u0438\u044f \"\u0427\u0410\u0421\u0422\u041e\u041a\u041e\u041b \u041d\"","amount":{"value":"5999.00","currency":"RUB"},"quantity":1,"vat_code":1}],
"email":"test@ma.ru"},"payment_method_data":{"type":"bank_card"},
"confirmation":{"type":"redirect","return_url":"https:\/\/site.ru\/payment\/YandexMoneyApi\/callback.php?order=4756&action=return"},
"metadata":{"cms_name":"ya_api_simpla","module_version":"1.0.6","order_id":"4756"},"capture":true} with headers: {"Idempotence-Key":"NDc1NjAuyedtyfdfteyMTUxMzM1MDAgMTU5MTc3NjkyMA=="} 
[2020-06-10 11:15:20] [info] Message: Response with code 400 received with headers: {"0":"HTTP\/1.1 400","Keep-Alive":"timeout=10000, max=100","Signature":"v1 2672aa58 1 MGUCMQCCV4pp\/zomn0ocZmXuTdNqJ1nfwm9+UjW12b7Q\/1O24TzgSDhS+eiEqNCxHNqafIUCMD63MqhOfXghsG7f1PGvSraP00AC3lxyYsgPdldTTr1y\/tedfz0AqoLCn\/Em6tz9aw==","Content-Type":"application\/json;charset=UTF-8","Content-Length":"305","Date":"Wed, 10 Jun 2020 08:15:20 GMT"} and body: {
  "type" : "error",
  "id" : "77e056582c7-33a5-49ac-bbcf-6f39194335697a",
  "code" : "invalid_request",
  "description" : "Invalid parameter's value (for example, the value is illegal or its format is incorrect). Send the value in accordance with the documentation.",
  "parameter" : "receipt.items.amount"
} 
[2020-06-10 11:15:20] [error] Message: Invalid parameter's value (for example, the value is illegal or its format is incorrect). Send the value in accordance with the documentation..Error code: invalid_request.Parameter name: receipt.items.amount. 

Link to post
Share on other sites

 

Ничего не понятно.

Стандартно при работе с Яндекс Кассой  НЕ отправляются отдельные товары и цены отдельных товаров. Если Вам надо отправлять, то писать надо точно и конкретно - что, где, когда...

 

наверное с несколькими товарами будет понятней

 

[2020-06-10 11:15:20] [error] Message: Invalid parameter's value (for example, the value is illegal or its format is incorrect). Send the value in accordance with the documentation..Error code: invalid_request.Parameter name: receipt.items.amount. 
[2020-06-10 11:25:25] [info] Message: Send request: POST /payments with body: {

"amount":{"value":"1935.00","currency":"RUB"},"description":"\u041e\u043f\u043b\u0430\u0442\u0430 \u0437\u0430\u043a\u0430\u0437\u0430 \u21164757",
"receipt":{"items":[{"description":" \u041a\u0430\u0440\u0442\u0440\u0438\u0434\u0436\u0438 GREEN RS  15 ",
"amount":{"value":"1200.00","currency":"RUB"},"quantity":1,"vat_code":1},{"description":" \u041a\u0430\u0440\u0442\u0440\u0438\u0434\u0436\u0438 YELLOW 14 ",
"amount":{"value":"950.00","currency":"RUB"},"quantity":1,"vat_code":1}],"email":"test@ma.ru"},
"payment_method_data":{"type":"bank_card"},"confirmation":{"type":"redirect","return_url":"https:\/\/site.ru\/payment\/YandexMoneyApi\/callback.php?order=4757&action=return"},
"metadata":{"cms_name":"ya_api_simpla","module_version":"1.0.6","order_id":"4757"},"capture":true} with headers: {"Idempotence-Key":"NDc1NzfaertwrtAuMTI2MjEwMDAgMTU5MTc3NzUyNQ=="} 
[2020-06-10 11:25:25] [info] Message: Response with code 400 received with headers: {"0":"HTTP\/1.1 400","Keep-Alive":"timeout=10000, max=100",
"Signature":"v1 2672acb5 1 MGQCMH2DMYnYKW0VrFO2xCoUesOMh8bL\/m8HfyhS5Ocy7\/pFD2cifW2W5pmuxLRl6trwtz7bKQIwW\/AFTMRlqaqdzzKmjUjmgo7IbBtrwtL8j8wo6XOPbcPSJmJepr8Mi8ylMbkPtaXrR\/JD","Content-Type":"application\/json;charset=UTF-8","Content-Length":"305","Date":"Wed, 10 Jun 2020 08:25:24 GMT"} and body: {
  "type" : "error",
  "id" : "6c12222dae7e-6d6a-4acb-bbc0-a8f25d7e178d",
  "code" : "invalid_request",
  "description" : "Invalid parameter's value (for example, the value is illegal or its format is incorrect). Send the value in accordance with the documentation.",
  "parameter" : "receipt.items.amount"
} 
[2020-06-10 11:25:25] [error] Message: Invalid parameter's value (for example, the value is illegal or its format is incorrect). Send the value in accordance with the documentation..Error code: invalid_request.Parameter name: receipt.items.amount. 

Link to post
Share on other sites

Понятно только то, что у Вас свое специфичное что-то сделано.

Если надо в отправку форму подставлять цены товаров пересчитанные, то можно сделать. Обращайтесь в личку...

Link to post
Share on other sites

там ничего специфичного нет, обычный чек для соответствия 54ФЗ

 

если у товаров ценник не сильно отличается, а скидка 5-10% максимум, то решение из моего сообщения вполне работает. И никаких отрицательных цен не получим.

 

если же один товар стоит условно 1р, а другой 1000р, то действительно придется "веса" цен на товары городить, как предложил alexivchenko

 

единственный косяк может быть если цены нормально не делятся, скидка получится не целое число рублей, а например 10р 45,67коп

 

еще вариант чуть проще, но не всем подойдет, тк возможны махинации со стороны покупателя. Делаем всю скидку на 1 товар, если его стоимость выше, чему величина скидки. 

 

Все вышеперечисленное вполне реально сделать внутри платежного модуля, НЕ трогая Симплу

По времени зависит от используемых типов скидок, особенно если они нестандартные.

Но думаю не больше 3 часов.

 

Если кому-то нужно - пишите

Link to post
Share on other sites

Понятно только то, что у Вас свое специфичное что-то сделано.

Если надо в отправку форму подставлять цены товаров пересчитанные, то можно сделать. Обращайтесь в личку...

 

ничего специфического, просто применяю купон с 10% скидкой.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...