Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Автозаполнение формы php (https://javascript.ru/forum/offtopic/34217-avtozapolnenie-formy-php.html)

l-liava-l 24.12.2012 20:10

Автозаполнение формы php
 
Доброго времени суток!
У меня есть задача научить php скрипт совершать внутренние переводы (с моего счета на счет другого человека) в qiwi, все бы хорошо но они выдают каждому переводу номер транзакции(как все).
Сразу после нажатия на кнопку отправить httpfox палит ссылку на state.action в который отправляют сумму номер телефона и номер транзакции, следовательно номер транзакции присваевается в скрипте который находится на одной страничке с формой
(https://w.qiwi.com/payment/transfer/form.action)
получается мне сразу туда гетом отправлять номер и сумму? Если да то как? а то я с php не очень дружу, документацию и статейки по curl читал, но почти ничего не понял




Все, заполнять получается но отправлять пока нет, оказывется уникальный номер транзакции генерится для кнопки "отправить" при каждом обновлении странички и его можно подглядеть в исходниках странички, но как вырвать его и перенести в запрос не понимаю

<button>data-params="{"data":{"state":"CONFIRM","t":"-3750918538008430731","protected":"true"}}"</button>

вот так выглядит кнопка, мне нужно забирать вот это "t":"-3750918538008430731"

DjDiablo 24.12.2012 21:56

один из возможных cпособов манимупяляциями dom на серверной стороне это использование simple-dom.
Читаем описание на хабре. http://habrahabr.ru/post/114143/

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

сорри, новый год снегурочки и и коньяк Подробности завтра, сегодня я уже в хлам :)

l-liava-l 24.12.2012 22:43

DjDiablo,
ты красавчик!:)
ps
они не дают плюсануть(

Shaci 25.12.2012 13:08

Цитата:

Сообщение от DjDiablo
новый год снегурочки и и коньяк

бухаем!!! )

l-liava-l 25.12.2012 13:21

возникла проблемка, когда я делаю запрос вот такого вида:
https://w.qiwi.com/user/payment/form/state.action?extra%5B%27account%27%5D=%2Bномер получателя&source=qiwi_RUB&amountInteger=сумма(рубли)&amountFraction=сумма(копейки)&currency=RUB&extra%5B%27comment%27%5D=&state=CONFIRM&t=номер транзакции (вырывю из dom)&protected=true

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

DjDiablo 25.12.2012 13:29

хз, отсюда невидно :)
мож куки надо включить?

рефер обходится через
curl_setopt($curl, CURLOPT_REFERER, "url откуда якобы перешли");

есть ещё CURLOPT_AUTOREFERER.

l-liava-l 25.12.2012 17:04

Так, вот код я что то не догоняю видимо.

<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Content-Type: text/html; charset=utf-8");
header("Pragma: no-cache");

set_time_limit(0);
error_reporting(E_ALL);
define('ROOT', dirname(__FILE__).'/');

$cookie_filename = ROOT.'temp/'.uniqid(md5(time()), true).'.tmp';

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1');
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_filename);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_filename);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

$phone = ''; //телефон он счета в виде 79180000007
$password = ''; //пароль от счета
$phoneClient = '';//телефон получателя в виде 79180000007
$t = '';// t оказывается просто генерируемая переменная, пока беру руками
$rub = '1';//сколько рублей
$cop = '00';//сколько копеек

curl_setopt($curl, CURLOPT_REFERER, 'https://w.qiwi.com' );
curl_setopt($curl, CURLOPT_URL, 'https://w.qiwi.com/auth/login.action?source=MENU&login=%2B' .$phone. '&password=' .$password.'');//авторизация
$page = curl_exec($curl);



curl_setopt($curl, CURLOPT_REFERER, 'https://w.qiwi.com/payment/transfer/form.action' );
curl_setopt($curl, CURLOPT_URL, 'https://w.qiwi.com/user/payment/form/state.action?extra%5B%27account%27%5D=%2B'.$phoneClient.'&source=qiwi_RUB&amountInteger='.$rub.'&amountFraction='.$cop.
'&currency=RUB&extra%5B%27comment%27%5D=&state=CONFIRM&t='.$t.'&protected=true');//отправка данных на скрипт обработчик с рефером формы
$page = curl_exec($curl);
curl_setopt($curl, CURLOPT_REFERER, 'https://w.qiwi.com/payment/state.action?state=CONFIRM&t='.$t.'&protected=true');
curl_setopt($curl, CURLOPT_URL, 'https://w.qiwi.com/payment/form/state.action?state=PAY&t='.$t.'');//вроде как эмуляция кннопки "подтвердить"
$page = curl_exec($curl);
curl_setopt($curl, CURLOPT_URL, 'https://w.qiwi.com/payment/main.action?refresh=true');//обновление главной
$page = curl_exec($curl);
print_r( $page );

@unlink($cookie_filename); 
curl_close($curl);
?>


t - оказывается просто переменная, а номер транзакции мы получаем при отправлении этого запроса
https://w.qiwi.com/payment/form/stat...n?state=PAY&t=
конечный запрос выглядит так:
https://w.qiwi.com/user/offer/show.a...ion=3521236456
По задумке скрипт должен после авторизации подавать признаки жизни, но он не хочет. :-/


Часовой пояс GMT +3, время: 22:49.