在WordPress中使用wp_remote_post调用SOAP接口的数据

文 / @UTHEME

SOAP接口的数据发送

我是小本本,今天要讲的主题是如何发送SOAP接口数据。

相对于RESTAPI,SOAP是一种比较复杂的WebService接口,理论上,我们可以使用PHP的SoapClient类来访问SOAP接口获取数据。
在开发一个WordPress主题的时候,我们尝试过使用这个类来访问一下用户同步的API,可经过多次尝试,都不能成功,遂放弃,尝试使用WordPress的wp_remote_post函数来访问这个接口,很快成功了。

准备需要发送的SOAP接口的数据

根据SOAP接口文档,我们先准备好需要发送到SOAP的数据,如下,这些数据是一个标准的PHP数组。每个SOAP接口需要的数据不一样,下面的数据只是示例,具体使用的时候,请根据自己的需要准备这些数据。

$params=[
'data'=>[
'header'=>[
'security'=>[],
'time'=>'2017-12-06',
'sender'=>'user1',
'where'=>"timebetween'2020-07-2500:00:00'and'2020-07-3013:59:03'",
],
],
];

转换后的,需要实际发送的SOAP接口的XML数据

由于SOAP使用的是XML格式的数据,在发送数据之前,我们需要先把上面的数组转化成XML格式。

$xml='<soapenv:Envelopexmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:izn="http://example.com/service">
<soapenv:Header/>
<soapenv:Body>
<izn:doQuery>
<string>'.json_encode($params).'</string>
</izn:doQuery>
</soapenv:Body>
</soapenv:Envelope>';

使用wp_remote_post函数发送数据到SOAP的主要代码

转换之后,我们需要把这个XML数据作为HTTP的body信息发送给SOAP,同时需要设置一下HTTPHeader,说明我们需要传输的数据是xml,并设置内容长度和超时时间。

$service_url='http://example.php/service';

$headers=[
'Content-Type'=>'text/xml',
'Content-Length'=>strlen($xml),
'timeout'=>600,
];

$response=wp_remote_post($service_url,[
'headers'=>$headers,
'body'=>$xml,
]);

从SOAP获取的数据格式也是XML格式的,我们根据需要转换成PHP对象或数组来使用就可以了。

使用PHPcURL库获取SOAP数据

本质上,WordPress的wp_remote_post函数是通过PHP的cURL库请求网络的,所以我们也可以直接使用cURL来请求SOAP接口获取数据。

$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$service_url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_TIMEOUT,1000);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);//theSOAPrequest

//converting
$response=curl_exec($ch);
curl_close($ch);

根据我们的经验,SOAP相对于RESTAPI,使用起来相当麻烦,如果是构建自己的API,建议优先使用RESTAPI,对节省不少时间。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。