我正在尝试从 SOAP webservice 获取数据,但它让我无法连接到主机我在我的代码中尝试了许多解决方案,如下所示:
require 'soap-wsse.php';
define('PRIVATE_KEY', 'technologyally.me.key.pem');
define('CERT_FILE', 'technologyally.me.crt');
class MySoap extends SoapClient
{
private $_username;
private $_password;
private $_digest;
public function addUserToken($username, $password, $digest = false)
{
$this->_username = $username;
$this->_password = $password;
$this->_digest = $digest;
}
public function __doRequest($request, $location, $saction, $version, $one_way =
0)
{
$doc = new DOMDocument('1.0');
$doc->loadXML($request);
$objWSSE = new WSSESoap($doc);
/* Sign all headers to include signing the WS-Addressing headers */
$objWSSE->signAllHeaders = true;
$objWSSE->addTimestamp();
$objWSSE->addUserToken($this->_username, $this->_password, $this->_digest);
/* create new XMLSec Key using RSA SHA-1 and type is private key */
$objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type' => 'private'));
/* load the private key from file - last arg is bool if key in file (true) or is string (FALSE) */
$objKey->loadKey(PRIVATE_KEY, true);
/* Sign the message - also signs appropraite WS-Security items */
$objWSSE->signSoapDoc($objKey);
/* Add certificate (BinarySecurityToken) to the message and attach pointer to Signature */
$token = $objWSSE->addBinaryToken(file_get_contents(CERT_FILE));
$objWSSE->attachTokentoSig($token);
$request = $objWSSE->saveXML();
//print_r($request);
//echo $location;
// $location='https://impl.hub.cms.gov/Imp1/ApplicantEligibilityService';
return parent::__doRequest($request, $location, $saction, $version);
}
}
ini_set('soap.wsdl_cache_enabled',0);
ini_set('soap.wsdl_cache_ttl',0);
$wsdl = 'WSDL/ApplicantEligibility.wsdl';
$context = stream_context_create(array('ssl' => array(
"verify_peer"=>false,
// ,"allow_self_signed"=>false,
//'cafile' => 'cacert.pem',
// 'verify_depth' => 5,
// 'local_pk'=>PRIVATE_KEY,
// 'allow_self_signed' => false,
'ciphers' => 'DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:AES256-SHA:KRB5-DES-CBC3-MD5:KRB5-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:DES-CBC3-SHA:DES-CBC3-MD5:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:AES128-SHA:RC2-CBC-MD5:KRB5-RC4-MD5:KRB5-RC4-SHA:RC4-SHA:RC4-MD5:RC4-MD5:KRB5-DES-CBC-MD5:KRB5-DES-CBC-SHA:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DES-CBC-SHA:DES-CBC-MD5:EXP-KRB5-RC2-CBC-MD5:EXP-KRB5-DES-CBC-MD5:EXP-KRB5-RC2-CBC-SHA:EXP-KRB5-DES-CBC-SHA:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC2-CBC-MD5:EXP-KRB5-RC4-MD5:EXP-KRB5-RC4-SHA:EXP-RC4-MD5:EXP-RC4-MD5',
)));
$sClient = new MySoap($wsdl, array(
// 'location' => 'https://impl.hub.cms.gov/Imp1/ApplicantEligibilityService',
// 'style' => SOAP_DOCUMENT,
'trace' => 1,
'soap_version' => SOAP_1_2,
'exceptions' => true,
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
'cache_wsdl' => WSDL_CACHE_NONE,
// 'ssl_method' => SOAP_SSL_METHOD_TLS,
'stream_context' => $context,
"style" => SOAP_DOCUMENT,
"use" => SOAP_LITERAL,
'connection_timeout'=>60
));
//$sClient = new MySoap($wsdl, array('stream_context' => $context));
//echo file_get_contents('https://impl.hub.cms.gov/Imp1/HubConnectivityService');exit();
$sClient->__setLocation('https://impl.hub.cms.gov/Imp1/ApplicantEligibilityService');
$sClient->addUserToken('04.BKS.KS*.913.430', 'Qzk@4iTjUodAn2R', true);
//print_R($sClient->__getFunctions());
$parameter['PartnerWebSiteInformationExchangeSystem']['InformationExchangeSystemIdentification']['IdentificationID'] =
'04.DSH.TS*.001.001';
$parameter['ExchangeInformationExchangeSystem']['InformationExchangeSystemStateCode'] =
'GA';
$parameter['ExchangeInformationExchangeSystem']['InformationExchangeSystemIdentification']['IdentificationID'] =
'04.DSH.TS*.001.001';
$parameter['PartnerAssignedConsumerIdentification']['IdentificationID'] =
'ConsumerScenario';
$parameter['PartnerWebSiteUserCode'] = 'Consumer';
$parameter['ExchangeAssignedConsumerIdentification']['IdentificationID'] =
'124838339';
$parameter['ExchangeUser']['ExchangeUserIdentification']['IdentificationID'] =
'geoge.washington@yopmail.com';
$parameter['ExchangeUser']['RoleOfPersonReference'] = '';
//print_R($parameter);
try
{
$out = $sClient->FetchApplicantEligibility($parameter);
var_dump($out);
}
catch (SoapFault $fault)
{
//echo $sClient->__getLastRequest();
print_R($fault);
}
我在使用密钥库和 ws-security 标头的 SOAPUI 上成功地得到了响应,在某处我做错了你能指出我正确的方向吗,在此先感谢,我永远被困在这个问题上:(