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

Тема в разделе "PHP", создана пользователем Дмитрий Кесаев, 12 апр 2012.

Модераторы: latteo
  1. Дмитрий Кесаев

    Дмитрий Кесаев aka Zlobniy Babko

    Заблокирован
    Регистр.:
    10 май 2007
    Сообщения:
    1.332
    Симпатии:
    1.266
    КАК идея. Может и было такое....
    Прием яндекс денег без 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($chCURLOPT_URL,$url);
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
     
    curl_setopt($chCURLOPT_COOKIEFILE$user_cookie_file); //Куки раз
    curl_setopt($chCURLOPT_COOKIEJAR$user_cookie_file); //Куки два
     
    curl_setopt($chCURLOPT_POST,1); //Будем отправлять POST запрос
     
    /*
    Формируем и отправляем тот самый POST запрос.
    Как видите, это простая строка, мало чем отличающаяся от GET.
    */
    curl_setopt($chCURLOPT_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="$orderstype=hidden>
    <
    input name=short-dest value="$orderstype=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="$orderstype=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 - берется из заказа, т.е. номер заказа это д/быть как назначение платежа

    [​IMG]

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

    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($chCURLOPT_URL,$url);
          
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
          
    curl_setopt ($chCURLOPT_RETURNTRANSFER1);
    // не проверять SSL сертификат
    curl_setopt ($chCURLOPT_SSL_VERIFYPEER0);
    // не проверять Host SSL сертификата
    curl_setopt ($chCURLOPT_SSL_VERIFYHOST0);
          
    curl_setopt($chCURLOPT_USERAGENT$uas[rand(0count($uas)-1)]);
          
    curl_setopt($chCURLOPT_COOKIEFILE$user_cookie_file);
          
    curl_setopt($chCURLOPT_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], 012));
     
    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], 012));
     
     
    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], 012));
    echo 
    "</td></tr></table>";
     
    ?>
    [​IMG]

    Следовательно в назначении должен писаться № $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 минут) и назначении платежа.

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


    Как-то так, напильником обработать))) На коленке накидывал все...
    и запускать.
     
  2. alex.kirov

    alex.kirov Создатель

    Регистр.:
    18 авг 2010
    Сообщения:
    29
    Симпатии:
    7
    Это я ошибаюсь или Вы ошиблись? Вы вроде пишете про яндекс деньги, а переменные используете от WebMoney. LMI_*
    Или яндекс деньги тоже такие переменные использует?
     
  3. Дмитрий Кесаев

    Дмитрий Кесаев aka Zlobniy Babko

    Заблокирован
    Регистр.:
    10 май 2007
    Сообщения:
    1.332
    Симпатии:
    1.266
    Я указал только ка пример... Переменные будут от парсера, типа такого:

    $out_summ = array_slice($money[1], 0, 12);
    $odate = array_slice($data[1], 0, 12)
    $purse = array_slice($order[1], 0, 12)
     
  4. KORLEONE

    KORLEONE Писатель

    Регистр.:
    22 мар 2012
    Сообщения:
    1
    Симпатии:
    0
    Привет, я недавно только в php и может я несу бред Но! У меня было идея такая а почему не сделать просто например скрипт отдельный который бы заносил при оплате в БД количество денег например в строке баланс?
    Я видел панели без билинга но с ячейкой баланс. Там администратор все в ручную переводил и добавлял.
     
  5. Дмитрий Кесаев

    Дмитрий Кесаев aka Zlobniy Babko

    Заблокирован
    Регистр.:
    10 май 2007
    Сообщения:
    1.332
    Симпатии:
    1.266
    Так оно и должно быть... При оплате заказа, заносится в БД: дата, номер заказа, сумма.
    После оплаты парсером выдираются данные и тоже заносятся в БД... потом идет сопоставление изначальных данных и конечных - если сходятся - то статус ОПЛАЧЕНО...
    Сопоставление думаю по дате делать и по времени, т.е. с разбегом в 3-5 минут!