Добрый день сообщество Хабра! Я наткнулся на платежную систему liqpay. В принципе, система производит очень приятное первое впечатление.
Но при попытке интегрировать его в сайт я столкнулся с рядом недостатков и проблем.
Я хотел бы поделиться с вами их описанием и решением.
Форум поддержки
Очень забавная картинка — быстро просматриваю форум в поисках ответов на свои вопросы по API и интеграции.Подавляющее большинство ответов от liqpay: «На почту отправлено письмо с решением вашей проблемы»… Что это за форум, простите? Общение через приват? Зачем тогда он нужен, если для получения ответа мне все равно нужно написать письмо в поддержку? Извините, я не нашел решения.
Думаю, в службе поддержки все равно поймут, что проще дать публичный ответ, чем отвечать приватно всем, у кого возникла проблема.
Составы
Вторым сюрпризом для меня стала неточность в формулировках условий.Например, на странице я выбрал «API для приема платежей в пользу продавца»:
Пароль продавца (merchant_sig) — это уникальная запись продавца, которая выдается при регистрации вашего магазина в нашей системе.Получается, что при регистрации мерчанту даются две подписи, и ни одна из них не называется Merchant_sig. Один называется «Подпись для операции отправки денег API LiqPay», другой — «Подпись для других операций».Посмотреть свой Merchant_id (номер продавца) и Merchant_sig (подпись продавца {пароль}) можно в разделе Настройки магазина после авторизации.
Цитата из «Инструкции по установке Liq&Buy 1.2»
Итак, для приема платежей по API через Интернет подойдет не тот, который содержит слова «API LiqPay», а тот, который подойдет для других операций.
Версия PHP и sha1
Информации о версии PHP в рекомендациях по интеграции я не нашел (или просто не увидел).Как оказалось, liqpay до сих пор предъявляет такое системное требование.
Примеры кода: PHP: $sign=base64_encode(sha1($merc_sign.$xml.$merc_sign,1)); Perl: $sign=encode_base64(sha1($merc_sign.$xml.$merc_sign)); Цитата из «Инструкция по установке Liq&Buy 1.2 :: Создание подписи»Я поддерживаю ряд проектов, использующих PHP версии 4, поэтому первый тест я написал специально для него.
Интерпретатор выдал мне ошибку, что количество параметров функции Sha1 не совпадает. Как обычный разработчик обращаюсь к документации и вижу, что второй, необязательный параметр появился только в версии 5.0.0.
Решение:
- Просто: обновитесь до PHP 5.
- Сложно (:)): Внимательно прочитайте документацию и поймите разницу в работе функции с параметром и без него.
С параметром — хешем, в виде двоичной строки из 20 символов.
Соответственно, нужно ли вам преобразовать 40-битное шестнадцатеричное число в двоичную строку? состоящий из 20 символов.
Как оказалось, делается это довольно просто — функция Пакет сделаю это за тебя :)
Общий PHP5:sha1($str,true) = PHP4:pack( "H40", sha1($str) )
Вуаля :)
Если будет интересно и возникнут еще какие-то ситуации, обязательно напишу :)
Теги: #liqpay #опыт #php #sha1 #бинарные строки #php
-
Yota – Или Как Можно Всё Узнать
19 Oct, 24 -
Safari Для Веб-Разработчиков
19 Oct, 24 -
Леопард Уже Рядом
19 Oct, 24