//
下面的demo,实现的功能如下:
// 1-开发者需要判断一个用户是否存在,去请求第三方接口。
// 2-与第三方接口的通信,是以xml格式传送数据。开发者把用户信息以xml格式发送给第三方接口
// 3-第三方接口获取开发者的xml数据,通过数据的查询,把结果再以xml的格式发送给开发者。
//首先检测是否支持curl
if
(!
extension_loaded
("curl"
)) {
trigger_error
("对不起,请开启curl功能模块!",
E_USER_ERROR
);
//
构造xml
$xmldata
="<?xml version='1.0' encoding='UTF-8'?><group><name>张三</name><age>22</age></group>"
;
//
初始一个curl会话
$curl
=
curl_init();
//
设置url
curl_setopt(
$curl
, CURLOPT_URL,"http://localhost/demo/dealxml.php"
);
//
设置发送方式:post
curl_setopt(
$curl
, CURLOPT_POST,
true
);
//
设置发送数据
curl_setopt(
$curl
, CURLOPT_POSTFIELDS,
$xmldata
);
//
TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出
curl_setopt(
$curl
, CURLOPT_RETURNTRANSFER,
TRUE
);
//
执行cURL会话 ( 返回的数据为xml )
$return_xml
= curl_exec(
$curl
);
//
关闭cURL资源,并且释放系统资源
curl_close(
$curl
);
//
echo $return_xml;
//exit;
//禁止引用外部xml实体
libxml_disable_entity_loader(
true
);
//
先把xml转换为simplexml对象,再把simplexml对象转换成 json,再将 json 转换成数组。
$value_array
= json_decode(json_encode(
simplexml_load_string
(
$return_xml
, 'SimpleXMLElement', LIBXML_NOCDATA)),
true
);
echo
"<pre>"
;
print_r
(
$value_array
);
第三方接口端:接收请求,并返回处理结果
<?php
//接收传送的数据
$fileContent = file_get_contents("php://input");
### 把xml转换为数组
//禁止引用外部xml实体
libxml_disable_entity_loader(true);
//先把xml转换为simplexml对象,再把simplexml对象转换成 json,再将 json 转换成数组。
$value_array = json_decode(json_encode(simplexml_load_string($fileContent, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
### 获取值,进行业务处理
$name = $value_array['name'];
$age = $value_array['age'];
// 通过查询,判断该用户是否存在
### 把查询结果添加到数组中
$value_array['result'] = 1;
### 把数组转换为xml格式,返回
$xml = "<?xml version='1.0' encoding='UTF-8'?><group>";
foreach ($value_array as $key=>$val)
if (is_numeric($val)){
$xml.="<".$key.">".$val."</".$key.">";
}else{
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
$xml.="</group>";