PHP微信开发快速入门

学习笔记 马富天 2016-05-05 09:45:46 78 3

【摘要】PHP微信平台个人订阅号快速开发,实现查询功能(查询数据库中的信息)。

1.首先注册微信公众号,因为我们都是个人测试和学习使用,所以选择个人订阅号就够了。注册完成之后,登录微信公众平台,在左侧列表中找到“开发”目录下的“基本配置”,点击进入,如图1所示:

请输入图片名称

图1

如果没有开启成微信开发者,则点击开启,然后在服务器配置中点击“修改配置”,填入自己的URL,Token和EncodingAESKey(这一项是随机生成的),消息加密解密选择“明文模式”即可(也可以按需选择)。点击保存,再点击启用。如下图2所示,我的配置:

请输入图片名称

注意:微信工作平台分为3类:

订阅号:分为个人与其他(含私营商家),个人订阅号不能申请认证。

服务号:商家比较多(微店等)。

企业号:用于管理企业内部人员信息,以及内部人员的通信。

微信开发到底开发什么?我总结了一下几点:

(1)学校方面,期末成绩查询,四六级查询等等。

(2)商家,用于传播信息(推送),信息方式有音乐,图片,视频,图文格式等。

(3)可自定义菜单,扫一扫,摇一摇等功能。

(4)再者微信红包,微信支付等。

本文档介绍微信开发最简单的查询功能,比如查询个人信息和常用消息类型。

2.PHP实现查询个人信息

效果图如下:先扫一扫下面的二维码(图3),并关注这个微信公众,然后输入“马富天”,则会查询到“马富天”的个人信息,如图4所示。

请输入图片名称请输入图片名称

在刚刚设置的url中放入下面代码:

  1. header('Content-type:text');
  2. define("TOKEN", "weixin");
  3. $wechatObj = new \Org\Util\Webchat;		
  4. if (isset($_GET['echostr'])) {
  5.     $wechatObj->valid();
  6. }else{			
  7.     $wechatObj->responseMsg();
  8. }
  9. class Webchat
  10. {
  11.     public function valid()
  12.     {
  13.         $echoStr = $_GET["echostr"];
  14.         if($this->checkSignature()){
  15.             header('content-type:text');
  16.             echo $echoStr;
  17.             exit;
  18.         }
  19.     }
  20.     private function checkSignature()
  21.     {
  22.         $signature = $_GET["signature"];
  23.         $timestamp = $_GET["timestamp"];
  24.         $nonce = $_GET["nonce"];
  25.         $token = TOKEN;
  26.         $tmpArr = array($token, $timestamp, $nonce);
  27.         sort($tmpArr, SORT_STRING);
  28.         $tmpStr = implode( $tmpArr );
  29.         $tmpStr = sha1( $tmpStr );
  30.         if( $tmpStr == $signature ){
  31.             return true;
  32.         }else{
  33.             return false;
  34.         }
  35.     }
  36.     public function responseMsg()
  37.     {
  38.         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
  39.         if (!empty($postStr)){
  40.             $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  41.             $fromUsername = $postObj->FromUserName;
  42.             $toUsername = $postObj->ToUserName;
  43.             $keyword = trim($postObj->Content);
  44.             $time = time();                                               
  45.             $textTpl = "<xml>
  46.                         <ToUserName><![CDATA[%s]]></ToUserName>
  47.                         <FromUserName><![CDATA[%s]]></FromUserName>
  48.                         <CreateTime>%s</CreateTime>
  49.                         <MsgType><![CDATA[%s]]></MsgType>
  50.                         <Content><![CDATA[%s]]></Content>
  51.                         <FuncFlag>0</FuncFlag>
  52.                         </xml>";
  53.             $msgType = "text";
  54.             $contentStr = '';
  55.             switch($postObj->MsgType){
  56.                 //	文本信息
  57.                 case "text":
  58.                 		switch ($postObj->Content) {
  59.                 			case '友情链接':
  60.     					            $flink = M("flink");
  61.             						$flink_r = $flink -> select();
  62.             						foreach ($flink_r as $k => $v) {
  63.             							$contentStr .= "<a href = '".$v['flink_url']."'>".$v['flink_name']."</a>\n";
  64.             						}            						
  65.                 				break;
  66.                 			case '最新文章':
  67.     					            $article = M("article");
  68.             						$article_r = $article -> order('id desc') -> find();
  69.             						$contentStr .= "<a href = 'http://www.mafutian.net/".$article_r['id'].".html'>《".$article_r['title']."》</a>\n".$article_r['addtime'];		
  70.                 				break;
  71.                 			case '博客主页':
  72.             						$contentStr = "<a href = 'http://www.mafutian.net/'>马富天博客www.mafutian.net</a>";
  73.                 				break;
  74.                 			case '说说':
  75.     					            $shuoshuo = M("Shuoshuo");
  76.             						$shuoshuo_r = $shuoshuo -> order('id desc') -> find();
  77.             						foreach ($shuoshuo_r as $k => $v) {	
  78.             							$contentStr = "<a href = 'http://www.mafutian.net/shuoshuo/d/id/".$shuoshuo_r['id'].".html'>{$shuoshuo_r['content']}</a>\n".$shuoshuo_r['addtime'];
  79.             						}
  80.                 				break;                				
  81.                 			case '提示':
  82. 						            $contentStr = "感谢您订阅了我的博客!提示信息:\n1.输入'最新文章':查看最新发布的文章\n2.输入'友情链接':查看友情链接\n3.输入'博客主页':进入博客主页\n4.输入'提示':返回提示信息\n5.输入某个人的名字:查询他/她的信息哦~\n6.输入'说说':最近写的说说";
  83.                 				break;	                				
  84.                 			default:
  85.                 					$content = $postObj->Content;
  86.                 					$contacts = M("contacts");
  87.                 					$contacts_r = $contacts -> where(" name = '".$content."' ") -> find();
  88.                 					if(!$contacts_r){
  89.                 						$contentStr = $content.",尚未存入数据库,请稍后。";
  90.                 					}
  91.                 					if($contacts_r['sex'] == '男'){
  92.                 						$ta = "他";
  93.                 					}else{
  94.                 						$ta = "她";
  95.                 					}
  96.                 					$contentStr = $content."\n性别:".$contacts_r['sex']."\n生日:".$contacts_r['birthday']."\nQQ:".$contacts_r['qq']."\n微信:".$contacts_r['weixin']."\n爱好:".$contacts_r['hobby']."\n手机号码:".$contacts_r['phone']."\n学校:".$contacts_r['school']."\n大家都说".$ta."是:".$contacts_r['beizhu'];
  97.                 				break;
  98.                 		}
  99.             			
  100.                 	break;
  101.                 //	图片信息
  102.                 case "image":
  103.                 		$contentStr = "您发送的是图片吧";
  104.                 	break;
  105.                 //	语音
  106.                 case "voice":
  107.                 		$contentStr = "你叨叨什么,说普通话";
  108.                 	break;
  109.                 //	视频
  110.                 case "video":
  111.                 		$contentStr = "您发了一个小视频,好看";
  112.                 	break;
  113.                 //	位置
  114.                 case "location":
  115.                 		$contentStr = $postObj->Label;
  116.                 	break;
  117.                 //	链接
  118.                 case "link":
  119.                 		$contentStr = $postObj->Url;
  120.                 	break;
  121.                 //	事件消息
  122.                 case "event":
  123.                 	switch($postObj->Event){
  124.                         case "subscribe":
  125. 				            $contentStr = "感谢您订阅了我的博客!提示信息:\n1.输入'最新文章':查看最新发布的文章\n2.输入'友情链接':查看友情链接\n3.输入'博客主页':进入博客主页\n4.输入'提示':返回提示信息\n5.输入某个人的名字:查询他/她的信息哦~";
  126.                         	break;
  127.                         case "unsubscribe":
  128.                         		$contentStr = "你咋不关注了哦";
  129.                         	break;
  130.                         case "click":
  131.                         		$contentStr = "你点什么点".$postObj->EventKey;
  132.                         	break;                        
  133.                 	}
  134.                 	break;
  135.             }            		
  136. 			$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  137. 			echo $resultStr;
  138.         }else{
  139.             echo "";
  140.             exit;
  141.         }
  142.     }
  143. }

在上面代码中,Webchat类是用来处理消息接收和发送的。简单介绍一下上面出现的一段代码:

  1. textTpl = "<xml>
  2.                         <ToUserName><![CDATA[%s]]></ToUserName>
  3.                         <FromUserName><![CDATA[%s]]></FromUserName>
  4.                         <CreateTime>%s</CreateTime>
  5.                         <MsgType><![CDATA[%s]]></MsgType>
  6.                         <Content><![CDATA[%s]]></Content>
  7.                         <FuncFlag>0</FuncFlag>
  8.                         </xml>";

这是消息的XML格式代码,ToUserName是指消息接收者,FromUserName是指消息发送者,CreateTime指发送时间,MsgType指消息类型,主要有6种(文本信息、图片、语音、视频、位置、链接),Content指发送的内容,FuncFlag是指星标字段(表示重要等级)。上面的一个格式是textTpl是指文本格式的消息格式,接下来介绍这6种消息的XML格式。

3.常用消息类型接收和发送XML格式

(1)接收消息(指用户给微信平台发送信息):6种

A.文本消息

ToUserName 消息接收方微信号,一般为公众平台账号微信号

FromUserName 消息发送方微信号

CreateTime 消息创建时间

MsgType 消息类型;文本消息为text

Content 消息内容

MsgId 消息ID号

B.图片消息

ToUserName 消息接收方微信号,一般为公众平台账号微信号

FromUserName 消息发送方微信号

CreateTime 消息创建时间

MsgType 消息类型;图片消息为image

PicUrl 图片链接地址,可以用HTTP GET获取

MsgId 消息ID号

C.语音

ToUserName 消息接收方微信号,一般为公众平台账号微信号

FromUserName 消息发送方微信号

CreateTime 消息创建时间

MsgType 消息类型;语音消息为voice

MediaId 媒体ID

Format 语音格式,这里为amr

MsgId 消息ID号

D.视频

ToUserName 消息接收方微信号,一般为公众平台账号微信号

FromUserName 消息发送方微信号

CreateTime 消息创建时间

MsgType 消息类型;视频消息为video

MediaId 媒体ID

ThumbMediaId 媒体缩略ID

MsgId 消息ID号

E.位置

ToUserName 消息接收方微信号,一般为公众平台账号微信号

FromUserName 消息发送方微信号

CreateTime 消息创建时间

MsgType 消息类型,地理位置为location

Location_X 地理位置纬度

Location_Y 地理位置经度

Scale 地图缩放大小

Label 地理位置信息

MsgId 消息ID号

F.链接

ToUserName 消息接收方微信号,一般为公众平台账号微信号

FromUserName 消息发送方微信号

CreateTime 消息创建时间

MsgType 消息类型,链接为link

Title 图文消息标题

Description 图文消息描述

Url 点击图文消息跳转链接

MsgId 消息ID号

(2)发送消息(指微信平台给用户发送信息):3种

A文本格式

FromUserName 消息发送方

ToUserName 消息接收方

CreateTime 消息创建时间

MsgType 消息类型,文本消息必须填写text

Content 消息内容,大小限制在2048字节,字段为空为不合法请求

FuncFlag 星标字段

B图文回复

FromUserName 消息发送方

ToUserName 消息接收方

CreateTime 消息创建时间

MsgType 消息类型,图文消息必须填写news

Content 消息内容,图文消息可填空

ArticleCount 图文消息个数,限制为10条以内

Articles 多条图文消息信息,默认第一个item为大图

Title 图文消息标题

Description 图文消息描述

PicUrl 图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80

Url 点击图文消息跳转链接

FuncFlag 星标字段

C音乐消息

ToUserName 接收方帐号(收到的OpenID)

FromUserName 开发者微信号

CreateTime 消息创建时间

MsgType 消息类型,此处为music

Title 音乐标题

Description 音乐描述

MusicUrl 音乐链接

HQMusicUrl 高质量音乐链接,WIFI环境优先使用该链接播放音乐

FuncFlag 位0x0001被标志时,星标刚收到的消息。

举例音乐消息:

  1. <xml>
  2.     <ToUserName><![CDATA[ollB4jqgdO_cRnVXk_wRnSywgtQ8]]></ToUserName>
  3.     <FromUserName><![CDATA[gh_b629c48b653e]]></FromUserName>
  4.     <CreateTime>1372310544</CreateTime>
  5.     <MsgType><![CDATA[music]]></MsgType>
  6.     <Music>
  7.         <Title><![CDATA[最炫民族风]]></Title>
  8.         <Description><![CDATA[凤凰传奇]]></Description>
  9.      <MusicUrl><![CDATA[http://zj189.cn/zj/download/music/zxmzf.mp3]]></MusicUrl>
  10.       <HQMusicUrl><![CDATA[http://zj189.cn/zj/download/music/zxmzf.mp3]]></HQMusicUrl>
  11.     </Music>
  12. <FuncFlag>0</FuncFlag>
  13. </xml>

4.事件消息类型

事件消息包括:关注事件、取消关注事件和菜单点击事件

(1)关注事件XML

1372307736

(2)取消关注事件XML

1372309890

(3)菜单点击事件XML

1377886191

ToUserName 接收方微信号

FromUserName 发送方微信号,若为普通用户,则是一个OpenID

CreateTime 消息创建时间

MsgType 消息类型,event

Event 事件类型,subscribe(订阅)、unsubscribe(取消订阅)、CLICK(自定义菜单点击事件)

EventKey 事件KEY值,与自定义菜单接口中KEY值对应

版权归 马富天PHP博客 所有

本文标题:《PHP微信开发快速入门》

本文链接地址:http://www.mafutian.net/87.html

转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^

2

0

上一篇《 MySQL如何按月按年按天查询统计数据? 》 下一篇《 网页中播放音乐的3种方法(不同浏览器不一定能播放) 》
分享到:

所有评论

  1. 首页
  2. 上一页
  3. 1
  4. 下一页
  5. 尾页
  6. 第1页
  7. 每页12条
  8. 共1页
  9. 共3条
评论审核未开启
表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情
验证码