Siebel>未正确接收HTTP Post请求

时间:2018-03-25 21:51:08

标签: siebel rightnow-crm oracle-service-cloud

从Siebel我使用客户端业务服务向Oracle RightNow发送HTTP Post请求。在请求中,我将XML作为字符串发送到RightNow但是没有正确接收。当我使用'binary'选项从Postman发送时,相同的XML正在工作。邮递员的要求如下: enter image description here

但是当我从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;

我不确定这些(ÿþ)两个角色在一开始就在哪里?

2 个答案:

答案 0 :(得分:0)

从日志中可以清楚地看到问题。 Siebel正在向右侧发送UTF-16消息,这就是你在每个角色和领先的垃圾追踪者之间看到空间的原因。这是Siebel escript中的默认功能。为了解决方法,您必须使用转码服务消息UTF-8,以便接受它。

答案 1 :(得分:0)

解决方案是,我们必须在HTTP传输业务服务中以xml的输入参数形式发送xml。我知道此参数未在输入中定义,但是它将被视为Siebel OOTB,并且将发送正确的数据。 因此,如上所述,您使用的是脚本还是工作流程都没有关系。您只需要在''中设置xml,然后将其作为输入参数即可。