Siebel > Запрос HTTP Post не принимается должным образом

От Siebel Я использую бизнес-службу на стороне клиента для отправки HTTP Post-запроса в Oracle RightNow. В запросе я отправляю XML в виде строки на RightNow, но он не был получен правильно. Тот же XML работает так, как нужно, когда я отправляю из Почтальона, используя опцию "бинарный". Почтальон запрос, как показано ниже:

Но когда я отправляю запрос из Siebel, я получаю эти символы только в php-скрипте RightNow:

?? <

На правой стороне я сбрасываю полученное значение при установке его в поле, чтобы знать, что происходит. Из запроса Почтальона поле показывает полный XML с правильными значениями, но из запроса Siebel я просто получаю вышеупомянутые символы.

Код бизнес-услуги Siebel:

function Service_PreInvokeMethod (MethodName, Inputs, Outputs)
{
 if(MethodName == "Create")
 {
     var bs = TheApplication().GetService("EAI HTTP Transport");
     var inp = TheApplication().NewPropertySet();
     var outputs1 = TheApplication().NewPropertySet(); 

     inp.SetProperty("HTTPRequestMethod","POST");
     inp.SetProperty("HTTPContentType", "text/html; charset=UTF-8");
     inp.SetProperty("HTTPRequestURLTemplate","http://<REMOVED>.rightnowdemo.com/cgi-bin/<REMOVED>.cfg/php/custom/REMOVED.php");

    var reqVal = '<?xml version="1.0" encoding="utf-8" ?> '+
    '<request> '+
    '  <head> '+
    '    <auth> '+
    '      <account>CompanyName</account> '+
    '     <user>userName</user> '+
    '    <pass>Pass</pass> '+
    '</auth> '+
    '      <action>sendsms</action> '+
    '  </head> '+
    ' <body> '+
    '   <addr> '+
    '     <from>039535640</from> '+
    '    <to> '+
    '      <cli>97254545450</cli> '+
    '  </to> '+
    '</addr> '+
    '<data> '+
    '  <msgtype>text</msgtype> '+
    '   <text>This is SMS message text</text> '+
    ' </data> '+
    '  <billing> '+
    '      <port>0</port> '+
    '    </billing> '+
    '  </body> '+
    '</request>';

    inp.SetProperty("HTTPRequestBodyTemplate",reqVal);

    bs.InvokeMethod("SendReceive",inp,Outputs);

  return (CancelOperation);
 }
 return (ContinueOperation);
}

PHP-скрипт RightNow:

<?php
ini_set('display_errors', 1);
header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1.
header("Pragma: no-cache"); // HTTP 1.0.
header("Expires: 0"); // Proxies.
require_once( get_cfg_var("doc_root")."/ConnectPHP/Connect_init.php");
use RightNow\Connect\v1_2 as RNCPHP;

$response = file_get_contents('php://input'); //file_get_contents('http://www.google.com');//
        $p = xml_parser_create();
        //xml_parser_set_option( $p, XML_OPTION_CASE_FOLDING, 0 );
        //xml_parser_set_option( $p, XML_OPTION_SKIP_WHITE, 1 );
        xml_parse_into_struct( $p, $response, $index );
        xml_parser_free( $p );

        foreach ($index as $tag) 
        {
            if($tag["type"]=="complete")
            {
                $temparr = array($tag['tag'] => $tag['value']);             
            }
        }   

$username="<REMOVED>";
$password="<REMOVED>";


//Checking authentication
try 
{
    initConnectAPI($username, $password);
    $testVar= RNCPHP\Incident::fetch(2620);
} catch (Exception $e) {
    echo "Authentication failed.";
    die;
}

$incident->CustomFields->c->Onsitegoissuedescription=$response;

Обновить

В хроме я отследил шапку и нашел следующее:

POST http://desktop-i7nrnuh/start.swe Принять: / Происхождение: http://desktop-i7nrnuh/ X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, как Gecko) Chrome/64.0.3282.186 Safari/537.36 Тип содержимого: application / x-www-form-urlencoded Referer: http://desktop-i7nrnuh/start.swe?SWECmd=GotoView&SWEView=Business+Service+Test+View&SWERF=1&SWEHo=desktop-i7nrnuh&SWEBU=1 Accept-Encoding: gzip, deflate Accept-Language: en-GB, en-US; q = 0,9,en;q=0,8

Я смотрю объявление "Accept-Encoding". Это отправляет сжатый запрос?

Обновление Я использовал Fiddler для отслеживания запроса и нашел следующее:

POST http: // <>.rightnowdemo.com / cgi-bin / <>.cfg / php / custom / <>.php HTTP / 1.1 User-Agent: Mozilla / 4.0 Принимать: текст /* Тип содержимого: текст / xml Host: <>. rightnowdemo.com Content-Length: 910 Pragma: no-cache

ÿþ <запрос>
Компания N a m e
<пользователь> пользователь N a m e P a s s send sms 0 3 9 5 3 5 6 4 0
9 7 2 5 4 5 4 5 4 5 0
text Этот текст S M S 0

Я не уверен, где эти (ÿþ) два символа идут в начале?

2 ответа

Решение

Решение состоит в том, что мы должны отправлять xml как двоичный файл, который находится во входном параметре '' в бизнес-службе транспорта HTTP. Я знаю, что этот параметр не определен во входных данных, но он будет принят как Siebel OOTB, и будут отправлены правильные данные. Таким образом, сказав выше, не имеет значения, используете ли вы escript или рабочий процесс. Вам просто нужно установить xml в '', а затем передать его в качестве входного аргумента.

Вопрос хорошо виден из логов. Siebel отправляет сообщения UTF-16 прямо сейчас, вот почему вы видите пробел между каждым персонажем и ведущими символами мусора. Это функциональность по умолчанию в Siebel escript. Чтобы обойти эту проблему, вам придется использовать служебное сообщение Transcode для UTF-8, чтобы вы могли принять его.

Другие вопросы по тегам