昨天公司分配给我一个任务,写一个中转接口,目标接口是一个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. Unicode-objects must be encoded before hashing 错误解决办法

    提交注册用户数据后出来这个,错误原因是update()必须指定要加密的字符串的字符编码 #encryptions1 = sha1()s1.update(upwd.encode("utf8&q ...

  2. A1130 | 中缀表达式、查找根节点

    代码: #include <stdio.h> #include <memory.h> #include <math.h> #include <string&g ...

  3. 在UE4C++中的宏

    1. UE4蓝图的宏 在蓝图中,我们可以把一堆经常使用的节点封装为一个宏,然后通过多次使用这个宏,达到了减少重复代码量的效果. 如图: 2. UE4C++中的宏 那么,在UE4的C++中怎么实现宏呢? ...

  4. 【11NOIP提高组】选择客栈(信息学奥赛一本通 1546)(洛谷 1311)

    题目描述 丽江河边有nn家很有特色的客栈,客栈按照其位置顺序从 11到nn编号.每家客栈都按照某一种色调进行装饰(总共 kk 种,用整数 00 ~k-1k−1 表示),且每家客栈都设有一家咖啡店,每家 ...

  5. 菜鸟网络Java面试-社招-一面(2019/11)

    个人情况 2017年毕业,普通本科,计算机科学与技术专业,毕业后在一个二三线小城市从事Java开发,2年Java开发经验.做过分布式开发,没有高并发的处理经验,平时做To G的项目居多.写下面经是希望 ...

  6. 实践分布式配置中心Apollo

    简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景 ...

  7. Elasticsearch Java Rest Client简述

    ESJavaClient的历史 JavaAPI Client 优势:基于transport进行数据访问,能够使用ES集群内部的性能特性,性能相对好 劣势:client版本需要和es集群版本一致,数据序 ...

  8. Mysql之Incorrect string value: '\xF0\x9F\x98\x89 \xE6... 保存emoji表情

    错误信息如下: Incorrect string value: '\xF0\x9F\x98\x89 \xE6...' 问题产生的原因是字符串不兼容4字节的unicode导致的,一般我们常见的表情编码等 ...

  9. Server Tomcat v8.5 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.

    Server Tomcat v9.0 Server at localhost was unable to start within 45 seconds. If the server requires ...

  10. django入门8之xadmin引入富文本和excel插件

    django入门8之xadmin引入富文本和excel插件 Xadmin引入富文本 插件的文档 https://xadmin.readthedocs.io/en/docs-chinese/make_p ...