从Siebel我使用客户端业务服务向Oracle RightNow发送HTTP Post请求。在请求中,我将XML作为字符串发送到RightNow但是没有正确接收。当我使用'binary'选项从Postman发送时,相同的XML正在工作。邮递员的要求如下:
但是当我从Siebel发送请求时,我只能在RightNow php脚本中获取这些字符:
...<
在RightNow方面,我正在倾倒我在一个字段中设置它的值,以了解将要发生的事情。从Postman请求中,该字段显示的是具有正确值的完整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);
}
RightNow PHP脚本:
<?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;
更新
在Chrome中,我跟踪了标题并找到了以下内容:
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: 烯GB,EN-US; Q = 0.9,连接; Q = 0.8
我正在寻找广告“Accept-Encoding”。是发送压缩请求吗?
更新 我使用Fiddler跟踪请求并找到以下内容:
POST HTTP://&LT;&GT; .rightnowdemo.com /的cgi-bin /&LT;&GT; .CFG / PHP /定制/&LT;&GT; .PHP HTTP / 1.1 User-Agent:Mozilla / 4.0接受:text / * Content-Type:text / xml 主持人:&lt;&gt; .rightnowdemo.com内容 - 长度:910 Pragma: 无缓存
YTH&LT; x m l v e r s i o n =“1.0”e n c o d i g =“u t f - 8 “&gt;&lt; r e q u e s t&gt;&lt; h e a d&gt;&lt; a u t h&gt;
&LT; a c c o u t t&gt; C o m p a n y N a m e&lt; / a c c o u t t&gt;
&LT;你好吗?你好吗? /你好&gt; &LT; p s s&gt; P a s s&lt; / p s s&gt; &LT; / a u t h&gt; &LT; a c t i o> s d d s m s&lt; / a c t i o&gt; &LT; / h e d&gt; &LT; b o d y&gt; &LT; a d d r&gt; &LT; f r o m> 0 3 9 5 3 5 6 4 0&lt; / f r o m&gt;
&LT; t o> &LT; c l i&gt; 9 7 2 5 4 5 4 5 4 5 0&lt; / c l i&gt;
&LT; / t o&gt; &LT; / a d d r&gt; &LT; d a t a> &LT; m s g t y&gt; t x t&lt; / m s t t e&gt; &LT; t e x t&gt;我是S M S e e s s a g e t e&lt; / t e x t&gt; &LT; / d a t a> &LT;我爱我 n g&gt; &LT; p o r t&gt; 0&lt; / p o r t&gt; &LT; / b我l 我是&gt; &LT; / b o d y&gt; &LT; / r e q u e s t&gt;
我不确定这些(ÿþ)两个角色在一开始就在哪里?
答案 0 :(得分:0)
从日志中可以清楚地看到问题。 Siebel正在向右侧发送UTF-16消息,这就是你在每个角色和领先的垃圾追踪者之间看到空间的原因。这是Siebel escript中的默认功能。为了解决方法,您必须使用转码服务消息UTF-8,以便接受它。
答案 1 :(得分:0)
解决方案是,我们必须在HTTP传输业务服务中以xml的输入参数形式发送xml。我知道此参数未在输入中定义,但是它将被视为Siebel OOTB,并且将发送正确的数据。 因此,如上所述,您使用的是脚本还是工作流程都没有关系。您只需要在''中设置xml,然后将其作为输入参数即可。