因此,我试图将我们的SMS (学生管理系统)连接到政府服务或网站。该过程需要来自Vanguard的身份验证令牌。成功地,我能够获得令牌...但是由于缺少PHP文档和示例代码,我在与上述服务进行通信时遇到了问题。我想知道是我的代码导致了问题,还是我的调用在与see服务的接口上发生了冲突:请参阅以下代码:
<?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);我在浏览器上看到的结果是:
应用程序异常: HTTP无法处理该消息,因为内容类型‘SoapFault/xml;charset=utf-8’不是预期的类型‘应用程序/soap+xml;字符集=utf-8’。在/var/www/html/usitest/example1.php:73堆栈跟踪:#0内部函数:主数组) #2 { SoapClient->__doRequest('__soapCall('VerifyUSI',}空
提前感谢各位!
发布于 2017-03-17 06:14:40
您的内容类型可能是由SOAP版本引起的。
尝试将SOAP版本设置为1.2:
'soap_version' => SOAP_1_2请参阅SoapClient connection to SoapServer
然而,我认为您的代码中还存在其他问题--尤其是先锋令牌。
发布于 2019-03-18 08:30:17
我们设法解决了这个问题,然而它需要许多类,模板,外部包和几个月的工作才能解决,而不是我们可以在线发布的东西。然而,在你的情况下,我建议你做一些事情来解决它。
代码中遇到了主要问题。
PHP示例中的大多数东西都是错误的,或者至少不可能被跟踪和调试来修复。最后,我们看不到一种可行的方法。预计至少要花几个星期的时间,你需要了解很多关于安全性、哈希和ssl证书的知识。
很抱歉,我不能给你一个完整的工作解决方案,但了解上面的这些步骤肯定会对我们有所帮助,所以我希望它们能帮助你。
https://stackoverflow.com/questions/41255547
复制相似问题