PHP调用.NET的asmx服务接口
2023-12-20 19:07:42
由于业务需求对接.net服务(我这边是yii2框架),接口方要求登录后才能调用。调用过程中遇到了各种各样的错误,使用浏览器输入账号密码可以访问,但是使用SoapHeader类遇到了各种各样的报错。 网上关于这块的资料也比较少,最后下载了个SoapUI,根据这个工具的请求头一点一点试出来了。
在此说明两点:
- .net提供的接口,请求时要在尾部加上"?wsdl"
- 请求头最好按照请求的规则加上namespace、name,参数部分按照SoapUI中请求成功的结果全部填写上去,值也保持一致。
代码如下:
header("content-type:text/html;charset=utf-8");
//禁止soap缓存
ini_set('soap.wsdl_cache_enabled', '0');
//允许加载外部实体
libxml_disable_entity_loader(false);
$opts = array(
'ssl' => array(
'verify_peer' => false
),
'https' => array(
'curl_verify_ssl_peer' => false,
'curl_verify_ssl_host' => false
)
);
$streamContext = stream_context_create($opts);
$client = new \SoapClient('http://X.X.X.X:9000/sd/sd.asmx?wsdl',
array(
'login' => 'user',
'password' => '123456',
'soap_version' => SOAP_1_1,
'encoding' => 'UTF-8',
'stream_context' =>$streamContext
)
);
//此处参数模拟SoapUI请求成功的header头部分
$param = array(
'SourceId' => '?',
'SourceName' => '?',
'UserId' => '?',
'SubmitDate' => '?',
'SubmitTime' => '?',
'UserName' => 'user',
'Password'=>'123456');
//'http://webservice.xxx.cn/SD'和'CredentialHeader'参照服务方给出的文档,或者在浏览器中访问接口地址查看
$header = new \SoapHeader('http://webservice.xxx.cn/SD','CredentialHeader',$param,false);
//添加soapheader
$client->__setSoapHeaders($header);
//GetInfo 为服务端提供的接口名称,后面是请求参数
$response = $client->__soapCall("GetInfo", array(['curef' => '123', 'maincode' => '456']));
var_dump($response);
文章来源:https://blog.csdn.net/qq_32737755/article/details/135113235
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!