Прием яндекс денег без api - оплата заказа

Дмитрий Кесаев

aka Zlobniy Babko
Заблокирован
Регистрация
10 Май 2007
Сообщения
1.332
Реакции
1.235
  • Автор темы
  • Заблокирован
  • #1
КАК идея. Может и было такое....
Прием яндекс денег без api - оплата заказа в магазине. Чтоб официально не подключаться к яндексу и прием средств записывался в бд. Через парсер, CURL!!!

Регаем почту на яндексе + подключаем яндекс деньги (платежный пасс храним как ппц как)

Создаем файл авторизации в яндексе
123.php привязываем его к крону на каждые 12 часов.
PHP:
<?php
$url = "http://passport.yandex.ru/passport?mode=auth"; //УРЛ, куда отправлять данные
 
/*
Переменные, которые мы будет отправлять Яндексу в виде POST запроса:
*/
$login = 'lloggggggin'; //Логин к почте
$passwd = 'passssss'; //Пароль к почте
$user_cookie_file = $_SERVER['DOCUMENT_ROOT'].'/555/cookies.txt'; //Полный путь до файла, где будем хранить куки
$idkey = '3121235564020nVDfxvth2'; //Хрен знает что
$retpath = 'https://money.yandex.ru/'; //Откуда мы пришли на страницу авторизации
$timestamp = ''; //Хрен знает что
$twoweeks = 'yes'; //Две недели какие-то
$In = 'Войти'; //Кнопка входа
 
/*
Функция:
*/
function auth($url) {
global $user_cookie_file, $idkey, $retpath, $timestamp, $login, $passwd, $twoweeks, $In; // Получаем все POST данные
/*
Небольшая прелюдия с инифиализацией cURL и прочей шулухой
*/
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
 
curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file); //Куки раз
curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie_file); //Куки два
 
curl_setopt($ch, CURLOPT_POST,1); //Будем отправлять POST запрос
 
/*
Формируем и отправляем тот самый POST запрос.
Как видите, это простая строка, мало чем отличающаяся от GET.
*/
curl_setopt($ch, CURLOPT_POSTFIELDS,"idkey=$idkey&retpath=$retpath&timestamp=$timestamp&login=$login&passwd=$passwd&twoweeks=$twoweeks&In=$In");
$html = curl_exec($ch);
curl_close($ch);
return $html; //Возвращаем ответ Яндекса
}
 
auth($url); // Авторизируемся.
?>

Затем создаем файл
приема денег и запись в БД

index.php

где <input name=receiver value=410011255078125 type=hidden> ваш кошель
PHP:
<style type="text/css">#navbar-iframe { display:block }html, body {font: normal 12px Tahoma;color: #333;}a {outline: none;text-decoration: none;}div#wrap {width: 800px;margin: 50px auto;}img {border: 0px;}.b-widget-commercial{background: #fff 0 bottom repeat-x;background-size: 10px 100%;border-radius: 8px;box-shadow: 0 1px 3px #999;margin: 2px 3px 4px;padding: 20px;font-family: Arial, sans-serif;font-size: 13px;width:320px;height: 140px;}
</style>
 
<div class=b-widget-commercial>
 
<form method=POST target="_top" action="https://money.yandex.ru/quickpay/confirm.xml">
<input name=receiver value=410011255078125 type=hidden>
<input name=FormComment value="$orders" type=hidden>
<input name=short-dest value="$orders" type=hidden>
<input name=writable-targets value=false type=hidden>
<input name=writable-sum value=true type=hidden>
<input name=comment-needed value=false type=hidden>
<table><tbody>
<tr>
<td>
<label>Назначение платежа:
</label>
</td>
<td>
 
<div style="text-align:left;">Оплата заказа №'$orders'</div>
<input name=targets value="$orders" type=hidden>
</td>
</tr>
<tr>
<td>
<label>Сумма:
</label>
</td>
<td>
 
<div style="width: 60px;">
<input style="text-align: right;" data-type=number name=sum type=text>
</div>
 
<span>в рублях.
</span>
</td>
</tr>
<tr>
<td style="text-align: right;"><a target="_blank" href="https://money.yandex.ru/"><img src="images/ym_logo.gif" alt="Yandex.Money"></a>
</td>
<td>
 
<span>
<input name=submit-button value="Оплатить" type=submit>
</span>
</td>
</tr></tbody>
</table>
</form>
</div>

где $orders - берется из заказа, т.е. номер заказа это д/быть как назначение платежа

6c6e04a51e8a.png


Это парсер приема денег в яше с записью дальнейшей в бд

PHP:
<?php
$uas = array(
    //Chrome
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13",
    "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.307.9 Safari/532.9",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.1 (KHTML, like Gecko) Chrome/6.0.437.3 Safari/534.1",
    //IE
    "Mozilla/4.0 (compatible; MSIE 6.0; MSN 2.5; Windows 98)",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
    "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022)",
    //Opera
    "Opera/9.02 (Windows NT 5.1; U; en)",
    "Opera/10.00 (Windows NT 6.0; U; en) Presto/2.2.0",
    "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.5.24 Version/10.52"
    );
 
    $head = array(
        'Host: slil.ru',
        'Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
        'Accept-Language: en-us,en;q=0.5',
        'Accept-Encoding: gzip,deflate',
        'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7',
        'Keep-Alive: 300',
        'Connection: keep-alive'
    );
 
function browser($url)
{
$url = "https://money.yandex.ru/history-in.xml?show-archive-records=true";
$user_cookie_file = $_SERVER['DOCUMENT_ROOT'].'/555/cookies.txt'; //Полный путь до файла, где будем хранить куки
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_URL,$url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
      curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
// не проверять SSL сертификат
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
// не проверять Host SSL сертификата
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
      curl_setopt($ch, CURLOPT_USERAGENT, $uas[rand(0, count($uas)-1)]);
      curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file);
      curl_setopt($ch, CURLOPT_COOKIEJAR,  $user_cookie_file);
          $html = curl_exec($ch);
      curl_close($ch);
      return $html;
}
 
preg_match_all('~<td[^>]*?nowrap[^>]*?class="summ summ-incoming-payment"[^>]*?>(.*?)</td>~is', browser($url), $money);
echo "<table><tr><td valign='top'><b>Сумма перевода</b><br />";
print implode('<br />', array_slice($money[1], 0, 12));
 
preg_match_all( '~</td>\s*<td[^>]*?nowrap[^>]*?class="history-date-td"[^>]*?>(.*?)</td>~is', browser($url), $data);
echo "</td><td valign='top'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign='top'><b>Дата перевода</b><br />";
print implode('<br />', array_slice($data[1], 0, 12));
 
 
preg_match_all( '~\s*?class="payment-name-link" style=""[^>]*?>(.*?)</a></td>~is', browser($url), $order);
echo "</td><td valign='top'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign='top'><b>Назначение</b><br />";
print implode('<br />', array_slice($order[1], 0, 12));
echo "</td></tr></table>";
 
?>

a5f2933bdceb.png


Следовательно в назначении должен писаться № $orders (пример № 706)

Эти данные спарсиваются и записываются в БД

PHP:
<?
mysql_connect("localhost", "root_db", "pass")
or die ("<FONT COLOR=\"#FF0000\"><B>ОШИБКА:</B></FONT> Невозможно соединиться с базой данных.");
mysql_select_db("name_db")
or die ("<FONT COLOR=\"#FF0000\"><B>ОШИБКА:</B></FONT> Базы данных не существует.");
mysql_query("SET NAMES cp1251");
$out_summ = $_REQUEST["LMI_PAYMENT_AMOUNT"]; //сумма перевода
$purse = $_REQUEST["LMI_PAYER_PURSE"]; // кошель того кто перевел
$odate = $_REQUEST["LMI_SYS_TRANS_DATE"]; // дата перевода
$sql = mysql_query("INSERT INTO `orders` (out_summ, purse, odate) VALUES ('".$out_summ."', '".$purse."', '".$odate."')");
echo "OK$inv_id\n";
?>

И изначально в магазине данные о заказе записываются и присваивается как обычно статус в обработке

Затем необходимо сделать сверку по сумме по дате (времени с разбегом не более 5 минут) и назначении платежа.

Если все сходится - то товар отдается покупателю или статус меняет на проплачено


Как-то так, напильником обработать))) На коленке накидывал все...
и запускать.
 
$out_summ = $_REQUEST["LMI_PAYMENT_AMOUNT"]; //сумма перевода
$purse = $_REQUEST["LMI_PAYER_PURSE"]; // кошель того кто перевел
$odate = $_REQUEST["LMI_SYS_TRANS_DATE"]; // дата перевода

Это я ошибаюсь или Вы ошиблись? Вы вроде пишете про яндекс деньги, а переменные используете от WebMoney. LMI_*
Или яндекс деньги тоже такие переменные использует?
 
  • Автор темы
  • Заблокирован
  • #3
Я указал только ка пример... Переменные будут от парсера, типа такого:

$out_summ = array_slice($money[1], 0, 12);
$odate = array_slice($data[1], 0, 12)
$purse = array_slice($order[1], 0, 12)
 
Привет, я недавно только в php и может я несу бред Но! У меня было идея такая а почему не сделать просто например скрипт отдельный который бы заносил при оплате в БД количество денег например в строке баланс?
Я видел панели без билинга но с ячейкой баланс. Там администратор все в ручную переводил и добавлял.
 
  • Автор темы
  • Заблокирован
  • #5
Так оно и должно быть... При оплате заказа, заносится в БД: дата, номер заказа, сумма.
После оплаты парсером выдираются данные и тоже заносятся в БД... потом идет сопоставление изначальных данных и конечных - если сходятся - то статус ОПЛАЧЕНО...
Сопоставление думаю по дате делать и по времени, т.е. с разбегом в 3-5 минут!
 
Назад
Сверху