Curl POST json

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Curl POST json

Сообщение svil »

Вот мой контроллер

Код: Выделить всё

 public function actionPostExample()
    {
       
        $curl = new curl\Curl();
        $login="a";
        $pass= "b";
        $wmid="c";
        $culture = 'en-EN';
        $url="https://api.indx.ru/api/v2/trade/Balance";
        $data_string  = base64_encode(hash('sha256',"$login;$pass;$culture;$wmid",TRUE));
        $response = $curl->setOption(
            CURLOPT_POSTFIELDS, $data_string)
            ->post($url);
	debug($_POST);
        return $this->render('post-example');
В консоли POST пустой, где прописать ['content-type' => 'application/json']?
Аватара пользователя
proctoleha
Сообщения: 298
Зарегистрирован: 2016.07.10, 19:00

Re: Curl POST json

Сообщение proctoleha »

А почему POST не должен быть пустым? Вам апи сервис в ответ тоже методом post через curl отвечает? Наверняка нет. И вообще не обижайтесь, у вас какая-то ерунда написана. Логин, пароль, base64 ...
https://yiiframework.com.ua/ru/doc/guid ... ntication/
В мане написано про три основных способа аутентификации, который из них ваш?
Можно, конечно создать свой метод аутентификации, но тогда у вас таких вопросов бы не было. Сделайте, потренируйтесь как написано в документации, реализуйте сначала самые простые примеры, и только потом можно говорить о чем-то более сложном.
И еще: для того, чтобы получить json данные, их сначала нужно отослать. $data_string - это не json данные, это строка. Где у вас подготавливаются данные в формате json?
Вообщем сначала курите маны, всё давно придумано до нас.
Вот за что я не люблю линукс, так это за свои кривые, временами, руки
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: Curl POST json

Сообщение skynin »

svil писал(а): 2018.07.24, 01:06 В консоли POST пустой, где прописать ['content-type' => 'application/json']?
нигде.
потому что ответ принимает не веб-сервер, который инициализирует переменные типа $_POST, а curl\Curl

смотрим документацию:
cURL class for PHP

Код: Выделить всё

if ($curl->error) {
    echo $curl->error_code;
}
else {
    echo $curl->response; // вот где ответ
}

var_dump($curl->request_headers);  // вот заголовки запроса
var_dump($curl->response_headers);  // вот заголовки ответа
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Curl POST json

Сообщение Alexum »

Вообще для yii2 уже давно есть родной удобный http клиент https://github.com/yiisoft/yii2-httpcli ... c-usage.md . Добрые люди написали - пользуйтесь.
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Curl POST json

Сообщение svil »

Спасибо за направление, куда "копать".А то три дня безрезультатно прошли в поисках.
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Curl POST json

Сообщение Alexum »

svil писал(а): 2018.07.24, 14:08 Спасибо за направление, куда "копать".А то три дня безрезультатно прошли в поисках.
Ставьте https://github.com/yiisoft/yii2-httpclient . Допиливайте, общий вид может быть примерно таким:

Код: Выделить всё

	$client = new Client();
        $login = 'a';
        $password = 'b';
        $wmid = 'c';
        $culture = 'en-EN';
        $signature = base64_encode(hash("sha256",implode(';',[$login,$password,$culture,$wmid]),true));
        $response = $client->createRequest()
            ->setMethod('POST')
            ->setFormat(Client::FORMAT_JSON)
            ->setUrl('https://api.indx.ru/api/v2/trade/Balance')
            ->setData(['ApiContext' => ['Login' => $login,
                'Password' => $password,
                'Wmid' => $wmid,
                'Culture' => $culture,
                'Signature' => $signature]])
           ->send();
        if ($response->isOk) {
            echo $response->content;
        }
И внимательнее читайте описание API http://wiki.webmoney.ru/projects/webmon ... PI_Balance , там приводится формат запроса {"ApiContext":{"Login":"","Wmid":"","Culture":"","Signature":""}} и есть тестовая страница https://api.indx.ru/Api/v2/samples/balance.htm .
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Curl POST json

Сообщение svil »

Спасибо, работает.
Ответить