FollowMe
23.10.2011, 18:42
В этой статье я расскажу как сделать на сайте, средствами PHP автоматическую оплату по ВМ без аттестата продавца.
Нам нужно:
Любой WMID
Аккаунт на digiseller.ru
Знания PHP (Косвенные)
Недавно потребовалось прикрепить к сайту оплату (автоматическую) и тут облом: нужен аттестат продавца.
Меня это не смутило и я вспомнил о сервисе digiseller.ru, а именно о том, что там есть API. С помощью XML можно проверять оплату товара.
Первым делом я сделал аккаунт, добавил новый товар с неограниченым количеством продаж и выставил цену. Так-же товаром был уникальный код, который и будет проверятся у нас на сайте.
Получил ссылку: http://www.oplata.info/asp/pay_unit.asp?id_d=*******
http://clip2net.com/clip/m0/1319376370-clip-2kb.png
Добавил в панельке 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 = '
тут твой id
'.$code.'
'.$sign.'
';
$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 logi n='".$login."'") or die("MySQL ERROR: ".mysql_error());;
echo "Счет пополнен! Редирект...";
echo '
var delay = 2000;
setTimeout("document.location.href=\'\/\'", delay);
';
} else {
echo "Код уже был использован";
}
}
} else {
echo "Введите правильный код!";
}
}
ВАЖНО! После того как получили информацию и обновили баланс клиента - создайте базу с кодами, поскольку ввести один и тот-же код можно несколько раз и баланс соответственно пополнится несколько раз. (В скрипте это реализовано)
С Вами был ИдиЗаМной! Бросил в тебя веником
Нам нужно:
Любой WMID
Аккаунт на digiseller.ru
Знания PHP (Косвенные)
Недавно потребовалось прикрепить к сайту оплату (автоматическую) и тут облом: нужен аттестат продавца.
Меня это не смутило и я вспомнил о сервисе digiseller.ru, а именно о том, что там есть API. С помощью XML можно проверять оплату товара.
Первым делом я сделал аккаунт, добавил новый товар с неограниченым количеством продаж и выставил цену. Так-же товаром был уникальный код, который и будет проверятся у нас на сайте.
Получил ссылку: http://www.oplata.info/asp/pay_unit.asp?id_d=*******
http://clip2net.com/clip/m0/1319376370-clip-2kb.png
Добавил в панельке 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 = '
тут твой id
'.$code.'
'.$sign.'
';
$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 logi n='".$login."'") or die("MySQL ERROR: ".mysql_error());;
echo "Счет пополнен! Редирект...";
echo '
var delay = 2000;
setTimeout("document.location.href=\'\/\'", delay);
';
} else {
echo "Код уже был использован";
}
}
} else {
echo "Введите правильный код!";
}
}
ВАЖНО! После того как получили информацию и обновили баланс клиента - создайте базу с кодами, поскольку ввести один и тот-же код можно несколько раз и баланс соответственно пополнится несколько раз. (В скрипте это реализовано)
С Вами был ИдиЗаМной! Бросил в тебя веником