ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
[TOC] ##1)JSON方式封装通信接口 ###**a)PHP生成JSON数据** ~~~php $data = "输出json数据"; // 字符串的编码转换 iconv(in_charset, out_charset, str) // $newData = iconv('UTF-8', 'GBK', $data); // 这个函数只能接受utf-8的编码的数据,如果传递其他格式的数据该函数会返回null echo json_encode($data); ~~~ ###**b)通信数据标准格式** ~~~ 返回格式需要包括: // code 状态码(200,400等) // message 提示信息(邮箱格式不正确;数据返回成功等) // data 返回数据 ~~~ *封装接口方法路径:app/response.PHP* ~~~ class Response { /** * [json 按json方式输出通信数据] * @Author ZJC * @DateTime 2017-02-14T11:58:07+0800 * @param [integer] $code [状态码] * @param string $message [提示信息] * @param array $data [数据] * @return [sting] [返回json数据] */ public static function json($code, $message = '', $data = array()) { if(!is_numeric($code)) { //判断是否数字 return ''; } $result = array( 'code' => $code, 'message' => $message, 'data' => $data ); echo json_encode($result); exit; } } ~~~ *封装路径:app/test.php* ~~~ require_once('./response.php'); $arr = array( 'id' => 1, 'name' => 'singwa' ); Response::json(200, '数据返回成功', $arr); ~~~ ##2)PHP生成XML数据 ###**a)PHP生成XML数据** 组装字符串 使用系统类(DomDocument、XMLWriter、SimpleXML) ###**b)XML方式封装接口数据方法** ~~~ class Response { public static function xml() { // 记住要加header,发送原生的 HTTP 头,才能在网页上查看到标准的XML格式 header('Content-Type:text/xml'); $xml = "<?xml version='1.0' encoding='UTF-8'?>\n"; $xml .= "<root>\n"; $xml .= "<code>200</code>\n"; $xml .= "<message>数据返回成功</message>\n"; $xml .= "<data>\n"; $xml .= "<id>1</id>\n"; $xml .= "<name>singwa</name>\n"; $xml .= "</data>\n"; $xml .= "</root>"; echo $xml; } } Response::xml(); ~~~ ##3)XML方式封装通信接口 ###**XML方式封装接口数据方法** ~~~ class Response { /** * [xmlEncode 按xml方式输出通信数据] * @Author ZJC * @DateTime 2017-02-14T11:58:07+0800 * @param [integer] $code [状态码] * @param string $message [提示信息] * @param array $data [数据] * @return [sting] [返回json数据] */ public static function xmlEncode($code, $message, $data = array()) { if (!is_numeric($code)) { return ''; } $result = array( 'code' => $code, 'message' => $message, 'data' => $data ); header("Content-Type:text/xml"); $xml = "<?xml version='1.0' encoding='UTF-8'?>\n"; $xml .= "<root>\n"; $xml .= self::xmlToEncode($result); $xml .= "</root>"; echo $xml; } // 把数组转换成XML节点 public static function xmlToEncode($data) { $xml = $attr = ""; foreach ($data as $key => $value) { // 健值为数字,转换成<item id="{$key}"></item> if(is_numeric($key)) { $attr = " id='{$key}'"; $key = "item"; } $xml .= "<{$key}{$attr}>"; $xml .= is_array($value) ? self::xmlToEncode($value) : $value; $xml .="</{$key}>\n"; } return $xml; } } //实例 $data = array( 'id' => 1, 'name' => 'singwa', 'type' => array(4,5,6), //数组里没写健值,因此健值默认为0,1,2的情况,需要转换成<item id="0"></item> 'test' => array(1,45,67=>array(123, 'test')), ); Response::xmlEncode(200, 'success', $data); ~~~ ##4)综合方式封装通信数据方法 封装方法:show($code, $message, $data=array(), $type='json') ~~~ class Response { // 常量为默认返回数据类型 const JSON = 'json'; /** * [show 综合通信方法] * @Author ZJC * @DateTime 2017-02-14T16:57:48+0800 * @param [type] $code [状态码] * @param string $message [提示信息] * @param array $data [数据] * @param [type] $type [数据类型] * @return [type] [返回json数据] */ public static function show($code, $message = '', $data = array(), $type = self::JSON) { if(!is_numeric($code)) { return ''; } $type = isset($_GET['format']) ? $_GET['format'] : self::JSON; $result = array( 'code' => $code, 'message' => $message, 'data' => $data ); if($type == 'json') { self::json($code, $message, $data); exit; } elseif($type == 'array') { // 调试查看传递过来的数据 var_dump($result); } elseif($type == 'xml') { self::xmlEncode($code, $message, $data); exit; } else { // TODO } } // 下面代码为json和xml的封装方法,此处省略 } ~~~ *调用路径:app/test.php* ~~~ require_once('./response.php'); $data = array( 'id' => 1, 'name' => 'singwa', 'type' => array(4,5,6), 'test' => array(1,45,67=>array(123, 'test')), ); Response::show(200, 'success', $data, 'array'); ~~~