Код обработки платежей для Новой Интеркассы
Всем привет. Сегодня очень короткий и очень полезный пост о приёме платежей с помощью сервиса Интеркасса.
Интеркасса недавно запустила новую версию с крутым и удобным дизайном, а также абсолютно новыми протоколами.
Обитает она пока на поддомене new.interkassa.com в бета-версии и активно предлагает пользователям переход в новый интерфейс. Правда почему-то в уведомлении забыли написать, что нужно изменить запросы. Из-за этого оплата просто перестаёт работать.
Надо сказать, что теперь стало гораздо удобней тестировать приём оплаты и другие функции. И взаимодействие стало намного более функциональным и понятным.
Чего не скажешь о Робокассе, которая заставляет изрядно попортить себе нервы, только для того, чтобы не брать комиссии с плательщиков, а удерживать её с продавца. Недавно имел удовольствие ковыряться с этим вопросом. В Интеркассе этот вопрос решается парой кликов в админке.
Но это лирика. Перейдём к действительно важным вещам. А точнее к паре функций, которых вполне достаточно, чтобы автоматизировать приём оплаты в небольшом интернет-магазине.
Я не хотел написать полный класс взаимодействий с сервисом и использовать по максимуму все возможности (которых немало). Нет. Меня интересует лишь простейшие функции, которые позволяют принимать платёж и проверять результат оплаты.
Вот эти функции. Пользуйтесь на здоровье.
/** * Функция инициализирует оплату * * @return string $payment_form */ public function InitiatePayment($shop_id, $sum, $payment_id, $payment_desc) { $payment_form = ' <form name="payment" action="https://sci.interkassa.com/" method="post" encENGINE="utf-8"> <input type="hidden" name="ik_co_id" value="' . $shop_id . '"> <input type="hidden" name="ik_am" value="' . $sum . '"> <input type="hidden" name="ik_pm_no" value="' . $payment_id . '"> <input type="hidden" name="ik_desc" value="' . $payment_desc . '"> <input type="submit" value="Оплатить"> </form>'; return $payment_form; } , где $shop_id - идентификатор кассы $sum - сумма платежа (в формате 0.00) $payment_id - номер заказа $payment_desc - описание платежа /** * Функция проверяет результат оплаты * * @return boolean */ public function CheckResult($shop_id, $secret_key, $post, $test_key) { if ($post['ik_co_id'] != $shop_id) return false; $ik_key = ($post['ik_pw_via'] == 'test_interkassa_test_xts') ? $test_key : $secret_key; $data = array(); foreach ($post as $key => $value) { if (!preg_match('/ik_/', $key)) continue; $data[$key] = $value; } $ik_sign = $data['ik_sign']; unset($data['ik_sign']); ksort($data, SORT_STRING); array_push($data, $ik_key); $signString = implode(':', $data); $sign = base64_encode(md5($signString, true)); if ($sign === $ik_sign && $data['ik_inv_st'] == 'success') return true; else return false; } , где $shop_id - идентификатор кассы $secret_key - секретный ключ $post - массив $_POST $test_key - тестовый ключ
Код абсолютно рабочий. Уже принял несколько платежей с его помощью.
Именно эти функции уже успешно используются в JSale и скоро попадут в JCart.
Поделиться ссылкой:
Комментарии:
Предпочитаю не связываться с этой платёжкой. Они сдают информацию о своих клиентах направо и налево.
Ребята, обязательно делайте проверку суммы платежа, особенно если вы не используете цифровую подпись при формировании платежа!
Кроме как проверка суммы, должна быть и проверка валюты! Если у вас мультивалютный!! магазин и вы не формируете подпись на Интеркассу, то ОБЯЗАНЫ не только хранить валюту выставленного счета, но и проверять ее, когда данные приходят от Интеркассы.
Код действительно рабочий и понятный, в отличии от описания в документации Интеркассы...
В общем, большое спасибо!
Вопрос нуба, возможно. Можете показать пример как применять эти функции?
Помогите мне вот сюда https://c-wd.ru/ настроить оплату. Не могу сделать даже с вашим скриптом.
Вопрос. Пытаюсь подключить оплату Интеркассы, и все вроде хорошо, при удачной оплате открывается страница успешной оплаты, но от Интеркассы мне приходит только: ik_co_id, ik_inv_id, ik_inv_st и ik_pm_no. Почему так мало данных? Где ik_sign и ik_am? Ведь их нужно сравнить с тем что я высылал.
Или эти данные приходят не на URL успешной оплаты, а на URL взаимодействия?
Interesting! I love to know more about it. https://gamingrig.com/best-x470-motherboard/
Hmm. This is really nice.
http://healthybodyhealthymind.com/winsol-review/
Стоит обратить внимание, что данные от интеркассы передаются в кодировке UTF-8 и на это следует обратить внимание, если Ваш сайт не в этой кодировке.