实时服务器上的 SOAP-ERROR
SOAP-ERROR on Live server
大家好,
我有一个问题,我编写了一个 soap 客户端代码,用于检查用户在我的网站上购买电视机时是否拥有有效的电视许可证,
程序在本地主机上运行良好,没有错误,returns结果,当移动到实时服务器时,出现以下错误:
Error!"SOAP-ERROR: Parsing WSDL: Couldn't load from
'https://secure4.tvlic.co.za/AccountEnquiryService_Test_1.0/AccountEnquiryService.svc?wsdl'
: failed to load external entity
\"https://secure4.tvlic.co.za/AccountEnquiryService_Test_1.0/AccountEnquiryService.svc?wsdl\"\n"
我的代码:
<?php
$wdsl = "https://secure4.tvlic.co.za/AccountEnquiryService_Test_1.0/AccountEnquiryService.svc?wsdl";
$opts = array(
'http' => array(
'user_agent' => 'PHPSoapClient'
)
);
$context = stream_context_create($opts);
$soapClientOptions = array(
'stream_context' => $context,
'cache_wsdl' => WSDL_CACHE_NONE
);
//Generate GUID
function getGUID()
{
if (function_exists('com_create_guid')) {
return com_create_guid();
} else {
mt_srand((double) microtime() * 10000);
$charid = strtoupper(md5(uniqid(rand(), true)));
$hyphen = chr(45); // "-"
$uuid = chr(123) // "{"
. substr($charid, 0, 8) . $hyphen . substr($charid, 8, 4) . $hyphen . substr($charid, 12, 4) . $hyphen . substr($charid, 16, 4) . $hyphen . substr($charid, 20, 12) . chr(125); // "}"
return trim($uuid, '{}');
}
}
$quid = getGUID();
$licencetype = isset($_POST['licencetype']) ? $_POST['licencetype'] : NULL;
switch ($licencetype) {
case 'domestic':
$holder_id = isset($_POST['holder_id']) ? $_POST['holder_id'] : NULL;
try {
$client = new SoapClient($wdsl, $soapClientOptions);
$client->__setLocation('https://secure4.tvlic.co.za/AccountEnquiryService_1.0/AccountEnquiryService.svc');
$arrParams = array(
'request' => array(
'Header' => array(
'Rquid' => $quid,
'ApiKey' => '2c261e98-90ca-4f7d-90a0-1f5e91ebf416'
),
'AccountIdentifier' => $holder_id,
'AccountIdentifierType' => 'SaidNumber'
)
);
$account = $client->GetAccount($arrParams);
echo json_encode($account);
}
catch (\Exception $e) {
echo "Error!";
echo json_encode($e->getMessage());
echo 'Last response: ' . $client->__getLastResponse();
}
break;
case 'business':
$tvlicencenumber = isset($_POST['tvlicence']) ? $_POST['tvlicence'] : NULL;
try {
$client = new SoapClient($wdsl, $soapClientOptions);
$client->__setLocation('https://secure4.tvlic.co.za/AccountEnquiryService_1.0/AccountEnquiryService.svc');
$arrParams = array(
'request' => array(
'Header' => array(
'Rquid' => $quid,
'ApiKey' => '5957237e-101c-4ff2-8fdc-4bd6c9393a1d'
),
'AccountIdentifier' => $tvlicencenumber,
'AccountIdentifierType' => 'AccountNumber'
)
);
$account = $client->GetAccount($arrParams);
echo json_encode($account);
}
catch (\Exception $e) {
echo "Error!";
echo json_encode($e->getMessage());
echo 'Last response: ' . $client->__getLastResponse();
}
break;
case 'dealer':
$tvlicencenumber = isset($_POST['tvlicence']) ? $_POST['tvlicence'] : NULL;
try {
$client = new SoapClient($wdsl, $soapClientOptions);
$client->__setLocation('https://secure4.tvlic.co.za/AccountEnquiryService_1.0/AccountEnquiryService.svc');
$arrParams = array(
'request' => array(
'Header' => array(
'Rquid' => $quid,
'ApiKey' => '5957237e-101c-4ff2-8fdc-4bd6c9393a1d'
),
'AccountIdentifier' => $tvlicencenumber,
'AccountIdentifierType' => 'AccountNumber'
)
);
$account = $client->GetAccount($arrParams);
echo json_encode($account);
}
catch (\Exception $e) {
echo "Error!";
echo json_encode($e->getMessage());
echo 'Last response: ' . $client->__getLastResponse();
}
break;
default:
echo json_encode('Please select licence type');
}
?>
Xampp 使用:
php 5.6
在线服务器
PHP/5.6.33-0+deb8u1
请帮忙解决这个错误
您确定 https://secure4.tvlic.co.za/AccountEnquiryService_1.0/AccountEnquiryService.svc
是 SOAP 客户端的正确位置吗?当我在浏览器中打开它时,它显示错误 - 当前禁用此服务的元数据发布。即使那是因为我没有初始化 SOAP 客户端来打开它,你仍然从您的 WSDL(顺便说一句,您将 wsdl 变量命名为 $wdsl,我猜是拼写错误,但您始终如一地使用它,所以这不应该成为问题)和 SOAP 地址来看,似乎混合了测试 API 和实时 API。
比较:
↓ SOAP address (not working, even with ?wsdl appended)
https://secure4.tvlic.co.za/AccountEnquiryService_1.0/AccountEnquiryService.svc
https://secure4.tvlic.co.za/AccountEnquiryService_Test_1.0/AccountEnquiryService.svc?wsdl
↑ WSDL address (working)
大家好,
我有一个问题,我编写了一个 soap 客户端代码,用于检查用户在我的网站上购买电视机时是否拥有有效的电视许可证,
程序在本地主机上运行良好,没有错误,returns结果,当移动到实时服务器时,出现以下错误:
Error!"SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://secure4.tvlic.co.za/AccountEnquiryService_Test_1.0/AccountEnquiryService.svc?wsdl' : failed to load external entity \"https://secure4.tvlic.co.za/AccountEnquiryService_Test_1.0/AccountEnquiryService.svc?wsdl\"\n"
我的代码:
<?php
$wdsl = "https://secure4.tvlic.co.za/AccountEnquiryService_Test_1.0/AccountEnquiryService.svc?wsdl";
$opts = array(
'http' => array(
'user_agent' => 'PHPSoapClient'
)
);
$context = stream_context_create($opts);
$soapClientOptions = array(
'stream_context' => $context,
'cache_wsdl' => WSDL_CACHE_NONE
);
//Generate GUID
function getGUID()
{
if (function_exists('com_create_guid')) {
return com_create_guid();
} else {
mt_srand((double) microtime() * 10000);
$charid = strtoupper(md5(uniqid(rand(), true)));
$hyphen = chr(45); // "-"
$uuid = chr(123) // "{"
. substr($charid, 0, 8) . $hyphen . substr($charid, 8, 4) . $hyphen . substr($charid, 12, 4) . $hyphen . substr($charid, 16, 4) . $hyphen . substr($charid, 20, 12) . chr(125); // "}"
return trim($uuid, '{}');
}
}
$quid = getGUID();
$licencetype = isset($_POST['licencetype']) ? $_POST['licencetype'] : NULL;
switch ($licencetype) {
case 'domestic':
$holder_id = isset($_POST['holder_id']) ? $_POST['holder_id'] : NULL;
try {
$client = new SoapClient($wdsl, $soapClientOptions);
$client->__setLocation('https://secure4.tvlic.co.za/AccountEnquiryService_1.0/AccountEnquiryService.svc');
$arrParams = array(
'request' => array(
'Header' => array(
'Rquid' => $quid,
'ApiKey' => '2c261e98-90ca-4f7d-90a0-1f5e91ebf416'
),
'AccountIdentifier' => $holder_id,
'AccountIdentifierType' => 'SaidNumber'
)
);
$account = $client->GetAccount($arrParams);
echo json_encode($account);
}
catch (\Exception $e) {
echo "Error!";
echo json_encode($e->getMessage());
echo 'Last response: ' . $client->__getLastResponse();
}
break;
case 'business':
$tvlicencenumber = isset($_POST['tvlicence']) ? $_POST['tvlicence'] : NULL;
try {
$client = new SoapClient($wdsl, $soapClientOptions);
$client->__setLocation('https://secure4.tvlic.co.za/AccountEnquiryService_1.0/AccountEnquiryService.svc');
$arrParams = array(
'request' => array(
'Header' => array(
'Rquid' => $quid,
'ApiKey' => '5957237e-101c-4ff2-8fdc-4bd6c9393a1d'
),
'AccountIdentifier' => $tvlicencenumber,
'AccountIdentifierType' => 'AccountNumber'
)
);
$account = $client->GetAccount($arrParams);
echo json_encode($account);
}
catch (\Exception $e) {
echo "Error!";
echo json_encode($e->getMessage());
echo 'Last response: ' . $client->__getLastResponse();
}
break;
case 'dealer':
$tvlicencenumber = isset($_POST['tvlicence']) ? $_POST['tvlicence'] : NULL;
try {
$client = new SoapClient($wdsl, $soapClientOptions);
$client->__setLocation('https://secure4.tvlic.co.za/AccountEnquiryService_1.0/AccountEnquiryService.svc');
$arrParams = array(
'request' => array(
'Header' => array(
'Rquid' => $quid,
'ApiKey' => '5957237e-101c-4ff2-8fdc-4bd6c9393a1d'
),
'AccountIdentifier' => $tvlicencenumber,
'AccountIdentifierType' => 'AccountNumber'
)
);
$account = $client->GetAccount($arrParams);
echo json_encode($account);
}
catch (\Exception $e) {
echo "Error!";
echo json_encode($e->getMessage());
echo 'Last response: ' . $client->__getLastResponse();
}
break;
default:
echo json_encode('Please select licence type');
}
?>
Xampp 使用:
php 5.6
在线服务器
PHP/5.6.33-0+deb8u1
请帮忙解决这个错误
您确定 https://secure4.tvlic.co.za/AccountEnquiryService_1.0/AccountEnquiryService.svc
是 SOAP 客户端的正确位置吗?当我在浏览器中打开它时,它显示错误 - 当前禁用此服务的元数据发布。即使那是因为我没有初始化 SOAP 客户端来打开它,你仍然从您的 WSDL(顺便说一句,您将 wsdl 变量命名为 $wdsl,我猜是拼写错误,但您始终如一地使用它,所以这不应该成为问题)和 SOAP 地址来看,似乎混合了测试 API 和实时 API。
比较:
↓ SOAP address (not working, even with ?wsdl appended)
https://secure4.tvlic.co.za/AccountEnquiryService_1.0/AccountEnquiryService.svc
https://secure4.tvlic.co.za/AccountEnquiryService_Test_1.0/AccountEnquiryService.svc?wsdl
↑ WSDL address (working)