Мобильная
версия

Подключение онлайн оплаты на сайт. WalletOne

Дата:

Я очень давно не писал в блог - всему дело мой проект, интернет магазин ROBOM.ru, но вот у меня появилась новая тема для поста. Сегодня мы поговорим об оплате на сайте, а точнее об одном из операторов - walletone Единый кошелек

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

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

Проблема 1.

Если вы регистрируетесь в любой системе как юридическое лицо, то вам нужно иметь расчетный счет. Расчетный счет в банке это не тоже самое что счет на который вам поступает зарплата. Расчетный счет это какая-то фигня, которая требуется для юр лиц (этот момент не слишком важен) и стоит 800 рублей в месяц (а это уже очень важно).

Так как у меня пока было всего 2-3 заказа общей суммой не больше 2-3 тысяч рублей а прибыль (делим на 4 и отнимаем всякие издержки) в районе 500 рублей, я не мог себе позволить спускать всю прибыль на расчетный счет - есть дела и поважнее (например подкопить на jaguar xj220, правда такими темпами я буду копить очень долго, но я отвлекся), поэтому решено было регистрироваться как физ. лицо. 

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

Проблема 2.

Если вы регистрируетесь как физ. лицо, то в большинстве платежных агрегаторов комиссия списывается не с вас, а с клиента. Многие пользуются этим способом, но у меня же уважающий себя магазин, и, как мне кажется, если у клиента во время заполнения корзины висит счет в 1000 рублей, а при онлайн оплату резко узнается что к оплате 1050 рублей, клиент может заподозрить что если тут обман, то и с товаром могут надуть, и вообще уйдет с сайта, бросив заказ недооформленным.

Есть вариант что сразу же высчитывать комиссию из суммы - например если сумма 1000 рублей, а комиссия 5%, то находим сумму, при добавлении к которой 5% будет как раз 1000 рублей

x / 105 * 100

1000 / 105 * 100 = 952.380952381 // слишком много цифр после запятой

Добавим к 952.38 5% и получим - 999.999. Остается надеяться на то, что агрегатор округлит правильно. Хорошо, вроде все ок, но при подключении нескольких систем для оплаты (ЯД, ВМ, карты) возникает...

Проблема 3

У разных систем оплаты разная комиссия. Собственно, это заявление перечеркивает все наши старания по решению проблемы №2.

Хорошо, посмотрим что великий и могучий гугл сможет мне предложить еще.

Так как единственный ресурс которому я доверяю это хабр, то начал искать информацию про онлайн оплату именно там.

И именно там я наткнулся на агрегатора walletOne

У них была самая маленькая комиссия, из всех платежек, которые подходят моим требованиям.

После просмотра отзывов о нем я разочаровался в нем, и стал искать другие. После просмотра отзывов о всех остальных я понял что отзывы в интернете это судя по всему какой-то троллинг, так как все системы (любые, не только онлайн платежи) были жестко покрыты матом в каждом 2ом комментарии. Именно поэтому я и вернулся к рассмотрению walletOne

Немного о WalletOne.

  1. Красивый сайт - Сайт у них реально красивый и функциональный. С этим спорить не буду - тут вроде как все ок.
  2. Полная деанонимизация - получать деньги вы сможете когда угодно, а вот выводить только после подтверждения личности (кстати часть негативных отзывов было именно по этому поводу)
  3. Убогое API - Ну реально убогое. Примеры написаны языком года эдак 2004-2006. Кодировка windows-1251, и все передающиеся параметры приходится в нее переводить, и полностью не рабочий скрипт проверки подписи при ответе, висит у них на сайте.
  4. Отсутствие тестовых платежей - приходится каждый раз для теста платить по рублю. Мне конечно не жалко, но каждый раз вводить данные надоедает.

Собственно зачем вся эта статья - я набросал класс, для генерации кнопки оплаты, и проверки данных, и хочу его вам представить - может кто-то еще пользуется/собирается начать, и ему он может быть полезен.

А вот и сам класс

<?php

class Wallet
{
private $test = 1; // тестовые платежи (любая сумма заменяется на 1 рубль.)
private $key = 'ВАШ СЕКРЕТНЫЙ КЛЮЧ В СИСТЕМЕ';
private $fields = array();

function __construct(){
$fields['WMI_MERCHANT_ID'] = 'ВАШ ИД В СИСТЕМЕ';
$fields['WMI_CURRENCY_ID'] = '643';
$fields['WMI_EXPIRED_DATE'] = date('Y-m-d H:i:s', time() + 3600);
$fields['WMI_SUCCESS_URL'] = 'http://shop.local/pay.php'; // URL успешный
$fields['WMI_FAIL_URL'] = 'http://shop.local/pay.php'; // URL с ошибкой
$this->fields = $fields;
}


function pay($inv_id, $out_summ, $email){

$this->fields['WMI_CUSTOMER_EMAIL'] = $email;

if($this->test){
$this->fields['WMI_PAYMENT_AMOUNT'] = 1;
} else {
$this->fields['WMI_PAYMENT_AMOUNT'] = $out_summ;
}

$this->fields['WMI_PAYMENT_NO'] = $inv_id;
$this->fields['WMI_DESCRIPTION'] = 'BASE64:' .
base64_encode('Оплата заказа #' . $inv_id);

uksort($this->fields, 'strcasecmp');
$signature = iconv("utf-8", "windows-1251", join('', $this->fields));

$this->fields['WMI_SIGNATURE'] = base64_encode(pack('H*', md5($signature . $this->key)));

$form = '<form action="https://wl.walletone.com/checkout/checkout/Index" method="POST">';
foreach($this->fields as $key => $item){
$form .= "\n" . '<input type="hidden" name="' . $key . '" value="' . $item . '">';
}
$form .= '<input type="submit" class="pay_online" value="Оплатить онлайн" /></form>';
return $form;
}


function checkPayment($request)
{
if (
!isset($request['WMI_SIGNATURE']) ||
!isset($request['WMI_PAYMENT_NO']) ||
!isset($request['WMI_ORDER_STATE'])
) {
return array(
'pay' => false,
'security' => false
);
}

$params = array();
foreach ($request as $name => $value) {
if ($name !== 'WMI_SIGNATURE') $params[$name] = urldecode($value);
}
uksort($params, 'strcasecmp');
$signature = join('', $params);

$signature = base64_encode(pack('H*', md5($signature . $this->key)));

var_dump($signature);
if ($signature != urldecode($request['WMI_SIGNATURE'])) {
return array(
'pay' => false,
'security' => false
);
} else {
return array(
'pay' => strtoupper($_POST['WMI_ORDER_STATE']) == 'ACCEPTED',
'security' => true
);
}
}
}

Тут думаю что пояснения не нужны - код и так слишком прост. Я просто упорядочил тот отстой, который лежал на их сайте в разделе API. Используется он тоже достаточно легко

$pay = new wallet();
$form = $pay->pay('1234567', '1000', 'mail@robom.ru');
echo $form;

if($_POST['WMI_SIGNATURE']){
var_dump($pay->checkPayment($_POST));
}

Метод checkPayment возвращает массив, где

  • pay - успешная оплата
  • security - правильные ли данные

После нажатия на кнопку мы получаем достаточно симпатичную форму оплаты

Единственный недостаток - надпись 

Вы совершаете пополнение кошелька физического лица №

Но, не думаю что кто-то будет смотреть на нее, так что мне пока все нравится.

В следующей статье постараюсь рассказать ощущение от работы с ними.

P.S.

На момент написания статьи поддержка не отвечала мне уже больше 6 часов.

Теги: #интернет-магазин, #robom.ru, #walletOne

Ваша оценка:

Рейтинг: 8.8 (Оценок: 5)

Комментарии (9):

lerr
2016-04-20 12:25
В связи с проблемами у робокассы, очень актуальна ваша статья. Спасибо за класс!!
vik12j
2016-03-24 03:12
Здравствуйте, спасибо за статью, как раз хочу попробовать с данной системой. Правда я хочу ключи для своего софта по продавать.
vik12j
2016-03-24 03:13
@vik12j:*попробовать поработать
DOC_tr
2016-03-25 22:29
@vik12j:Насколько мне известно, им все равно за что вам платят. Так что дерзайте ;)
vik12j
2016-03-25 23:40
@DOC_tr:Пытаюсь, но пока идет переписка с тех. поддержкой. Много чего по требовали, но опыта работы с платежными агрегаторами у меня нету, пытаюсь понять и разобраться что нужно для того что бы страница оплаты прошла модерацию.
Требуют виджет ихний разместить на страницу, так и не смог найти его у них.
Разместить гарантию возврата средств, так и не понял что это.
Пользовательское соглашение, тоже непонятно мне самому свое написать или ихнее.

На каждый вопрос приходится ожидать по долгу, ответ приходит на следующий день :(
DOC_tr
2016-03-28 13:56
@vik12j:У меня подобных проблем не возникало. И виджет не требовали установить, и опыта не требовали...

Возможно мне просто попался менеджер хороший. Например писал недавно в тех поддержку (не помню уже по какой причине), меня очень долго мурыжыли, и отвечали вполне очевидными ответами, и т п.

Откопал ящик менеджера, и проблему решили в течении получаса.
Adoafw
2016-01-11 16:31
Проблем нет с сервисов?
DOC_tr
2016-01-11 16:38
@Adoafw:Пока обороты не такие большие, но проблем не наблюдалось - отчетность хорошая, задержек нету, деньги выводил только раз (~15к руб.) пришли сразу и без проблем.
DOC_tr
2016-01-11 16:44
@Adoafw:Единственное что поддержка как отвечала медленно так и отвечает ;)

Комментарий:

Copyright © DOC_tr 2015-2017 г. Все права защищены
Яндекс.Метрика
Перейти к мобильной версии