2 заметки с тегом

Интернет-магазин

Общий принцип оплаты в интернет-магазине через платежную систему (HTTP)

Черновик — есть неточности

Если вам нужно будет организовать оплату на своем сайте и под ваш фреймворк или ЦМС нет готовых решений — его не сложно написать самому.

Общий принцип работы

Все платежные системы работают примерно по одной схеме — у них есть API, который работает в частности через HTTP. При оплате товара магазин отправляет запрос на нужный URL платежки с параметрами заказа.

Нужно несколько параметров, например некий ID заказа, стоимость (price), вспомогательные параметры (например lang(язык), currency (валюта) и т. д...)

Наша цель — редиректить наш заказ на этот адрес, например в контроллере при оплате:

return $this->redirect('https://merchant.ru/payment.aspx?' . http_puild_query([
    'id' => $order->id,
    'price' => $order->price,
]))

Когда сервер платежки получает запрос и пользователь оплачивает — происходят два варианта события: Success или  Fail

Success — значит все отлично и происходит простой редирект назад в магазин.

При регистрации в системе своего проекта мы укзаываем successUrl — именно на него платежка и редиректит, например http://shop.dev/payment/success

Fail — происходит аналогично

URL для проверки заказа

Но при этом есть самый главный URL для взаимодействия — processUrl, этот URL интернет-магазина запрашивается «тайком» платежной системой тогда, когда осуществляется платеж.

Порядок работы:

  1. Оплата → (redirect) → merchant.ru/payment.aspx?id=123&price=1000
  2. Пользователь оплачивает
  3. Когда он нажимает оплатить, платежная система идет с запросом на processUrl, например на /payment/process (GET или POST), передавая параметры — чтобы проверить заказ.
  4. Наш сайт отвечает OK или не OK
  5. Если ОК → платежка списывает с человека деньги, и выводит примерно текст «Перейи на сайт магазина» (которая ведет на successUrl)

Сигнатура

Но если бы такая схема работала, то человек мог подменить к примеру цену, занизив ее, потому передают секретный ключ в параметре signature

https://merchant.ru/payment.aspx?id=123&price=1000&signature=dfg7fh6f54jhfgjh8ол65рро6

Например это мог бы быть некий хэш параметров:

md5($id . ':' . $price);

Но такой можно подменить или разгадать, потому делается чуть сложнее.

Платежки выдают пару ключей:

$password1= 'gfg5fh7677hjf';
$password2= '454545';

Почему нельзя обойтись одним — первый используется при кодировании нашых параметров, то есть
вместо md5($id . ’:’ . $price);
делают md5($id . ’:’ . $price . ’:’ . $password1);

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

Грубо говоря, через password1 мы подписываем запрос, а на сервере платежки идет проверка, когда платежка отправляет ответ — она подписывает его через password2. Так как данные ключи есть и у клиента и у платежки — это происходит безопасно и удобно.

2017   Интернет-магазин   Конспект   Платежные системы

Запуск интернет-магазина «Регионлифта»

«Регионлифт» продает и монтирует лифты для жилых домов, бизнес‑центров и торговых центров. У компании свое производство в Новосибирске, свой сервисный центр и дилерство нескольких лифтовых производителей из Китая.

Задачи:
— за 2 недели переделать старый сайт и запустить новый
— сделать более-менее свежий дизайн
— спарсить и перенести товары со старого сайта

Бюджет:
45 000 рублей

Шаблоны сайта сверстал на Бутстрапе, дизайн сделал классическим и не броским, без эффектов.

У сайта есть возможность разным товарам или категориям выбирать свой шаблон с дизайном — для этого даже запилил свой костыль для ЦМС.

SEO-оптимизация:

Сделал базу для продвижения в поисковиках:
— нет лишнего кода в хедере
— структура страниц у всех верная (заголовки, подзаголовки)
— используются теги каноникал и микроформатов (опенграф в шапке и схема.орг в теле страницы)
— слеши/301 редиректы работают
— если товару не заданы мета, то собираются динамически
— адаптивный дизайн — отображается на всех устройствах
— сайт работает на шустрой простой ЦМС

Дополнительно привел в порядок бордак с аккаунтами, доступы пришлось собирать по крупицам — где-то восстанавливать, где-то звонить старым мастерам, свел все документацию в Гугл-доксах.

Проблемы при разработке

Работа была экстренной, что привело к нескольким факапам (были спрогнозированы, сильно не навредили):

— Взял ответственность, понимая, чем чреваты проекты «надо вчера» — это привело к потери взаимопонимания, полная воля в работе вылилась в небольшие недовольства дизайном, не смотря на быструю работу.

— Не было обсуждения с директором — все детали сотрудничества обговаривал с юристом, главным инженером, с кем угодно, но не с директором.

— Неправильный договор — обе стороны отделались фиктивным договором, в итоге я не смог поставить ссылку на проект (им было стыдно). Заказчик боялся, что я удалю проект, этапы работы были размазаны, что вызывало проблемы оплаты.

— Не было ТЗ — это конечно не беда, я работаю без техзадания — задаю вопросы и рисую понимание задачи, также не собирался чисто формально удовлетворить какие-то «пункты» — делал как мне позволяют навыки и время. Спорный пункт.

Выводы и плюсы

Несмотря на ошибки, проверил несколько гипотез на своем опыте.
+ Работать нужно напрямую с директором, все важные вопросы только с ним.
+ Не брать срочные проекты — скорее всего тут зашиты проблемы и можно угодить в минное поле.
+ Запускать итерациями сайт круто — сначала запустил сайт без корзины, фильтра и многих других штук, но влез про времени, у клиента рабочий продукт. Последующими итерациями добавили функционал.
+ Не бояться ответственности. Вел сразу 3 проекта и сам делал — по срокам никого не подвел, только дорабатывал данный сайт на 1 неделю больше.

Сайт в архиве

Благодарность Захару Тебенькову из «Регионлифта» за помощь.
Сайт наполняется клиентом.


2016   Интернет-магазин   Портфолио   Сайты