微信公众平台
只需要3个文件
其他的文件夹存放图片和音乐
需要通过微信平台注册测试账号 , 并且需要在新浪云 或者 百度云 或 其他的服务器上有自己的SAE
入口文件代码:
<?php
header('Content-Type: text/html; charset=utf8');
require './WeChat.class.php';
require './TuringRobot.php';
define('APPID', 'wx295360e8f4db8905' );
define('APPSECRET' , '2832b301052fa2a6707d9917d49d099f');
define('TOKEN' , 'liuchen');
$wechat = new Wechat( APPID,APPSECRET , TOKEN);
//验证获取的token的值
//$access_token = $wechat->getAccessToken();
//var_dump($access_token);
//验证获取的ticket的字符串
//$wechat->_getQRCodeTicket('http');
//验证生成二维码
//$wechat->getQRCode(123,'./123.jpg' , WeChat::QRCODE_TYPE_TEMP);
//第一次认证
//$wechat->firstValid();
//测试上传文件素材
//$file = './LightHouse.jpg';
//$result = $wechat->uploadTmp($file , 'image');
//var_export($result);
//删除菜单
//$wechat->menuDelete();
//设置菜单
/*$menu = <<<JSON
{
"button": [
{
"name": "扫码",
"sub_button": [
{
"type": "scancode_waitmsg",
"name": "扫码带提示",
"key": "scancode_waitmsg",
"sub_button": [ ]
},
{
"type": "scancode_push",
"name": "扫码推事件",
"key": "scancode_push",
"sub_button": [ ]
}
]
},
{
"name": "发图",
"sub_button": [
{
"type": "pic_sysphoto",
"name": "系统拍照发图",
"key": "pic_sysphoto",
"sub_button": [ ]
},
{
"type": "pic_photo_or_album",
"name": "拍照或者相册发图",
"key": "pic_photo_or_album",
"sub_button": [ ]
},
{
"type": "pic_weixin",
"name": "微信相册发图",
"key": "pic_weixin",
"sub_button": [ ]
}
]
},
{
"name": "快捷操作",
"sub_button" : [
{
"name": "地理位置",
"type": "location_select",
"key": "location_select"
},
{
"name": "天气",
"type": "view",
"url": "http://m.tianqi.com/"
},
{
"name": "soso",
"type": "view",
"url" : "http://www.soso.com/"
},
]
},
]
}
JSON;
$result = $wechat->menuSet($menu);
var_dump($result);*/
//处理消息的方法
$wechat->responseMSG();
微信类代码:
<?php
class Wechat{
private $_appid; //微信平台的id
private $_appsecret; //微信凭条的secret
private $_token; //公众平台请求开发者时的token
//表示QRCode的类型
const QRCODE_TYPE_TEMP = 1 ;
const QRCODE_TYPE_LIMIT = 2 ;
const QRCODE_TYPE_LIMIT_STR = 3 ;
private $_msg_template = array(
'text' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>',//文本回复XML模板
'image' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[image]]></MsgType><Image><MediaId><![CDATA[%s]]></MediaId></Image></xml>',//图片回复XML模板
'music' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[music]]></MsgType><Music><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><MusicUrl><![CDATA[%s]]></MusicUrl><HQMusicUrl><![CDATA[%s]]></HQMusicUrl><ThumbMediaId><![CDATA[%s]]></ThumbMediaId></Music></xml>',//音乐模板
'news' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>%s</ArticleCount><Articles>%s</Articles></xml>',// 新闻主体
'news_item' => '<item><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item>',//某个新闻模板
);
public function __construct($id , $secret ,$token) {
$this->_appid = $id ;
$this->_appsecret = $secret ;
$this->_token = $token;
}
/**
* 接收入口
*/
public function responseMSG(){
//获取请求的post的xml的字符串
$xml_str = $GLOBALS['HTTP_RAW_POST_DATA'];
//如果没有post数据, 则响应空字符串表示结束
if(empty($xml_str)){
die('');
}
//解析该xml的字符串,利用simpleXML
libxml_disable_entity_loader(true);
//从字符串获取simpleXML对象
$request_xml = simplexml_load_string($xml_str, 'SimpleXMLElement', LIBXML_NOCDATA);
//判断该消息的类型通过元素:MsgType
switch ($request_xml->MsgType) {
case 'event':
//判断具体的时间类型(‘关注 , 取消 ,点击’)
$event = $request_xml->Event;
if('subscribe'==$event){
$this->_doSubScribe($request_xml);
}
break;
case 'text':
//处理文本消息
$this->_doText($request_xml);
break;
case 'image':
//处理图片消息
$this->_doImage($request_xml);
break;
case 'voice':
//处理语音消息
$this->_doVoice($request_xml);
break;
case 'video':
//处理视频消息
$this->_doVideo($request_xml);
break;
case 'shortvideo':
//处理短视频消息
$this->_doShortVideo($request_xml);
break;
case 'location':
//处理位置消息
$this->_doLocation($request_xml);
break;
case 'link':
//处理连接消息
$this->_doLink($request_xml);
break;
default:
break;
}
}
/**
* 上传文件素材
* @param type $file 文件地址
* @param type $type 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)
* @return type
*/
public function uploadTmp($file , $type){
$url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=".$this->_getAccessToken()."&type=".$type;
$data = array(
'media' => '@'.$file,
);
$result = $this->_requestPost($url, $data);
$result_obj = json_decode($result);
return $result_obj;
}
/**
* 处理位置响应信息
* @param type $request_xml
*/
private function _doLocation($request_xml){
// $content = '你的坐标为,经度:'.$request_xml->Location_Y.',纬度:'.$request_xml->Location_X . "\n" . '你所在的位置为:' . $request_xml->Label;
// $this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $content);
// 利用位置获取信息
//百度LBS圆形范围查询:
$url = 'http://api.map.baidu.com/place/v2/search?query=%s&location=%s&radius=%s&output=%s&ak=%s';
$query = isset($_SESSION['need'])?$_SESSION['need']:'银行';
$location = $request_xml->Location_X . ',' . $request_xml->Location_Y;
$radius = 2000;
$output = 'json';
$ak = 'OBDl6igKrng0V6VqT5RWIP6z';
$url = sprintf($url, urlencode($query), $location, $radius, $output, $ak);
$result = $this->_requestGet($url, false);
$result_obj = json_decode($result);
$re_list = array();
foreach($result_obj->results as $re) {
$r['name'] = $re->name;
$r['address'] = $re->address;
$re_list[] = implode('-', $r);
}
$re_str = implode("\n", $re_list);
//清空session
$_SESSION['need'] = NUlL;
$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $re_str);
}
/**
* 处理图片响应信息
* @param type $request_xml
*/
private function _doImage($request_xml){
$content = '你所上传的图片的Media_ID:' . $request_xml->MediaId;
$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $content);
}
/**
* 处理文本信息的方法
* @param type $request_xml
*/
private function _doText($request_xml){
// 获取文本内容
$content = $request_xml->Content;
// 对内容进行判断
if ('帮助' == $content) {
// 显示帮助信息
$response_content = '输入对应序号或名称,获取相应资源' . "\n" . '[1]看美女'."\n". '[2]看帅哥' . "\n" . '[3]看屌丝';
// 将处理好的响应数据回复给用户
$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $response_content);
}
elseif ('1' == strtolower($content) || 'php'==strtolower($content)) {
$response_content = '看美女: ' . "\n" . 'http://tu.duowan.com/m/meinv';
// 将处理好的响应数据回复给用户
$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $response_content);
}
elseif ('2' == strtolower($content) || 'java'==strtolower($content)) {
$response_content = '看帅哥: ' . "\n" . 'http://www.shuaigepic.com/';
// 将处理好的响应数据回复给用户
$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $response_content);
}
elseif ('3' == strtolower($content) || 'c++'==strtolower($content)) {
$response_content = '看屌丝: ' . "\n" . 'http://www.qqtn.com/article/article_105173_1.html';
// 将处理好的响应数据回复给用户
$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $response_content);
}
elseif ('图片' == $content ) {
$id_list = array(
'./image/1.jpg',
'./image/2.jpg',
'./image/3.jpg',
'./image/4.jpg',
'./image/5.jpg',
'./image/6.jpg',
);
$rand_index = mt_rand(0, count($id_list)-1);
$this->_msgImage( $request_xml->FromUserName, $request_xml->ToUserName ,$id_list[$rand_index] , false);
}
elseif ('音乐' == $content) {
$music_url = 'http://icoice.applinzi.com/mp3/BIGBANG-IF YOU (JPN Ver.).mp3';
$ha_music_url = 'http://icoice.applinzi.com/mp3/BIGBANG-IF YOU (JPN Ver.).mp3';
$thumb_media_id = 'CS6c54j3NCW6kv1AynZ2kx-g1RMOR678d2c3vZGoIIYA6J6_j3nOwXsILpxfJXXE';
$title = 'IF YOU';
$desc = 'IF YOU LOVE';
$this->_msgMusic($request_xml->FromUserName, $request_xml->ToUserName, $music_url, $hq_music_url, $thumb_media_id, $title, $desc);
}
elseif ('新闻测试' == $content) {
$item_list = array(
array('title'=>'其实你该用母亲的方式回报母亲', 'desc'=>'母亲节快乐', 'picurl'=>'http://icoice.applinzi.com/news/2.jpg', 'url'=>'http://www.soso.com/'),
array('title'=>'母亲节宠爱不手软,黄金秒杀豪礼特惠值到爆', 'desc'=>'母亲节快乐', 'picurl'=>'http://icoice.applinzi.com/news/3.jpg', 'url'=>'http://www.soso.com/'),
array('title'=>'浅从财富管理视角看巴菲特思想', 'desc'=>'母亲节快乐', 'picurl'=>'http://icoice.applinzi.com/news/4.jpg', 'url'=>'http://www.soso.com/'),
array('title'=>'广邀好友打气,赢取万元旅游金', 'desc'=>'母亲节快乐', 'picurl'=>'http://icoice.applinzi.com/news/5.jpg', 'url'=>'http://www.soso.com/'),
);
$this->_msgNews($request_xml->FromUserName, $request_xml->ToUserName, $item_list);
}
elseif('附近' == substr ($content, 0 , 6)){
// 保存session
$_SESSION['need'] = substr ($content, 6 );
$response_content = '你发送你的位置信息?';
// 将处理好的响应数据回复给用户
$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $response_content);
}
else {
$this->receiveText($request_xml);
}
}
/**
* 其他的文本消息使用机器人
*
* @param $obj
* @return string
*/
private function receiveText($request_xml){
$content = $request_xml->Content;
// 图灵机器人消息处理
$robot = new TuringRobot();
$info = $robot->getInfo($content, $request_xml->FromUserName);
switch ($info["code"]) {
case 100000: // 文本类
$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $robot->textInfo($info) );
case 200000: // 链接类
$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $robot->linkInfo($info) );
case 302000: // 新闻类
return $this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $robot->newsInfo($info) );
case 308000: // 菜谱类
return $this->_msgNews($request_xml->FromUserName, $request_xml->ToUserName, $robot->cookbookInfo($info) );
case 313000: // 儿歌类(儿童版)
case 314000: // 诗歌类(儿童版)
default:
return "亲,你能说的再简单点吗?我有点理解不过来啦!";
}
}
/**
* 用于处理关注时间的方法
* @param type $request_xml 事件信息对象
*/
private function _doSubScribe($request_xml){
//利用消息发送,完成向关注账号发信息
$content = '感谢你关注, 会向你发送优惠信息,请查收';
$this->_msgText($request_xml->FromUserName, $request_xml->ToUserName,$content);
}
/**
* 发送新闻消息
* @param type $to
* @param type $from
* @param type $item_list
*/
private function _msgNews($to, $from, $item_list=array()) {
// 拼凑文章部分
$item_str = '';
foreach($item_list as $item) {
$item_str .= sprintf($this->_msg_template['news_item'], $item['title'], $item['desc'], $item['picurl'], $item['url']);
}
//拼凑整体图文部分
$response = sprintf($this->_msg_template['news'], $to, $from, time(), count($item_list), $item_str);
die($response);
}
/**
* 发送音乐消息
* @param type $to
* @param type $from
* @param type $music_url
* @param type $hq_music_url
* @param type $thumb_media_id
* @param type $title
* @param type $desc
*/
private function _msgMusic($to, $from, $music_url ,$hq_music_url , $thumb_media_id , $title='' ,$desc=''){
//拼凑图像类xml文件
$response = sprintf($this->_msg_template['music'],$to , $from , time() ,$title ,$desc , $music_url , $hq_music_url,$thumb_media_id );
die($response);
}
/**
* 发送图片消息
* @param type $to
* @param type $from
* @param type $file 图片的文件地址
* @param type $is_id $file文件是否是media_id
*/
private function _msgImage($to, $from, $file , $is_id=false){
if($is_id){
$media_id = $file ;
}else{
//上传图片带微信公众服务器,获取mediaID
$result_obj = $this->uploadTmp($file , 'image');
$media_id = $result_obj->media_id;
}
//拼凑图像类xml文件
$response = sprintf($this->_msg_template['image'],$to , $from , time() ,$media_id);
die($response);
}
/**
* 发送文本信息
* @param [type] $to 目标用户ID
* @param [type] $from 来源用户ID
* @param [type] $content 内容
* @return [type] [description]
*/
private function _msgText($to, $from, $content) {
$response = sprintf($this->_msg_template['text'], $to, $from, time(), $content);
die($response);
}
/**
* 第一次认证微信与服务器的连接
*/
public function firstValid(){
//检验签名的合法性
if($this->_checkSignature()){
//签名合法, 告知微信公众平台服务器 , 随便什么字
echo $_GET['echostr'];
}
}
/**
* 验证签名加密码是否一至
* @return boolean
*/
private function _checkSignature(){
// 获得由微信公众平台请求的验证数据
$signature = $_GET['signature'];
$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];
// 将时间戳,随机字符串,token按照字母顺序排序并连接
$tmp_arr = array($this->_token, $timestamp, $nonce);
sort($tmp_arr, SORT_STRING);// 字典顺序
$tmp_str = implode($tmp_arr);//连接
$tmp_str = sha1($tmp_str);// sha1签名
if ($signature == $tmp_str) {
return true;
} else {
return false;
}
}
/**
* 获取access_token
* @param string $token_file 用来储存token的临时文件
* @return string 返回token字符串
*/
private function _getAccessToken($token_file = './access_token'){
//考虑是否过期的问题
$life_time = 7200;
if(file_exists($token_file) && time()-filemtime($token_file)<$life_time){
return file_get_contents($token_file);
}
//目标
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->_appid}&secret={$this->_appsecret}";
//向url发送get请求
$result = $this->_requestGet($url);
if(!$result){
return false;
}
$result_obj = json_decode($result);
//写入文件
file_put_contents($token_file, $result_obj->access_token);
return $result_obj->access_token;
}
/**
* 私有的方法获取Ticket
* @param string $content 内容
* @param type $type QR码类型是否是临时的或永久的
* @param type $expire 如果是临时需要带此参数表示有效期
* @return string ticket 的字符串
*/
public function _getQRCodeTicket( $content , $type=1 , $expire = 604800){
$access_token = $this->_getAccessToken(); //获取token来获取ticket
$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=$access_token";
$type_list = array(
self::QRCODE_TYPE_TEMP=>'QR_SCENE',
self::QRCODE_TYPE_LIMIT=>'QR_LIMIT_SCENE',
self::QRCODE_TYPE_LIMIT_STR=>'QR_LIMIT_STR_SCENE',
);
$action_name = $type_list[$type];
switch ($type) {
case self::QRCODE_TYPE_TEMP:
$data_arr['expire_seconds'] = $expire ;
$data_arr['action_name'] = $action_name;
$data_arr['action_info']['scene']['scene_id'] = $content;
break;
case self::QRCODE_TYPE_LIMIT:
case self::QRCODE_TYPE_LIMIT_STR:
$data_arr['action_name'] = $action_name;
$data_arr['action_info']['scene']['scene_id'] = $content;
break;
default:
break;
}
$data = json_encode($data_arr);
$result = $this->_requestPost($url , $data);
if(!$result){
return false;
}
$result_obj = json_decode($result);
return $result_obj->ticket;
}
/**
* 获取二维码的接口
* @param string/int $content 内容标志
* @param type $file 文件的地址,如果为null表示直接输出
* @param int $type QR码类型是否是临时的或永久的
* @param int $expire 如果是临时需要带此参数表示有效期
* @return 二维码图片
*/
public function getQRCode($content ,$file=NULL , $type=1 , $expire = 604800){
//首先获取ticket
$ticket = $this->_getQRCodeTicket($content , $type=1 , $expire = 604800);
$url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=$ticket";
$result = $this->_requestGet($url);
if($file){
file_put_contents( $file , $result);
}
header('Content-Type: image/jpeg');
echo $result;
}
/*########################菜单管理#########################*/
/**
* 设置菜单
*/
public function menuSet($menu) {
$url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=' . $this->_getAccessToken();
$data = $menu;
$result = $this->_requestPost($url, $data);
$result_obj = json_decode($result);
if ($result_obj->errcode == 0) {
return true;
} else {
echo $result_obj->errmsg, '<br>';
return false;
}
}
/**
* 菜单删除
*/
public function menuDelete() {
$url = 'https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=' . $this->_getAccessToken();
$result = $this->_requestGet($url);
$result_obj = json_decode($result);
if ($result_obj->errcode == 0) {
return true;
} else {
return false;
}
}
/*###################一下私有的方法######################*/
/**
* 发送post请求的方式
* @param string $url
*@param type $data 传递的数据
* @param bool $ssl 是否为https协议
* @return string 响应主体Content
*/
private function _requestPost($url, $data, $ssl=true){
// curl完成
$curl = curl_init();
//设置curl选项
curl_setopt($curl, CURLOPT_URL, $url);//URL
$user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 FirePHP/0.7.4';
curl_setopt($curl, CURLOPT_USERAGENT, $user_agent);//user_agent,请求代理信息
curl_setopt($curl, CURLOPT_AUTOREFERER, true);//referer头,请求来源
curl_setopt($curl, CURLOPT_TIMEOUT, 30);//设置超时时间
//SSL相关
if ($ssl) {
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//禁用后cURL将终止从服务端进行验证
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//检查服务器SSL证书中是否存在一个公用名(common name)。
}
// 处理post相关选项
curl_setopt($curl, CURLOPT_POST, true);// 是否为POST请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);// 处理请求数据
// 处理响应结果
curl_setopt($curl, CURLOPT_HEADER, false);//是否处理响应头
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//curl_exec()是否返回响应结果
// 发出请求
$response = curl_exec($curl);
if (false === $response) {
echo '<br>', curl_error($curl), '<br>';
return false;
}
curl_close($curl);
return $response;
}
/**
* 发送get请求的方式
* @param string $url
* @param bool $ssl 是否为https协议
* @return string 响应主体Content
*/
private function _requestGet($url , $ssl = true){
// curl完成
$curl = curl_init();
//设置curl选项
curl_setopt($curl, CURLOPT_URL, $url);//URL
$user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 FirePHP/0.7.4';
curl_setopt($curl, CURLOPT_USERAGENT, $user_agent);//user_agent,请求代理信息
curl_setopt($curl, CURLOPT_AUTOREFERER, true);//referer头,请求来源
curl_setopt($curl, CURLOPT_TIMEOUT, 30);//设置超时时间
//SSL相关
if ($ssl) {
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//禁用后cURL将终止从服务端进行验证
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//检查服务器SSL证书中是否存在一个公用名(common name)。
}
curl_setopt($curl, CURLOPT_HEADER, false);//是否处理响应头
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//curl_exec()是否返回响应结果 , 或输出
$response = curl_exec($curl);
if(false == $response ){
echo '<br>', curl_error($curl),'<br/>';
return false;
}
curl_close($curl);
return $response;
}
}
机器人类代码:
<?php
/**
* Created by PhpStorm.
* User: Ainsworth
* Date: 16/4/9
* Time: 下午5:20
*/
define("TURING_API_URL", "http://www.tuling123.com/openapi/api");
define("TURING_API_KEY", "0c7d39a230f84b98903f61be912fdf06");
class TuringRobot
{
/**
* 获取图灵机器人的回复
*
* @param $content
* @param $user_id
* @return string
*/
public function getInfo($content, $user_id)
{
$url = TURING_API_URL . "?key=" . TURING_API_KEY . "&info=" . $content . "&userid=" . $user_id;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output, true);
}
/**
* 回复文本消息
*
* @param $info
* @return mixed
*/
public function textInfo($info)
{
return $info["text"];
}
/**
* 回复链接消息
*
* @param $info
* @return string
*/
public function linkInfo($info)
{
return $info["text"] . "\n" . $info["url"];
}
/**
* 回复新闻消息
*
* @param $info
* @return string
*/
public function newsInfo($info)
{
$news = $info["text"] . "\n\n";
$list = $info["list"];
//foreach ($list as $l) {
for ($i = 0; $i < count($list); $i++) {
if ($i > 8) break;
error_log($list[$i]["icon"]);
$news .= $list[$i]["article"] . "\n" . $list[$i]["detailurl"] . "\n";
}
return $news;
}
/**
* 回复菜谱消息
*
* @param $info
* @return array
*/
public function cookbookInfo($info)
{
$new_list = array();
$list = $info["list"];
for ($i = 0; $i < count($list); $i++) {
// 由于微信图文消息最多发8条, 所以这边限制下
if ($i > 5) break;
$new_list[$i] = array("title" => $list[$i]["name"],
"desc" => $list[$i]["info"],
"picurl" => $list[$i]["icon"],
"url" => $list[$i]["detailurl"]);
}
return $new_list;
}
}