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 account>
<пользователь> пользователь N a m e user>P a s s pass> auth> send sms action> head> 0 3 9 5 3 5 6 4 0 from>
9 7 2 5 4 5 4 5 4 5 0 cli>
to> addr>text m s g t y p e > Этот текст S M S text> data> 0 port> выставление счетов> bo d y > r e q u e s t >
Я не уверен, где эти (ÿþ) два символа идут в начале?
2 ответа
Решение состоит в том, что мы должны отправлять xml как двоичный файл, который находится во входном параметре '' в бизнес-службе транспорта HTTP. Я знаю, что этот параметр не определен во входных данных, но он будет принят как Siebel OOTB, и будут отправлены правильные данные. Таким образом, сказав выше, не имеет значения, используете ли вы escript или рабочий процесс. Вам просто нужно установить xml в '', а затем передать его в качестве входного аргумента.
Вопрос хорошо виден из логов. Siebel отправляет сообщения UTF-16 прямо сейчас, вот почему вы видите пробел между каждым персонажем и ведущими символами мусора. Это функциональность по умолчанию в Siebel escript. Чтобы обойти эту проблему, вам придется использовать служебное сообщение Transcode для UTF-8, чтобы вы могли принять его.