PHP调用webServer接口遇到的坑

时间:2019-08-22
本文章向大家介绍PHP调用webServer接口遇到的坑,主要包括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