Делаем оплату WebMoney без аттестата

DaVinci

VIP
Проверенный продавец
Продавец
Подтвержденный
Регистрация
23.07.13
Сообщения
951
Реакции
946
Депозит
0
Покупок
8
Продаж
21
В этой статье я расскажу как сделать на сайте, средствами PHP автоматическую оплату по ВМ без аттестата продавца.

Нам нужно:
Любой WMID
Аккаунт на digiseller.ru
Знания PHP (Косвенные)

Недавно потребовалось прикрепить к сайту оплату (автоматическую) и тут облом: нужен аттестат продавца.

Меня это не смутило и я вспомнил о сервисе digiseller.ru, а именно о том, что там есть API. С помощью XML можно проверять оплату товара.

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

Получил ссылку: http://www.oplata.info/asp/pay_unit.asp?id_d=*******

Добавил в панельке digiseller кошельки, авторизовал их и прикрепил.
Попробовал оплатить 3 единицы товара и все прошло удачно.

Работает так: На WMID покупателя высылается счет, который он оплачивает, а дальше digiseller делает все сам.


На сайте я быстро сделал форму, сверху которой была ссылка на oplata.info для покупки уникального кода.
Формой-же было поле, в которое вводится этот код, посылается запрос на digiseller и получаешь: Сумму оплаты и валюту.

Вот скрипт приема купленного с digiseller кода и обработки:

Код:
if (isset($_POST['xcode'])) { // Если код передается скрипту с именем xcode 

  if (strlen($_POST['xcode']) == 16) { // Код на digiseller равен 16 символам 

        $code = $_POST['xcode']; // Вводим переменную с кодом 

          function _GetAnswer($address, $xml){  
     $ch = curl_init($address);  
     curl_setopt($ch, CURLOPT_HEADER, 0);  
     curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  
     curl_setopt($ch, CURLOPT_POST,1);  
     curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);  
     $result=curl_exec($ch);  
     return $result;  
   }  
   $sign = md5("id продавца:$code:password от продавца"); // Тут заполняем в соответствии с своими данными 
   $xml = '<?xml version="1.0" encoding="windows-1251"?> 
<digiseller.request> 
<id_seller>тут твой id</id_seller> 
<unique_code>'.$code.'</unique_code> 
<sign>'.$sign.'</sign> 
</digiseller.request>'; 
   $answer=_GetAnswer("http://shop.digiseller.ru/xml/check_unique_code.asp", $xml);  
   $xmlres = simplexml_load_string($answer);   

function object2array($object) { return @json_decode(@json_encode($object),1); }  
$xmlres = object2array($xmlres); // переводим XML в массив 

if ($xmlres['retdesc'] == "не найден unique_code (код ошибки 1)") { // проверяем, есть ли вообще такой код 
echo "Код не найден"; 
} else { 
$type = $xmlres['type_curr']; // получаем валюту (WMZ, WMR, WMU) 
$amount = $xmlres['amount']; // получаем сумму 
if ($type == "WMR") { 
$amount = $amount/30; // тут меняете курс рубля на свой 

} 
if ($type == "WMU") { 
$amount = $amount/8; // тут курс гривны на свой 
} 
$amount = round($amount,3); 
$inv = $xmlres['inv']; 
$date = date('l jS \of F Y h:i:s A'); 
$query = mysql_query("SELECT * FROM pays WHERE inv='$inv'"); // pays - таблица с оплатами 
  if (mysql_num_rows($query) == 0) { // проверяем, был ли использован код 
  $login = "логин пользователя"; 

$query = mysql_query("INSERT INTO pays (inv, amount, date, login) VALUES ('$inv', '$amount', '$date', '$login')") or die("MySQL ERROR: ".mysql_error());;  


$balance = mysql_query('select * from users where login = "'.$login.'" limit 0,1') or die("MySQL ERROR: ".mysql_error());; // получаем текущий баланс пользователя 

$balance = mysql_fetch_array($balance); 
$balance = $balance['balance']; 
$amount = $balance + $amount; // прибавляем 

$query = mysql_query("UPDATE users SET balance='$amount' WHERE login='".$login."'") or die("MySQL ERROR: ".mysql_error());;  

echo "Счет пополнен! Редирект..."; 
echo '<script language = \'javascript\'> 
  var delay = 2000; 
  setTimeout("document.location.href=\'\/\'", delay); 
</script>'; 

} else { 
echo "Код уже был использован"; 
} 
} 
} else { 
  echo "<b>Введите правильный код!</b>"; 
  } 
  }
ВАЖНО! После того как получили информацию и обновили баланс клиента - создайте базу с кодами, поскольку ввести один и тот-же код можно несколько раз и баланс соответственно пополнится несколько раз. (В скрипте это реализовано)
 
Сверху Снизу