Имя: Пароль:
1C
1С v8
POST запрос на сайт
0 Romeo53
 
17.06.14
23:28
Хочу сделать POST запрос на сайт
вот пример на сайте
Вот что я по инструкции пытался сделать

НашЗапрос= md5(access_key=[тут мой ключ]&created=[число из даты timestamp]&method=get_account_info&secret_key=[мой секретный ключ])

        ФайлЗапроса = ПолучитьИмяВременногоФайла() + ".bot";
    ФайлОтвета = ПолучитьИмяВременногоФайла() + ".bot";
    ХешЗапрос = ЗашифроватьMD5(НашЗапрос, СекрКлючApi);    
      
    
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("method", "get_account_info");
    ЗаголовокHTTP.Вставить("access_key", КлючApi);
    ЗаголовокHTTP.Вставить("created", ЧислоИзДаты());    
    ЗаголовокHTTP.Вставить("Sign", ХешЗапрос);
    ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");
    
    Текст = Новый ЗаписьТекста(ФайлЗапроса, КодировкаТекста.ANSI, "");
    Текст.ЗаписатьСтроку(НашЗапрос);
    Текст.Закрыть();
    
SSL = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
    
НТТР = Новый HTTPСоединение("api.salesforce.com",,,,,, SSL);
НТТР.ОтправитьДляОбработки(ФайлЗапроса, "/api.php", ФайлОтвета, ЗаголовокHTTP);

выдает ошибки - {"code":67,"msg":"\u79c1\u94a5\u9a8c\u8bc1\u5931\u8d25","time":1403031387}
67ой код - неправильный api ключ. хотя проверял все правильно. я в своем коде не уверен, может что не правильно написал, посмотрите пожалуйста

md5 функцию отсюда взял, только  "ScrptCtrl.Run("hex_hmac_md5" " параметр, т.к. HMAC MD5 использую для отправки ключа
Реализация MD5 на 1С

Вот сам пример на сайте
------------------------------------------------------
sign = md5(access_key=xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx&created=1386844119&method=get_account_info&secret_key=xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx)

<?php

function httpRequest($pUrl, $pData){
    $tCh = curl_init();
    if($pData){
        is_array($pData) && $pData = http_build_query($pData);
        curl_setopt($tCh, CURLOPT_POST, true);
        curl_setopt($tCh, CURLOPT_POSTFIELDS, $pData);
    }
    curl_setopt($tCh, CURLOPT_HTTPHEADER, array("Content-type: application/x-www-form-urlencoded"));
    curl_setopt($tCh, CURLOPT_URL, $pUrl);
    curl_setopt($tCh, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($tCh, CURLOPT_SSL_VERIFYPEER, false);
    $tResult = curl_exec($tCh);
    curl_close($tCh);
    return $tResult;
}

function createSign($pParams = array()){
    $pParams['secret_key'] = 'xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx';
    ksort($pParams);
    $tPreSign = http_build_query($pParams);
    $tSign = md5($tPreSign);
    return strtolower($tSign);
}

function getAccountInfo(){
    $tParams = array();
    $tParams['method'] = 'get_account_info';
    $tParams['access_key'] = 'xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx';
    $tParams['created'] = time();
    $tParams['sign'] = createSign($tParams);
    $tResult = httpRequest('https://api.salesforce.com/api.php', $tParams);
    return $tResult;
}

try{
    var_dump(getAccountInfo());
}catch (Exception $e){
    echo 'error:'.$e->getMessage();
}

--------------------------------------------
1 oleg_km
 
18.06.14
08:09
Если можно попробовать эксплорером, то Фиддлером смотри, что отсылает твой код, а что эксплорер.
2 Поpyчик-4
 
18.06.14
09:02
(0)(1) Неправильно сделано.
Параметры
    ЗаголовокHTTP.Вставить("method", "get_account_info");
    ЗаголовокHTTP.Вставить("access_key", КлючApi);
    ЗаголовокHTTP.Вставить("created", ЧислоИзДаты());    
    ЗаголовокHTTP.Вставить("Sign", ХешЗапрос);

надо отправлять не в заголовке, а в параметрах запроса.

Многие путают назначение заголовков HTTP-запроса.
3 Поpyчик-4
 
18.06.14
09:53
(0) Вот похожий пример http://forum.aeroion.ru/post4487.html#4487
4 Romeo53
 
18.06.14
11:51
в инструкции на сайте написано

Header request must be declared. Content-Type:application/x-www-form-urlencoded

я так понял такой вариант не подходит

ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
    ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""submit""" + Символы.ПС);
    ФайлОтправки.ЗаписатьСтроку("1");
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
5 Romeo53
 
18.06.14
12:04
1.Please submit transaction requests via the POST method
2.Header request must be declared. Content-Type:application/x-www-form-urlencoded
3.all requests should be converted into corresponding JSON format
4.API currently only supports https requests
5.API formats follow POST method form submission formats