我在新的专用服务器上遇到SOAP问题。脚本在我们的舞台服务器上工作得非常好,但是当我从实时站点尝试这些功能时它只是不起作用。
该脚本创建一个soap实例,然后将一些信息发送给跟踪公司。
我们使用的实时服务器是全新的,并安装了centOS。我使用yum install安装了php-pear和soap,但没有任何改变。
如果我使用CGI或Fast CGI运行php,我只会得到500内部错误,但如果我使用Apache模块运行它,我会用ngix获得502 Bad Gateway错误,下面是测试代码的示例。如果你能帮助我解决这个问题,我将不胜感激。
提前致谢
<?
error_reporting(E_ALL);
//echo (dirname(__FILE__));
require_once('soap-wsa.php');
require_once('soap-wsse.php');
class mySoap extends SoapClient {
function __doRequest($request, $location, $saction, $version) {
$doc = new DOMDocument('1.0');
$doc->loadXML($request);
$objWSA = new WSASoap($doc);
$objWSA->addAction($saction);
$objWSA->addTo($location);
$objWSA->addMessageID();
$objWSA->addReplyTo();
$doc = $objWSA->getDoc();
$objWSSE = new WSSESoap($doc);
/* add Timestamp with no expiration timestamp */
$objWSSE->addTimestamp();
$objWSSE->addUserToken('xxx','xxxxx',TRUE);
return parent::__doRequest($objWSSE->saveXML(), $location, $saction, $version);
}
}
$wsdl_base = 'http://stage.xxxx.com/SmartLeadImport/';
$wsdl = $wsdl_base.'SmartLeadImport.asmx?wsdl';
$to = $wsdl_base.'SmartLeadImport.asmx';
$action = $wsdl_base.'Lookup_SAT';
$leadObject = array(
'Lead' => array(
'Company' => 'Test',
'LeadID' => array(
'Type' => 'Client',
'Value' => '1234567'
),
'Person' => array(
'FirstName' => 'Test',
'LastName' => 'Testerson'
)
)
);
echo '<pre>';
try {
$sClient = new mySoap($wsdl, array('trace' => 1));
/* Force location path - MUST INCLUDE trailing slash
BUG in ext/soap that does not automatically add / if URL does not contain path cause POST header to be invalid */
$sClient->location = $to;
$sClient->saction = $action;
$test = $sClient->Lookup_SAT(array('SATCode' => 1));
print_r($test->Lookup_SATResult);
} catch (SoapFault $e) {
print_r($e);
}
echo '</pre>';
答案 0 :(得分:0)
我发现导致问题的原因。
起初我们服务器的时间错了,我修好了,好吧我以为我修好了,但想的是服务器时间应与美国海军天文台主时钟时间同步
http://tycho.usno.navy.mil/simpletime.html
只允许3分钟的差异。我的是5分钟。我已经改变了服务器时间,现在一切都很好。