weixin.php
来源:原创
时间:2016-07-23
作者:脚本小站
分类:代码笔记
<?php //========================获取access_token==================== //------------------------------------------------------------ // access_token的有效期目前为2个小时 // 方法一: // 调用如下接口获取 access_token // http请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET // APPID 和 APPSECRET 就是你 “开发者中心” 中的 “开发者ID” 信息,如: // appID wx3dc8361f46819110 // appsecret 3c9fd5dfa11e6531701b8a38c59158f1 // 方法二: // 在“微信公众平台接口调试工具”中的“基础支持”获取 access_token ,地址如下: https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index // 填写 APPID 和 APPSECRET 点击 检查问题 按钮,即可获取。 // 返回结果:access_token 在其中。 /* 200 OK Connection: keep-alive Date: Tue, 21 Apr 2015 11:55:10 GMT Server: nginx/1.4.4 Content-Type: application/json; encoding=utf-8 Content-Length: 144 { "access_token": "B_UfOHbKg3OED632oBcBmCrb0dLPwrke4qpsxMxoAWJ_jyurCymiwayy9d6hOLBF91U5FtJr2yu7nor3HKWkBpCIeVjXnmw42UaFsA__8GA", "expires_in": 7200 } */ //========================自定义菜单========================= //------------------------------------------------------------ // 方法一: // 调用如下接口,自定义菜单。 // http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN // 1. 填入 ACCESS_TOKEN // 2. 传入如下 json 信息 /* { "button":[ { "type":"click", "name":"今日歌曲", "key":"V1001_TODAY_MUSIC" }, { "name":"菜单", "sub_button":[ { "type":"view", "name":"搜索", "url":"http://www.soso.com/" }, { "type":"view", "name":"视频", "url":"http://v.qq.com/" }, { "type":"click", "name":"赞一下我们", "key":"V1001_GOOD" }] }] } */ // 方法二: // 在“微信公众平台接口调试工具”中的“自定义菜单” https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index // 1. 填入 ACCESS_TOKEN // 2. 在body中填入 json 信息 // 3. 返回结果:200 OK //--------------------------curl简介-------------------------- //------------------------------------------------------------ // 1、实现远程获取和采集内容 // 2、实现PHP 网页版的FTP上传下载 // 3、实现模拟登陆:去一个邮件系统,curl可以模拟cookies // 4、实现接口对接(API),数据传输等:通过一个平台发送短信啊,抓取和传递所传输的信息。 // 5、实现模拟Cookie等:登陆的状态下才可以操作一些属性。 // 模拟get请求 $curl = curl_init(); curl_setopt($curl,CURLOPT_URL,'http://www.baidu.com'); curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);//1代表返回还是输出 $output = curl_exec($curl); curl_close($curl); // var_dump($output); //---------------------模拟post请求方法---------------------- //------------------------------------------------------------ /** * 模拟post请求方法 * @param $url String 请求的地址 * @param $data unknown 发送的数据 * @return unknown 返回请求的数据 */ function https_request($url,$data = null){ $curl = curl_init(); curl_setopt($curl,CURLOPT_URL,$url); curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false); if(!empty($data)){//如果有数据传入数据 curl_setopt($curl,CURLOPT_POST,1);//CURLOPT_POST 模拟post请求 curl_setopt($curl,CURLOPT_POSTFIELDS,$data);//传入数据 } curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); $output = curl_exec($curl); curl_close($curl); return $output; } //--------------------获取access_token------------------------ //------------------------------------------------------------ /** * 获取 access_token 用到上面的 https_request() * @param $appid String appid * @param $appsecret String appsecret */ function get_token($appid,$appsecret){ $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}"; $json = https_request($url); $arr = json_decode($json,true); return $arr['access_token']; } //------------------------执行设置菜单----------------------- //------------------------------------------------------------ // 菜单json $menu_json = '{ "button":[{ "type":"click", "name":"顶级菜单一", "key":"V1001_TODAY_MUSIC"}, { "name":"顶级菜单二", "sub_button":[ { "type":"view", "name":"搜索w", "url":"http://www.soso.com/"}, { "type":"view", "name":"视频", "url":"http://v.qq.com/"}, { "type":"click", "name":"赞一下我们", "key":"V1001_GOOD" }] }] }'; // 获取 access_token $access_token = get_token('wx3dc8361f46819110','3c9fd5dfa11e6531701b8a38c59158f1'); // 设置菜单的接口 $menu_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token={$access_token}"; // 如果设置成功返回ok信息 $info = https_request($menu_url,$menu_json); // 输出返回信息 print_r($info); //=========================XML处理函数======================= //------------------------------------------------------------ // $GLOBALS['HTTP_RAW_POST_DATA'] 接收另类的post数据 $postStr = $GLOBALS['HTTP_RAW_POST_DATA']; //xml转对象 $postObj = simplexml_load_string($postStr,'simpleXMLElement',LIBXML_NOCDATA); // 参数1,把XML转换为字符串对象 // 参数2,自己定义的类 // 参数3,常量LIBXML_NOCDATA使XML中可以用<![CDATA[hehe]]> //========================将XML转换成对象==================== //------------------------------------------------------------ // XML的头文件必须写 $str = <<<MM <?xml version="1.0" encoding="utf-8"?> <xml> <ToUserName><![CDATA[hehe]]></ToUserName> <FromUserName><![CDATA[haha]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml> MM; $xmlObj = simplexml_load_string($str);//返回XML对象 echo $xmlObj->MsgType; echo $xmlObj->CreateTime; echo $xmlObj->ToUserName; echo $xmlObj->FromUserName; echo $xmlObj->Content; echo $xmlObj->MsgId; //=======================回复消息处理======================== //-----------------------回复文本消息------------------------ /* * param $postObj Object XML对象 * param $content String 回复消息内容 */ private function receiveText($postObj,$content = 'nothing'){ $receiveText = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>"; echo sprintf($receiveText,$postObj->FromUserName,$postObj->ToUserName,time(),$content); }//receiveText //------------------------------------------------------------ //------------------------回复图文消息----------------------- // 返回图文消息 /* * param $postObj Object XML对象 * param $newsArray Array 新闻消息数组 $newsArray = array(); $newsArray[] = array("Title"=>"标题","Description"=>"描述","PicUrl"=>"","Url"=>""); */ private function receiveNews($postObj,$newsArray){ $item = "<item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url></item>"; foreach ($newsArray as $value){ $items .= sprintf($item,$value['Title'],$value['Description'],$value['PicUrl'],$value['Url']); } $receiveNews = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>%s</ArticleCount> <Articles>$items</Articles></xml>"; echo sprintf($receiveNews,$postObj->FromUserName,$postObj->ToUserName,time(),count($newsArray)); }//receiveNews //------------------------------------------------------------ //---------------------回复音乐消息-------------------------- // 回复音乐消息 /* * param $postObj Object XML对象 * param $Title String 音乐标题 * param $Description String 音乐描述 * param $MusicUrl String 音乐地址 * param $HQMusicUrl String 高清音乐地址 */ private function receiveMusic($postObj,$Title = 'title',$Description = 'des',$MusicUrl,$HQMusicUrl){ $receiveMusic = "<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> </Music></xml>"; echo sprintf($receiveMusic,$postObj->FromUserName,$postObj->ToUserName,time(),$Title,$Description,$MusicUrl,$HQMusicUrl); }//receiveMusic //========================关注事件=========================== //------------------------------------------------------------ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[subscribe]]></Event>//事件类型,subscribe(订阅),unsubscribe(取消订阅) </xml> //========================文本消息=========================== //----------------------接收文本消息------------------------- <xml> <ToUserName><![CDATA[kangku]]></ToUserName> //开发者用户名 <FromUserName><![CDATA[xiaoming]]></FromUserName> //用户的用户名 <CreateTime>1348831860</CreateTime> //创建时间 <MsgType><![CDATA[text]]></MsgType> //文本格式 <Content><![CDATA[hello]]></Content> //文本消息内容 <MsgId>1234567890123456</MsgId> //消息id,64位整型 </xml> //------------------------回复文本消息----------------------- //------------------------------------------------------------ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[ 你好]]></Content> </xml> //=========================图片消息========================== //------------------------------------------------------------ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[image]]></MsgType> //消息类型image <PicUrl><![CDATA[this is a url]]></PicUrl> //图片链接 <MediaId><![CDATA[media_id]]></MediaId> //图片消息媒体id,可以调用多媒体文件下载接口拉取数据。 <MsgId>1234567890123456</MsgId> //消息id,64位整型 </xml> //-------------------------回复图片消息---------------------- //------------------------------------------------------------ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[image]]></MsgType> <Image> <MediaId><![CDATA[media_id]]></MediaId> </Image> </xml> //=========================语音消息========================== //------------------------------------------------------------ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1357290913</CreateTime> <MsgType><![CDATA[voice]]></MsgType> //语音为voice <MediaId><![CDATA[media_id]]></MediaId> //语音消息媒体id,可以调用多媒体文件下载接口拉取数据。 <Format><![CDATA[Format]]></Format> //语音格式,如amr,speex等 <MsgId>1234567890123456</MsgId> </xml> //------------------------------------------------------------ //------------------------回复语音消息----------------------- <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[voice]]></MsgType> <Voice> <MediaId><![CDATA[media_id]]></MediaId> </Voice> </xml> //-------------------------回复音乐消息---------------------- //------------------------------------------------------------ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[music]]></MsgType> <Music> <Title><![CDATA[TITLE]]></Title> <Description><![CDATA[DESCRIPTION]]></Description> <MusicUrl><![CDATA[MUSIC_Url]]></MusicUrl>//音乐链接 <HQMusicUrl><![CDATA[HQ_MUSIC_Url]]></HQMusicUrl>//高质量音乐链接,WIFI环境优先使用该链接播放音乐 <ThumbMediaId><![CDATA[media_id]]></ThumbMediaId> </Music> </xml> //==========================视频消息========================= //------------------------------------------------------------ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1357290913</CreateTime> <MsgType><![CDATA[video]]></MsgType> //视频为video <MediaId><![CDATA[media_id]]></MediaId> //视频消息媒体id,可以调用多媒体文件下载接口拉取数据。 <ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>//视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据 <MsgId>1234567890123456</MsgId> </xml> //------------------------回复视频消息----------------------- //------------------------------------------------------------ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[video]]></MsgType> <Video> <MediaId><![CDATA[media_id]]></MediaId> <Title><![CDATA[title]]></Title> <Description><![CDATA[description]]></Description> </Video> </xml> //=========================地理位置消息====================== //------------------------------------------------------------ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1351776360</CreateTime> <MsgType><![CDATA[location]]></MsgType> // MsgType location <Location_X>23.134521</Location_X> // Location_X 地理位置维度 <Location_Y>113.358803</Location_Y> // Location_Y 地理位置经度 <Scale>20</Scale> // Scale 地图缩放大小 <Label><![CDATA[ 位置信息]]></Label> // Label 地理位置信息 <MsgId>1234567890123456</MsgId> </xml> //===========================链接消息======================== //------------------------------------------------------------ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1351776360</CreateTime> <MsgType><![CDATA[link]]></MsgType> //消息类型,link <Title><![CDATA[ 链接]]></Title> //消息标题 <Description><![CDATA[ 这是链接]]></Description> //消息描述 <Url><![CDATA[url]]></Url> //消息链接 <MsgId>1234567890123456</MsgId> </xml> //=======================回复图文消息======================== //------------------------------------------------------------ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>2</ArticleCount> //图文消息个数,限制为10条以内 <Articles> <item>//多条图文消息信息,默认第一个item为大图,注意,如果图文数超过10,则将会无响应 <Title><![CDATA[title1]]></Title> //图文消息标题 <Description><![CDATA[description1]]></Description>//图文消息描述 <PicUrl><![CDATA[picurl]]></PicUrl> //图片链接,支持JPG、PNG格式,较好的效果为大图360*200,小图200*200 <Url><![CDATA[url]]></Url> //点击图文消息跳转链接 </item> <item> <Title><![CDATA[title]]></Title> <Description><![CDATA[description]]></Description> <PicUrl><![CDATA[picurl]]></PicUrl> <Url><![CDATA[url]]></Url> </item> </Articles> </xml> //============================================================ //------------------------------------------------------------