昨天公司分配给我一个任务,写一个中转接口,目标接口是一个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参数名呢?行吧,没有我自己找,上面我有写,怎么获取方法名以及参数名。

暂时到这里。

PHP调用webServer接口遇到的坑的更多相关文章

  1. 微信网页开发调用微信jssdk接口遇到的坑以及最终解决方法 (持续更新)

    1.微信网页开发调用jssdk时报permission denied 大致是两个原因 (1)首先注册时未将你所调用的接口名字添加至jsApiList (2)第二个就是你的这个公众号没有权限使用这个ap ...

  2. java springboot调用第三方接口 借助hutoool工具类 爬坑

    楼主是个后端小白一枚,之前没接触过后端,只学了java基本语法,还是在学校老师教的,学的很浅,什么ssh.ssm框架都没有学,最近在自学spring boot,看书学也看不是很懂,就在b站上看教学视频 ...

  3. [C#] 图文解说调用WebServer实例

    本文旨在实现如何在.NET环境下调用WebServer,以天气接口为例进行说明. WebServer地址:http://www.webxml.com.cn/WebServices/WeatherWeb ...

  4. 关于Silverlight调用天气预报接口问题

    问题:因Silverlight客户端不能直接调用webservice接口(外网天气接口),调用会出现跨域访问的问题,即使添加了跨域文件也不好使.解决方法如下 解决方法一:1.在服务端建立一个wcf服务 ...

  5. js调用Webservice接口案例

    第一步:新建Webservice接口 主文件方法 using System;using System.Collections.Generic;using System.Web;using System ...

  6. C# 调用webserver 出现:未能从程序集“jgd3jufm, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型

    一般都是 用的动态调用webserver,然后这次用的是固定的 首先 最后 实例化改接口,然后直接传值调用

  7. 调用中行接口针对返回报文(xml形式)做相关处理

    最近在对接中行银行接口,在获取返回报文的时候遇到一些问题,现在在这里做个总结 TIP: 在返回报文之前,要对前置机的URL请求,在这期间遇到一个坑,还是通过查看日志才发现问题 在填写转账信息的时候要求 ...

  8. WebApi接口 - 如何在应用中调用webapi接口

    很高兴能再次和大家分享webapi接口的相关文章,本篇将要讲解的是如何在应用中调用webapi接口:对于大部分做内部管理系统及类似系统的朋友来说很少会去调用别人的接口,因此可能在这方面存在一些困惑,希 ...

  9. C#动态调用WCF接口,两种方式任你选。

    写在前面 接触WCF还是它在最初诞生之处,一个分布式应用的巨作. 从开始接触到现在断断续续,真正使用的项目少之又少,更谈不上深入WCF内部实现机制和原理去研究,最近自己做一个项目时用到了WCF. 从这 ...

随机推荐

  1. html css div固定底部

    <div id="father"> <footer></footer> </div> #father{ position:relat ...

  2. MongoDB干货系列2-MongoDB执行计划分析详解(2)(转载)

    写在之前的话 作为近年最为火热的文档型数据库,MongoDB受到了越来越多人的关注,但是由于国内的MongoDB相关技术分享屈指可数,不少朋友向我抱怨无从下手. <MongoDB干货系列> ...

  3. 洛谷 P2872 【[USACO07DEC]道路建设Building Roads】

    P2872 传送门 首先 题目概括:题目让着求使所有牧场都联通.需要修建多长的路. 显然这是一道最小生成树板子题(推荐初学者做). 那我就说一下kruskal吧. Kruskal算法是一种用来查找最小 ...

  4. 如何实现大麦场在线选座 svg js

    本实例来源于此网站,内有Demo,可查看 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  5. Web 开发中 文件上传 是出现的:java.io.FileNotFoundException: (文件名、目录名或卷标语法不正确。)

    <span style="font-family: Arial, Helvetica, sans-serif; "> </span> <span st ...

  6. 推荐 11 个好用的 JS 动画库

    为了保证的可读性,本文采用意译而非直译. 1.Three.js 超过46K的星星,这个流行的库提供了非常多的3D显示功能,以一种直观的方式使用 WebGL.这个库提供了<canvas>. ...

  7. js中for..of..的使用和迭代器

    for..of是ES6中引入的新特性,它主要的作用是:循环一个可迭代的对象. 它可以循环遍历,数组.字符串.Set对象等等,先来看两个简单的例子: 遍历字符串 let str = 'Hello' fo ...

  8. 【转】Android 将自己的应用改为系统应用

    所谓系统程序就是system/app目录中的程序,普通应用转换成系统程序后有稳定.减少内存(DATA)空间占用.恢复出厂设置后不会消失.修改系统时间.调用隐藏方法.系统关机重启.静默安装升级卸载应用等 ...

  9. 使用uiautomator2自动化测试app(二)------操作篇

    提示: 1. 推荐使用python3以上的版本来进行开发 2. 手机使用安卓手机,版本最好不要太老,一根数据线 3. 安装虚拟机(博主使用雷电) 操作: 这里只简单的介绍一些uiautomator2的 ...

  10. windows7平台android studio新建Android项目,报错

    Failed to install the following Android SDK packages as some licences have not been accepted. platfo ...