Как мы пытались внедрить Яндекс.Кассу

в 13:26, , рубрики: php, Веб-разработка, Яндекс API, яндекс.деньги, яндекс.касса

Предисловие

Сколько живу рядом с миром технологий, всегда думал что есть ИТ элита — люди которые с закрытыми глазами пишут код, с легкостью могут в уме генерировать md5 и переписывать ядра unix. И, сказать по правде, я думал именно такие ребята работают в компании Яндекс. Мы очень удивились, что их детище под названием Яндекс.Касса находится в глубочайшем альфа тестировании. О некоторых проблемах, с которыми мы столкнулись и пути их решения в этой статье.

Яндекс.НеБетаДаже

После успешной регистрации в системе вам будет предложено выбрать путь интеграции: для настоящих Гиков — http, или менее сложный email. У нас самописная CMS, поэтому выбрать готовый шаблон интеграции не представилось возможным.
Нам успешно предоставили документацию, демо доступ, и с установленным дедлайном наша работа закипела.

О личном кабинете
Личный кабинет совсем не работает, точнее — работает один раз, поэтому всю информацию необходимо передавать/изменять/получать только у вашего личного менеджера. Будьте внимательны.

После долгих мучений, мы таки предстали перед задачей сделать тестовый платеж. Но, как и бывает в жизни — первый блин комом. Мы сразу же получили сообщение о технической ошибке. Обратившись в техподдержку, поняли что виноваты в невнимательности чтения документации и вскоре, уже полностью подготовленные, приступили ко второму тестовому платежу. Уже на 20 тестовом платеже стало понятно, что инструмент еще совсем сырой и не готов к боевым будням.

Наши ошибки, и их решения

#1

Самой глупой, на мой взгляд, ошибкой стала опечатка в адресе checkurldemo.
Мы случайно, даже не представляю как, написали четвертой русскую букву «с», и, на мой взгляд, самое ужасное, что мы узнали об этом спустя 3 дня. Яндекс никак не учитывает факт опечатки и тех поддержка не стесняясь возвращает нам лог со знаком вопроса в url.

Примерный ответ техподдержки #1

Вот такой ответ получает наш сервер, проверьте доступность сервера:

<html> <head> <title>che?kurldemo</title> <META name="keywords" content="?????? ???????,, che?kurldemo" /> <META name="description" content="?????? ???????  che?kurldemo" /> <script src="/project/js/jquer

Будьте внимательны, хоть это и глупая ошибка, но она имеет место быть, и вы, к сожалению, с этой проблемой останетесь наедине.

#2

Беда не приходит одна. В документации не написано, что Яндекс.Касса использует в своей XML сериализации временные метки формата ISO8601, на выяснение этого у нас ушел еще один день.

ISO8601:2004

Формат определяется как:
YYYY-MM-DDThh:mm:ss.fZZZZZ
Расшифровка формата
YYYY
год, точно 4 цифры
MM
месяц, точно 2 цифры (01=январь и т. д.)
DD
день месяца, точно 2 цифры (от 01 до 31)
T
латинский символ «T», должен быть в верхнем регистре
hh
часы, точно 2 цифры (24-часовой формат, от 00 до 23)
mm
минуты, точно 2 цифры (от 00 до 59)
ss
секунды, точно 2 цифры (от 00 до 59)
f
дробная часть секунды (от 1 до 6 цифр),
может отсутствовать, в этом случае следует опускать и разделитель «.»
ZZZZZ
Описатель временной зоны, может принимать значения:
Z — UTC, символ «Z» должен быть в верхнем регистре.
+hh:mm или -hh:mm — смещение относительно UTC (GMT) (показывает, что указано локальное время, которое на данное число часов и минут опережает или отстает от UTC).

Обязательно должны присутствовать все указанные элементы, допустимо опускать только дробную часть секунд (в этом случае следует опускать и разделитель «.»). Если нужно задать только дату, то время всё равно следует указать как 00:00:00.
Примеры:
2011-07-24T19:00:00+04:00 — 19 часов 00 минут 24 июля 2011 года, часовой пояс — UTC + 4 часа.
2004-07-24T15:00:00Z — тот же момент времени в каноническом представлении.
2004-07-24T15:00:00.666Z — тот же момент времени плюс 666 миллисекунд.

Обратите внимание, пример неправильной функции:

<?php
echo date(DATE_ISO8601);
?>

Выводит неверный формат, так как часовой пояс должен быть разделен знаком ":".

#3

У нас был дедлайн, у нас был клиент. Третья ошибка, настолько замурована в сознании Яндекса, что признали ее только через 3 дня наших мучений. Ни личный кабинет, ни ваш менеджер, ни специалист технической поддержки не скажут вам того, что скажу я.

Секрет от Яндекса

Параметр shopPassword имеет ограничение по длине в 20 символов.

Клиент настоял на сложности всех паролей, и мы как примерные исполнители выполнили все указания, заполнив поле shopPassword 28 символами алфавита НЛО. Но спустя семь кругов ада отладки ошибки «Неверный md5», оказалось, что оно имеет ограничение в 20 символов, и Яндекс по умолчанию режет пароль до этой длины.

Цитаты службы поддержки:

"… ничего страшного не случилось..."

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

В заключении

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

Автор: cruzo

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js