Liqpay И Php4 – Опыт Внедрения И Вариант Решения Проблем

Добрый день сообщество Хабра! Я наткнулся на платежную систему liqpay. В принципе, система производит очень приятное первое впечатление.

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

Я хотел бы поделиться с вами их описанием и решением.



Форум поддержки

Очень забавная картинка — быстро просматриваю форум в поисках ответов на свои вопросы по API и интеграции.

Подавляющее большинство ответов от liqpay: «На почту отправлено письмо с решением вашей проблемы»… Что это за форум, простите? Общение через приват? Зачем тогда он нужен, если для получения ответа мне все равно нужно написать письмо в поддержку? Извините, я не нашел решения.

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



Составы

Вторым сюрпризом для меня стала неточность в формулировках условий.

Например, на странице я выбрал «API для приема платежей в пользу продавца»:

Пароль продавца (merchant_sig) — это уникальная запись продавца, которая выдается при регистрации вашего магазина в нашей системе.

Посмотреть свой Merchant_id (номер продавца) и Merchant_sig (подпись продавца {пароль}) можно в разделе Настройки магазина после авторизации.

Цитата из «Инструкции по установке Liq&Buy 1.2»

Получается, что при регистрации мерчанту даются две подписи, и ни одна из них не называется Merchant_sig. Один называется «Подпись для операции отправки денег API LiqPay», другой — «Подпись для других операций».

Итак, для приема платежей по 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.

Решение:
  1. Просто: обновитесь до PHP 5.
  2. Сложно (:)): Внимательно прочитайте документацию и поймите разницу в работе функции с параметром и без него.

Без этого параметра sha1 выводит хэш в виде 40-битного шестнадцатеричного числа.

С параметром — хешем, в виде двоичной строки из 20 символов.

Соответственно, нужно ли вам преобразовать 40-битное шестнадцатеричное число в двоичную строку? состоящий из 20 символов.

Как оказалось, делается это довольно просто — функция Пакет сделаю это за тебя :) Общий

PHP5:sha1($str,true) = PHP4:pack( "H40", sha1($str) )

Вуаля :) Если будет интересно и возникнут еще какие-то ситуации, обязательно напишу :) Теги: #liqpay #опыт #php #sha1 #бинарные строки #php

Вместе с данным постом часто просматривают: