我需要在使用Yii框架创建的soap webservice的构造函数输入中传递一个特殊的唯一键(string)。 这是我尝试的例子:
class SoapController extends Controller
{
private $uniqueKey;
public function __construct()
{
$this->uniqueKey = $_GET['uniquekey'];
}
public function actions()
{
return array(
'service'=>array(
'class'=>'CWebServiceAction',
),
);
}
/*
* @return string result
* @soap
*/
public function actionDemo()
{
if(isset($this->uniqueKey))
return $this->uniqueKey;
else
return 'key not set';
}
}
wsdl网址是: ../index.php/soap/service?uniquekey=sss 这会在浏览器中显示wsdl数据。 但是,当我调用演示动作方法(例如使用visual studio)时,我得到了“请求失败,HTTP状态为404:未找到”。'
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message,WebResponse response,Stream responseStream,Boolean asyncCall) 在System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName,Object []参数) ...
在添加'?uniquekey = sss'之前,网络服务工作正常。一部分。
是否有另一种方法可以将$ uniqueKey作为__construct方法的参数传递,或者我是否需要自定义actions()方法? 拜托,我感谢任何建议。
答案 0 :(得分:0)
您可以直接将uniquekey作为$ _GET参数发送到函数:
?的index.php R = SoapController /显示&安培;唯一键= the_unique_key
Yii Controller:
class SoapController extends Controller
{
public function actionShow($uniquekey)
{
//SOAP connect
$this->render('show',array(
'soap_data'=>$soap_data,
));
}
}
PHP SOAP示例:
$options = array(
'exceptions'=>true,
'trace'=>1,
);
$client = new SoapClient("https://s7sps3apissl.scene7.com/scene7/webservice/IpsApi-2012-02-14.wsdl",$options);
$ns = 'http://www.scene7.com/IpsApi/xsd';
$auth = (object)array(
'ns2:user' => 'xXx',
'ns2:password' => 'xXx'
);
$header = new SoapHeader($ns, "authHeader", $auth, false);
$client->__setSoapHeaders(array($header));
//get company handle
$client->getCompanyInfo(array('companyName' => 'xXx'));
//extract company handle
preg_match('~<companyHandle>(.*?)</companyHandle>~s',$client->__getLastResponse(),$companyHandleMatch);
echo $companyHandleMatch[1];