AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.11.2015, 10:01   #1  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
SMS на МТС через API
Всем доброго дня. Подскажите кто-нибудь отсылал смс через API МТС?
Использую COM Microsoft.XMLHTTP
Согласно инструкции http://mcommunicator.ru/m2m/m2m_api.asmx?op=SendMessage посылаю
xmlSend /m2m/m2m_api.asmx HTTP/1.1
Host: mcommunicator.ru
Content-Type: text/xml; charset=utf-8
Content-Length: 469
SOAPAction: "http://mcommunicator.ru/M2M/SendMessage"

<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><SendMessage xmlns="http://mcommunicator.ru/M2M"><msid>7912ххххххх</msid><message>Test message from Ax</message><naming></naming><login>ххх</login><password>ххх</password></SendMessage></soap:Body></soap:Envelope>
на http://www.mcommunicator.ru/m2m/m2m_api.asmx используя метод POST
в ответ получаю
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><soap:Code><soap:Value>soap:Receiver</soap:Value></soap:Code><soap:Reason><soap:Text xml:lang="en">Server was unable to process request. ---&gt; Data at the root level is invalid. Line 1, position 1.</soap:Text></soap:Reason><soapetail /></soap:Fault></soap:Body></soap:Envelope>
Прошу совета, что я делаю не так?
Старый 16.11.2015, 11:27   #2  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Цитата:
Сообщение от smailik Посмотреть сообщение
xmlSend /m2m/m2m_api.asmx HTTP/1.1
А разве не должно быть POST вместо xmlSend?
Старый 16.11.2015, 11:58   #3  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Каюсь, вставил это из инфолога info (strfmt("xmlSend %1", xmlSend)); Сначала у меня там был в начале POST с ним тоже не работает. Потом подумал что и так использую метод POST и убрал.
static XML sendRequest(Url _urlReq, str _method = "POST", XML _xmlSend = "")
{
COM xmlHttp;
XML xmlFileResult;
str soapAction;
;
xmlHttp = new COM("Microsoft.XMLHTTP");
xmlHttp.open(_method,_urlReq,false);
xmlHttp.send(_xmlSend);
xmlFileResult = xmlHttp.responseText();
xmlFileResult = xmlHttp.responseText();
return xmlFileResult;
}

Последний раз редактировалось smailik; 16.11.2015 в 12:01.
Старый 17.11.2015, 13:00   #4  
DeAmouSE is offline
DeAmouSE
Участник
 
2 / 11 (1) +
Регистрация: 16.10.2013
Ошибка может быть, из за того что кодировка при отправке становится Win-1251, из-за этого xml на сервере кривится, и становится не правильный.

В интернете прочитал
Что после open, можно попробовать использовать метод
setRequestHeader("Content-Type", "text/plain;charset=UTF-8");

А так можно даже попробовать через обычные HTTP GET/POST запросы сделать.

Для GET нужно всего-то собрать такую строку
msid=string&message=string&naming=string&login=string&password=string
И сделать запрос:
"http://www.mcommunicator.ru/m2m/m2m_...assword=string"

Написал простой пример в ax2009 с использованием NET.
X++:
public static str GET(URL _url, boolean useProxy = false)
{
    CLRObject                                   clro         = null;
    System.Net.HttpWebRequest                   httpRequest  = null;
    System.Net.HttpWebResponse                  httpResponse = null;
    System.Reflection.TargetInvocationException error2;
    str                                         response, errorText;
    System.Exception                            exseption ;
    System.IO.StreamReader                      sr;
    System.Net.WebHeaderCollection              headersCollection;
    System.Net.HttpStatusCode                   httpStatusCode;
    System.IO.Stream                            stream;
    int                                         i,y;
    System.Version                              httpVersion;
    int                                         counter;
    container                                   con;
    System.Net.WebProxy                         proxy;
    System.Net.NetworkCredential                nc;
    System.Net.WebClient                        WebClient;
    System.Object                                   clr;
    str                                         userName;
    System.Text.RegularExpressions.Regex        regex;
    System.Text.RegularExpressions.Match        matches;
    int                                         lenthMatch;

    ;
    try
    {
        new InteropPermission(InteropKind::ClrInterop).assert();
        clro = System.Net.WebRequest::Create(_url);
        httpRequest = clro;
        httpRequest.set_Credentials( System.Net.CredentialCache::get_DefaultCredentials());
        httpRequest.set_AllowAutoRedirect(true);

        nc = httpRequest.get_Credentials();
        if(useProxy)
        {
            proxy = new System.Net.WebProxy( ,   );
            proxy.set_Credentials(System.Net.CredentialCache::get_DefaultCredentials());
            httpRequest.set_Proxy(proxy);
            proxy.get_Credentials();
        }
        httpRequest.set_Method("GET");
        httpVersion = new System.Version(1,0);
        httpRequest.set_ProtocolVersion(httpVersion);
        httpRequest.set_ContentType("application/x-www-form-urlencoded");

        httpResponse = httpRequest.GetResponse();

        sr = new System.IO.StreamReader(httpResponse.GetResponseStream());
        headersCollection = httpResponse.get_Headers();
        httpStatusCode = httpResponse.get_StatusCode();
        response = sr.ReadToEnd();
        sr.Close();
        sr.Dispose();

        CodeAccessPermission::revertAssert();
    }
    catch(exception::CLRError)
    {
        CodeAccessPermission::revertAssert();        
        new InteropPermission(InteropKind::ClrInterop).assert();
        error2 = ClrInterop::getLastException();

        if (error2 != null)
        {
            exseption = error2.get_InnerException();
            if (exseption != null)
            {
               
                errorText = exseption.get_Message();
                

                CodeAccessPermission::revertAssert();
                 throw error(errorText);
                
            }
        }
        CodeAccessPermission::revertAssert();
    }


    return response;
}
Проверить конечно не могу, но в целом должно работать.
За это сообщение автора поблагодарили: Товарищ ♂uatr (1).
Старый 17.11.2015, 14:01   #5  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Полез писать то как я победил ошибку и увидел Ваше сообщение
Цитата:
setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
. Как раз это использовал, но пришлось еще дописать.
Сейчас код работает вот как:
X++:
xmlHttp = new COM("Microsoft.XMLHTTP");
    xmlHttp.open(_method,_urlReq,false);
    soapAction = '"' + "http://mcommunicator.ru/M2M/SendMessage" + '"';
    xmlHttp.setRequestHeader("Host:", "mcommunicator.ru");
    xmlHttp.setRequestHeader("Content-Type:", "text/xml;  charset=UTF-8" );
    xmlHttp.setRequestHeader("Content-Length:", _dataLength);
    xmlHttp.setRequestHeader("SOAPAction:", soapAction);
    xmlHttp.send(_xmlSend);
    xmlFileResult = xmlHttp.responseText();
где _xmlSend
X++:
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<SendMessage xmlns="http://mcommunicator.ru/M2M">
<msid></msid>
<message>Test message from Ax</message>
<naming></naming>
<login></login>
<password></password></SendMessage>
</soap:Body>
</soap:Envelope>
За это сообщение автора поблагодарили: sukhanchik (2), Ace of Database (3), DeAmouSE (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Взаимодействие с Excel через .NET (семейство классов SysExcel) gl00mie DAX: Программирование 102 11.08.2022 17:09
Ошибка с подключением через ODBC + глюк с работой через connection Corel DAX: Программирование 8 17.05.2012 11:58
4.0SP2: Создание записи в ForecastSales через API Jab Straight DAX: Программирование 8 30.11.2007 11:39
Inside Dynamics AX 4.0: The AxInternalBase API Blog bot DAX Blogs 2 09.10.2007 00:48
Запуск программы из Аксапты через 2-хзвенку Migel_84 DAX: Программирование 25 27.04.2006 09:41

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:30.