PHP调用webServer接口遇到的坑
昨天公司分配给我一个任务,写一个中转接口,目标接口是一个webservice类型的接口,平时没有接触过,然后遇到一些坑,
一般情况下,能在浏览器打开并显示数据的接口是直接可以使用 CURL或者file_get_contents进行接收的。但是WEBSERVICE是使用Soapservice.所以我们要打开soap扩展,才可以正常访问这种类型接口。
上代码:insure是该接口的方法名
$url = 'http://123.xxxxxx?wsdl'; $client = new SoapClient($url, array('trace'=>true, 'soap_version' => SOAP_1_1)); $result = $client->insure($data);
这样我们就可以访问到接口了,然后第二个坑就是传参数问题。
webservice类型的接口传值需要使用键值对形式进行传递
我遇到的比较傻逼,他提供的接口文档值写明了需要什么类型的参数,但没有写明参数名。误导了我。
遇到这种情况我们可以使用$types = $client->__getTypes();来查看该接口提供了什么方法,以及参数名,
例如:
我需要调的方法是第三个 insure 参数名是string类型的in0,
Array ( [0] => struct searchProductInfo { string in0; } [1] => struct searchProductInfoResponse { string out; } [2] => struct insure { string in0; } [3] => struct insureResponse { string out; } [4] => struct search { string in0; } [5] => struct searchResponse { string out; } [6] => struct surrender { string in0; }
然后包装我们的参数
$xml=file_get_contents("php://input"); //因为我的是中转接口,所以参数是由别人传入的, $data=array('in0'=>$xml); //方法名=>参数
到此,我的任务完美完成。
描述我遇到的问题以及解决思路,
1.首先我第一次接触这种类型接口,不知道要用soap方式访问,我刚开始用的普通方式直接访问的,然后发现不行,百度之后才了解,换成soap方式访问
2.能访问到接口之后,因为我是中转接口,数据不在我这里,我测试接口可以访问,且有返回值,我以为可以了,但是没有,调用我的接口后,返回的值与预计有差别,经检测是参数问题,
3.接到问题后,首先排除了接口无法访问的问题,以及我这边没有接到数据的问题,接口可以访问,参数也没有问题,然后发现是我接到参数,但是我发送给webservice接口时,参数为空?!!经过研究(百度)然后发现webservice限制了只能以键值对传递参数,知道了问题就好解决了嘛,我给他包装成键值对不就完了嘛,然后就引发了下面的问题
4.他的接口肯定需要参数嘛,但是他的参数名是什么???我看了下文档,只有接口名以及需要string类型的xml,emmm参数名呢?行吧,没有我自己找,上面我有写,怎么获取方法名以及参数名。
暂时到这里。
原文地址:https://www.cnblogs.com/cyk2/p/11396258.html
- 5.如何为Impala配置OpenLDAP认证
- 传统Spring项目使用FeignClient组件访问微服务
- 4. 如何为Hive配置OpenLDAP认证
- 3.如何实现OpenLDAP的主主同步
- 2.OpenLDAP集成SSH登录并使用SSSD同步用户
- 1.如何在CentOS6.5安装OpenLDAP并配置客户端
- PHP 面试知识梳理
- 如何修改CM及CDH元数据库配置
- 如何实现CDH元数据库MySQL的高可用
- 如何实现CDH元数据库MySQL的主主互备
- 在Kerberos环境使用Hue通过Oozie执行Sqoop作业报错异常分析
- 如何在Hue中配置已启用SSL的HttpFS服务
- 如何使用Nginx实现CDSW的跨网段访问
- 7.如何在OpenLDAP中实现将一个用户添加到多个组
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- Java 使用异或进行数组元素交换时的坑 返回0的原因
- Spring BindingResult获取不到结果可能的原因之一 参数顺序 没有紧挨着校验参数
- 残差收缩网络:一种深度学习故障诊断算法
- Solr学习笔记 - 关于近实时搜索
- Solr学习笔记 - 关于timeAllowed
- Solr学习笔记 - 关于cache
- PG密码安全
- 如何利用Terraform工具编排管理TcaplusDB
- mysql隐式转换造成的查询结果不正确案例
- 【TBase开源版测评】体验安装
- 【Golang】go get遇到git fetch-pack: expected shallow list
- 聊聊dubbo-go的DefaultHealthChecker
- Java后端面试学习知识总结
- Spring框架源码脉络分析(一):IoC与容器、Bean和BeanDefinition
- Spring-Data-Redis 2.X以上版本使用心得和一些坑