开发者端:发送请求,并接收结果

<?php

//  下面的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>"; // echo $xml;
return $xml; ?>

PHP通过XML报文格式的POST请求方式,与第三方接口交互(发送xml,获取XML,并解析xml步骤)的更多相关文章

  1. 使用LR编写windows sockets协议xml报文格式脚本实战

    以下是测试脚本Demo: #include "lrs.h" Action() { char * resultCode;//结果代码 char * time; //系统时间 char ...

  2. go中处理各种请求方式以及处理接口请求参数

    话不多说直接上代码,解读内容全部在代码中 1.处理请求方式 package main import ( "fmt" "io/ioutil" "net/ ...

  3. XML 文档定义有几种形式?它们之间有何本质区别?解析 XML 文档有哪几种方式?

    XML 文档定义分为 DTD 和 Schema 两种形式,二者都是对 XML 语法的约束,其 本质区别在于 Schema 本身也是一个 XML 文件,可以被 XML 解析器解析,而且 可以为 XML ...

  4. DNS报文格式(RFC1035)

    一.域名和资源记录的定义 1.Name space definitions 2.资源记录定义(RR definitions)      2.1 格式          后面分析报文的时候详细解释.   ...

  5. HTTP协议报文格式

    HTTP协议报文格式 接下来我们看看HTTP协议(Hypertext Transfer Protocol――超文本传输协议)浏览器端(客户端)向WEB服务器端访问页面的过程和HTTP协议报文的格式. ...

  6. rabbitmq - 消息接收,解析xml格式数据时异常:ERROR not well-formed (invalid token): line 4, column 46

    ERROR alsv odoo.addons.cus_alsv.utils.alsv_about_mq.get_data_from_mq: parse_xml_data_from_mq: not we ...

  7. Java开发笔记(一百零九)XML报文的定义和解析

    前面介绍了JSON格式的报文解析,虽然json串短小精悍,也能有效表达层次结构,但是每个元素只能找到对应的元素值,不能体现更丰富的样式特征.比如某个元素除了要传输它的字符串文本,还想传输该文本的类型. ...

  8. Android中解析XML格式数据的方法

    XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...

  9. (四)SAX方式解析XML数据

    SAX方式解析XML数据 ​文章来源:http://www.cnblogs.com/smyhvae/p/4044170.html 一.XML和Json数据的引入: 通常情况下,每个需要访问网络的应用程 ...

随机推荐

  1. Spring Bean的加载

    Spring加载bean的原则:不等bean创建完成就会将创建bean的ObjectFactory提早曝光加入到缓存中.   单例bean在Spring容器里只会创建一次,后续创建时会首先从缓存中获取 ...

  2. Android学习--自己在使用HttpConnection时遇到的EOFException

    在学习第一行代码第14章酷欧天气的时候,HttpUtil类中的sendHttpRequest方法发出请求,然后返回响应信息,但是出现了EOFException异常,代码如下: HttpURLConne ...

  3. MVC中部分视图调用方法总结

    部分视图不走  controller @Html.Partial(“_Menu”);  //这种是不走Controller的,直接在加载_Menu的视图 @Html.Partial(“_Menu”, ...

  4. 【原】为什么选择iPhone5的分辨率作为H5视觉稿尺寸

    [20160105更新:可以用iPhone6分辨率为视觉稿尺寸啦] 又是一年的520网络情人节,深圳这边却下了大雨,这雨只能是单身汉的泪,而对于我来说这一天具有特别的意义,一来怀念父亲,二来对我这种结 ...

  5. cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'mvc:annotation-driven'.

    spring 配置文件报错报错信息:cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be ...

  6. jQuery获取margin-top和padding-top的值

    var bordT = $('img').outerWidth() - $('img').innerWidth();  var paddT = $('img').innerWidth() - $('i ...

  7. MariaDB学习

    社区:http://www.mariadbpub.com/forum.php

  8. UVA10304

    全部遍历.设置两个下标,若相同i++,j++,不相同则j++. #include<stdio.h> #include<string.h> int main(){ ]; ]; s ...

  9. [LeetCode] Find K Pairs with Smallest Sums 找和最小的K对数字

    You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. Define ...

  10. 类EF框架Chloe.ORM升级:只为更完美

    扯淡 Chloe.ORM:一款轻量.高效的.NET C#数据库访问框架(ORM).查询接口借鉴 Linq(但不支持 Linq).借助 lambda 表达式,可以完全用面向对象的方式就能轻松执行多表连接 ...