所以我试图将我们的短信(学生管理系统)连接到政府服务或网站。该过程需要来自Vanguard的身份验证令牌。成功地,我能够获得令牌......但由于PHP中缺少文档和示例代码,我在与所述服务进行通信时遇到问题。我想知道是不是我的代码导致了问题,还是我的调用与网络服务有冲突:请参阅下面的代码:
<?php
require_once 'VanguardClient.php';
$endpoint = 'https://3pt.portal.usi.gov.au/Service/v2/UsiService.svc';
function get_sts($endpoint){
$test = true;
$auskey_path = 'Keystore.xml';
$auskey_password = 'Password1!';
$v = new VanguardClient($test);
$v->loadAuskey($auskey_path, $auskey_password);
try {
return $v->requestToken($endpoint);
} catch (SoapFault $e) {
echo "Error1:";
echo $e;
}
}
//get token from Vanguard
$token = get_sts($endpoint);
//create soap client
try{
$wsdl = 'https://3pt.portal.usi.gov.au/service/V2/UsiService.wsdl';
$client = new SoapClient($wsdl,
array(
'trace' =>1,
//'soap_version' => SOAP_1_2,
'keep_alive' => false,
//'connection_timeout' => 500000,
'cache_wsdl' => WSDL_CACHE_NONE
)
);
} catch (SoapFault $e) {
echo "SoapClient Error:<br />";
var_dump($e);
}
try {
$result=$client->__setSoapHeaders( $token );
} catch (SoapFault $e) {
echo "__setSoapHeaders:";
var_dump($e);
}
$data = array(
'OrgCode' => '970003',
'USI' => 'U6Q8JN6UD9',
'FirstName' => 'Myrna',
'FamilyName' => 'Macknight',
'DateOfBirth' => '1971-04-19'
);
try{
$response=$client->__soapCall('VerifyUSI',$data);
} catch (SoapFault $e) {
echo "__soapCall Error:<br />";
echo $e;
}
var_dump($response);
我看到的浏览器上的结果是:
SoapFault异常:[HTTP]无法处理消息,因为内容类型为'text / xml; charset = utf-8'不是预期的类型'application / soap + xml;字符集= UTF-8' 。在/var/www/html/usitest/example1.php:73堆栈跟踪:#0 [内部功能]:SoapClient-&gt; __ doRequest('__ soapCall('VerifyUSI',数组)#2 {main} NULL
先谢谢你们!
答案 0 :(得分:0)
您的内容类型可能是由SOAP版本引起的。
尝试将SOAP版本设置为1.2:
'soap_version' => SOAP_1_2
请参阅SoapClient connection to SoapServer
但是,我认为您的代码中还存在其他问题 - 尤其是使用Vanguard令牌。
答案 1 :(得分:0)
我们设法解决了这个问题,但是要花很多课,模板,外部程序包和几个月的工作来解决,这不是我们可以在线上解决的问题。但是,我建议您采取一些措施来解决您的情况。
PHP
示例中的大多数内容是错误的,或者至少不可能遵循和调试来修复。最后,我们看不到可行的方法。期望至少花费几周的时间,并且您需要了解很多有关安全性,哈希和ssl证书的信息。
对不起,我无法为您提供完整的解决方案,但知道上述这些步骤肯定会对我们有所帮助,因此我希望它们会为您提供帮助。