PHP调用.NET的asmx服务接口

由于业务需求对接.net服务(我这边是yii2框架),接口方要求登录后才能调用。调用过程中遇到了各种各样的错误,使用浏览器输入账号密码可以访问,但是使用SoapHeader类遇到了各种各样的报错。 网上关于这块的资料也比较少,最后下载了个SoapUI,根据这个工具的请求头一点一点试出来了。

在此说明两点:

  • .net提供的接口,请求时要在尾部加上"?wsdl"
  • 请求头最好按照请求的规则加上namespace、name,参数部分按照SoapUI中请求成功的结果全部填写上去,值也保持一致。

代码如下:

php 复制代码
        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);
相关推荐
新鲜势力呀21 分钟前
PHP 消息队列实战:从同步接口阻塞到 RabbitMQ + Redis队列 + 异步任务架构完整优化方案
redis·rabbitmq·php
新鲜势力呀2 小时前
PHP 日志系统实战:从排查线上故障困难到 ELK日志分析 + 链路追踪 + 实时监控完整架构方案
elk·架构·php
事圆则缓6 小时前
Kotlin Flow、StateFlow、SharedFlow 全解析:冷流、热流与 Android 状态管理
android·kotlin·php
汤米粥7 小时前
后端开发主流技术方案
java·python·golang·php·nodejs·后端开发
在猴站学算法7 小时前
(实战)PHP文件包含漏洞
网络安全·php
谢亮_vipxieliang8 小时前
PHP 8 新特性:构造器属性提升与实战
开发语言·后端·php
CSharp精选营8 小时前
IIS 后面挂 Kestrel,这 3 个配置错了就 502
kestrel·.net·iis配置
鑫 源8 小时前
C#源码开源, 获取macOS 电池数据,包括iOS (xamarin开发)
c#·.net·xamarin
Highcharts.js8 小时前
动态数据可视化架构:Highcharts + PHP + MySQL 从数据库到数据渲染
数据库·mysql·php·开发文档·实时数据·highcharts·图表开发
专业程序开发源8 小时前
springboot校园志愿者管理系统28562-计算机课程设计、毕业设计
java·spring boot·后端·python·django·php·课程设计