Перейти к содержимому


Интеграция Я.деньги


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 13

#1 Beauty

Beauty

    Пользователь

  • Пользователи
  • PipPip
  • 29 сообщений
  • ГородМосква

Отправлено 28 Март 2015 - 00:42

Добрый день!

Описываю личный опыт настройки платежей через Яндекс.Деньги и взаимодействия через API с системой Я.Д. для автоматического изменения статуса оплаты заказа после успешного платежа банковской картой или Я.Д  на номер кошелька Я.Д.

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

Приступим:

ВАЖНО: Вам понадобится домен и хостинг с поддержкой PHP и FTP доступом, куда будут отправляться уведомления от Я.Д и где они будут обрабатываться.

1.На данном хостинге разместите файл с расширением .php, проверьте чтобы он был доступен по ссылке http://ваш_домен/ваш_файл.php

2. В редакторе шаблонов, в шаблон "Просмотр заказов" внесите следующие исправления
В конце файла, перед строчкой
<p><a class="button" href="http://{NET_DOMAIN}/" class="back-link">Перейти на главную</a></p>
вставьте код
	 {% IFNOT ORDER_IS_PAYMENT=1 %} <!-- Форма оплаты отобразится только при статусе заказа "не оплачен" -->
	 {% IF ORDER_PAYMENT_ID = xxxxxx %} <!-- Добавьте новый способ оплаты в настройках и добавьте его ID вместо XXXXXX -->
	 <h2 class="orderstageH">Оплата заказа онлайн</h2>
		 <form method="POST" action="https://money.yandex.ru/quickpay/confirm.xml">
		 <input type="hidden" name="receiver" value="xxxxxxxxxxxxxx"> <!-- Номер вашего кошелька Я.Д. -->
		 <input type="hidden" name="formcomment" value="Оплата заказа {ORDER_NUM}">
		 <input type="hidden" name="short-dest" value="Оплата заказа {ORDER_NUM}">
		 <input type="hidden" name="label" value="{ORDER_NUM}"> <!-- Не меняйте данное значение, это важно -->
		 <input type="hidden" name="quickpay-form" value="donate">
		 <input type="hidden" name="targets" value="Оплата заказа {ORDER_NUM}">
		 <input type="hidden" name="sum" value="{ORDER_SUM}" data-type="number">
		 <input type="hidden" name="comment" value="Оплата от {ORDER_CONTACT_PERSON}">
		 <input type="hidden" name="need-fio" value="false">
		 <input type="hidden" name="need-email" value="false">
		 <input type="hidden" name="need-phone" value="false">
		 <input type="hidden" name="need-address" value="false">
			 <table class="contact-table succs">
			 <tbody>
			 <tr>
				 <td ><label><input type="radio" name="paymentType" value="AC">&nbsp;Картой</input></label></td>
				 <td class="cellR"><label><input type="radio" name="paymentType" value="PC">&nbsp;Я.Деньги</input></label></td>
			 </tr>
			 </tbody>
			 </table>
		 <input type="submit" name="submit-button" value="Оплатить" class="oplatit"><br/><br/>
		 </form>
	 {%ENDIF%}
	 {%ENDIF%}
Стили для отображения таблицы можете задать по своему усмотрению

3. Перейдите по адресу http://ваш_им/admin/api и добавьте свое приложение (полный доступ к разделу заказы), скопируйте полученный ключ доступа (понадобится на шаге 5)

4. Перейдите по адресу https://sp-money.yan...ices/online.xml для настройки HTTP-уведомлений от Я.Д. и укажите в качестве адреса для уведомлений http://ваш_домен/ваш_файл.php поставьте галочку отправлять уведомления и скопируйте "Секрет" по кнопке "Показать секрет"

5. Отредактируйте ваш_файл.php добавив в него следующий код:
<?
$notification_secret = "xxxxxxxxxxxxxxxxxxx"; //сюда вставить "Секрет" Я.Д. полученный на шаге 4
$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"];
$label = $_POST["label"];
$sha1_hash = $_POST["sha1_hash"];
$test_notification = $_POST["test_notification"];
$hash = $notification_type . '&' . $operation_id . '&' . $amount . '&' . $currency . '&' . $datetime . '&' . $sender . '&' . $codepro . '&' . $notification_secret . '&' . $label; //формируем хеш для проверки что уведомление не поддельное
$sha1 = hash("sha1", $hash); //кодируем в SHA1
//Ниже - проверка на валидность уведомления и запрос на изменение статуса оплаты если все верно
if ( $sha1 == $sha1_hash ) {
if ($label != '') {
$url = 'http://ваш_им/api/v1/orders/update/'. $label; // вместо ваш_им вставьте домен вашего интернет-магазина
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array(
'secret_key' => 'xxxxxxxxxxxxxxxxxxxxxx', // код доступа приложения созданного на шаге 3
'form[order_payment]' => 1,
)));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$resultSrc = curl_exec ($ch) or die(curl_error($ch));
$result = json_decode($resultSrc , true);
echo $result; echo $resultSrc; echo curl_error($ch);
curl_close ($ch);
}
} else {
echo 'error';
}

?>

ИТОГ:
Что мы получили. Клиент создает закза, выбирает онлайн оплату, подтверждает заказ и на странице просмотра заказа выбирает способ оплаты и оплачивает заказ. После оплаты он увидит в статусе заказа "Оплачено". Форма онлайн оплаты на странице просмотра заказа со статусом "Оплачен" отображаться не будет. В администрировании заказов Вы увидите новый заказ со статусом оплачен. Удобно и Вам и клиенту.

ЕСЛИ ОБНАРУЖИТЕ ОШИБКИ В КОДЕ ИЛИ БУДУТ ИНТЕНРЕСНЫЕ ДОПОЛНЕНИЯ ИЛИ ВОПРОСЫ, ОБЯЗАТЕЛЬНО ПИШИТЕ, БУДЕМ ВМЕСТЕ СОВЕРШЕНСВОВАТЬ НАШИ ИНТЕРНЕТ-МАГАЗИНЫ!

КАК БЛАГОДАРНОСТЬ, БУДУ ПРИЗНАТЕЛЬНА ЕСЛИ РАЗМЕСТИТЕ ССЫЛКУ НА МОЙ ИНТЕРНЕТ МАГАЗИН HTTP://SHELLAC.WS НА СВОИХ СТРАНИЦАХ В СОЦ СЕТЯХ И ПОДЕЛИТЕСЬ ЕЙ С ДРУЗЬЯМИ!

Сейчас работаю над системой автоматического расчета стоимости доставки в зависимости от веса и оценочной стоимости груза. Если у кого-то есть наработки по данной теме, прошу поделиться!

#2 sVs

sVs

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 232 сообщений
  • ГородМосква

Отправлено 28 Март 2015 - 02:05

Здорово! Что модераторы думают про этот код?

#3 kislovodchanin

kislovodchanin

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 111 сообщений
  • ГородКисловодск

Отправлено 28 Март 2015 - 11:58

Просмотр сообщенияShellac.ws (28 Март 2015 - 00:42) писал:

Добрый день!

Описываю личный опыт настройки платежей через Яндекс.Деньги и взаимодействия через API с системой Я.Д. для автоматического изменения статуса оплаты заказа после успешного платежа банковской картой или Я.Д  на номер кошелька Я.Д.

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

Приступим:

ВАЖНО: Вам понадобится домен и хостинг с поддержкой PHP и FTP доступом, куда будут отправляться уведомления от Я.Д и где они будут обрабатываться.

1.На данном хостинге разместите файл с расширением .php, проверьте чтобы он был доступен по ссылке http://ваш_домен/ваш_файл.php

Доброго времени суток.
Всё что Вы описали у меня реализовано давно.
Единственный упор в хостинг с поддержкой и доп домен.
не великоваты затраты для того что бы автоматом менялись статусы заказов?
Другой реализации данной возможности Вы не нашли?

#4 Beauty

Beauty

    Пользователь

  • Пользователи
  • PipPip
  • 29 сообщений
  • ГородМосква

Отправлено 29 Март 2015 - 09:26

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

По затратам могу сказать что они себя окупают, так как есть бесплатные хостинги с php с неплохим аптаймом, то затраты это домен, то есть от 300 рублей на год. Но плюс в том что клиенты хотят после оплаты увидеть результат, по крайней мере изменение статуса заказа. До того как был внедрен данный скрипт, многие клиенты перезванивали и спрашивали почему не изменился статус, прошла ли оплата, согласитесь, такая ситуация уменьшает процент доверия к магазину, и 300 рублей за это не большая плата.

#5 kislovodchanin

kislovodchanin

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 111 сообщений
  • ГородКисловодск

Отправлено 29 Март 2015 - 13:42

Просмотр сообщенияShellac.ws (29 Март 2015 - 09:26) писал:

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

По затратам могу сказать что они себя окупают, так как есть бесплатные хостинги с php с неплохим аптаймом, то затраты это домен, то есть от 300 рублей на год. Но плюс в том что клиенты хотят после оплаты увидеть результат, по крайней мере изменение статуса заказа. До того как был внедрен данный скрипт, многие клиенты перезванивали и спрашивали почему не изменился статус, прошла ли оплата, согласитесь, такая ситуация уменьшает процент доверия к магазину, и 300 рублей за это не большая плата.

Здравствуйте!
Был бы крайне признателен за наводку на бесплатный хостинг, с поддержкой php,
согласен, реализация автоматического изменения статуса оплаты значительно повлияет на уровень доверия к магазину.

И ещё вопросик не по теме, да простят меня за офтоп всемогущие админы.
На каком шаблоне реализован сайт Вашего ИМ?

#6 Beauty

Beauty

    Пользователь

  • Пользователи
  • PipPip
  • 29 сообщений
  • ГородМосква

Отправлено 29 Март 2015 - 20:37

Добрый вечер!
Мой магазин на основе шаблона Хамелеон
Бесплатный хостинг с поддержкой php который использую я - Hostinger

#7 kislovodchanin

kislovodchanin

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 111 сообщений
  • ГородКисловодск

Отправлено 29 Март 2015 - 22:51

Просмотр сообщенияShellac.ws (29 Март 2015 - 20:37) писал:

Добрый вечер!
Мой магазин на основе шаблона Хамелеон
Бесплатный хостинг с поддержкой php который использую я - Hostinger

Странно, всё настроил верно, от яндекса приходит ответ при проверке, что уведомление отправлено, а статус заказа не меняется.
Видимо где то косячок в коде...

#8 sVs

sVs

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 232 сообщений
  • ГородМосква

Отправлено 30 Март 2015 - 05:06

Поясните: на сам домен, на котором будет файл PHP, клиент попадет или нет?

#9 kislovodchanin

kislovodchanin

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 111 сообщений
  • ГородКисловодск

Отправлено 30 Март 2015 - 08:15

Просмотр сообщенияsVs (30 Март 2015 - 05:06) писал:

Поясните: на сам домен, на котором будет файл PHP, клиент попадет или нет?

Здравствуйте.
Нет, этот домен и файл используется лишь яндексом для информирования api сторика, о том, что юзвер оплатил заказ.
Вся проблема в том, что конструкция кода, предложенная уважаемой

Цитата

имеет в своей структуре маленький косячок-с.
А так как я не очень силён в php, то и выяснить где причина того, что статус заказа не меняется,
хотя яндекс и посылает статус 200 ок, не могу с ходу.

#10 kislovodchanin

kislovodchanin

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 111 сообщений
  • ГородКисловодск

Отправлено 30 Март 2015 - 09:05

Дико извиняюсь перед

Цитата

в Вашем коде ошибки нет, полностью рабочая конструкция.
Это я вчерась с устали неверно, не точно указал доступ к api сторика.
Всё работает на ура!
Респект автору, за нововведение, которое позволит сделать магазины удобнее!

#11 Beauty

Beauty

    Пользователь

  • Пользователи
  • PipPip
  • 29 сообщений
  • ГородМосква

Отправлено 30 Март 2015 - 18:59

Добрый день!
Да, в коде ошибок нет, у меня именно этот код работает на двух сайтах.
Очень хорошо что мой код поможет Вам в работе, буду работать над новыми идеями по улучшению сервиса!

#12 mixperm

mixperm

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 226 сообщений
  • ГородПермь

Отправлено 29 Сентябрь 2015 - 08:10

Hostinger оказался не надежным. Отключает по своему желанию сайты с API. Причем не только домен с API, а аккаунт целиком с нормальными сайтами.

#13 Beauty

Beauty

    Пользователь

  • Пользователи
  • PipPip
  • 29 сообщений
  • ГородМосква

Отправлено 02 Октябрь 2015 - 23:04

Хостингер был предложен как вариант, использовать можно любой хостинг с поддержкой php.

#14 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 23 788 сообщений

Отправлено 02 Июль 2016 - 02:18

Цитата

В связи с использованием двух систем приёма оплаты по старым и по новым адресам действительно наблюдалась ошибка в работе нового модуля, который был написан при взаимодействии наших разработчиков и команды разработчиков Яндекс.Кассы. Сегодня проблему изменения статуса заказа исправили, статус заказа меняется корректно. По крайней мере протестировали на 2х тестовых заказах, статус менялся корректно.
Относительно передачи параметра с номером заказа, то он передаётся в форме, другой вопрос, что он может не выводиться где-то отдельно. В их форме есть всего лишь одно поле, в котором передавать пользовательский параметр, который будет отображаться на стороне Яндекс.Кассы. Передаётся он в поле customerNumber, сейчас там передаётся ФИО пользователя, можем поменять на иное. Для этого напишите в этой ветке форума, мы все вместе подумаем, что лучше указать в этом поле.





Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных