微信可以说是目前最火爆的社交工具之一了。微信的公众号、服务号、企业号的推出也大大的方便了用户,也催生了一批微信开发者,今天开始,我们就来一起开始学习微信开发吧!
第一节我们先来用微信完成一个简单的消息收发功能。
第一步:开启开发者模式
首先我们需要去注册一个微信公众号。https://mp.weixin.qq.com
进入公众号后,在左侧的导航栏找到 开发 -> 基本配置 。
启用服务器配置,URL填写自己的域名,Token默认填写weixin即可。
注意:开启开发者模式后,自动回复和自定义菜单功能 就不能使用了,但是我们通过接口实现这些功能。
第二步:验证消息的确来自微信服务器
当我们提交服务器配置时,微信服务器将发送GET请求到填写的服务器地址URL上,里面包含了验证的参数。我们可以在填写的URL中填写一下代码进行服务器验证:- <?php
- $echoStr = $_GET["echostr"];
- $signature = $_GET["signature"];
- $timestamp = $_GET["timestamp"];
- $nonce = $_GET["nonce"];
- $token = 'weixin'; //服务器配置中填写的token
- $tmpArr = array($token, $timestamp, $nonce);
- sort($tmpArr, SORT_STRING);
- $tmpStr = implode( $tmpArr );
- $tmpStr = sha1( $tmpStr );
- if( $tmpStr == $signature ){
- echo $echoStr;
- }
验证成功后就可以开启微信开发之旅了。
第三步:简单的获取当前时间以及获取当前地理位置。
- <?php
- $wechatObj = new wechatCallbackapiTest();
- $wechatObj -> responseMsg();
- class wechatCallbackapiTest
- {
- public function responseMsg()
- {
- //接收用户的消息
- $postStr = file_get_contents("php://input");
- //判断是否接收到有效消息
- if (!empty($postStr))
- {
- //解析用户的xml
- libxml_disable_entity_loader(true);
- $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
- //消息发送者
- $fromUsername = $postObj->FromUserName;
- //消息接收人
- $toUsername = $postObj->ToUserName;
- //消息内容
- $keyword = trim($postObj->Content);
- //消息的类型
- $msgType=$postObj->MsgType;
- //当前时时间戳
- $time = time();
- //如果用户发送的类型是地址位置
- if($msgType=="location")
- {
- $msgType = "text";
- $contentStr="您的所在位置的经度为".$postObj->Location_Y.",纬度为:".$postObj->Location_X."地点是:".$postObj->Label;
- $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
- echo $resultStr;
- }
- //如果用户发送的是语音
- if($msgType=='voice')
- {
- $msgType = "text";
- //将语音转为文字
- $contentStr=$postObj->Recognition;
- $this->sendNews($contentStr,$fromUsername,$toUsername,$time);
- }
- if(!empty($keyword))
- {
- $this->sendNews($keyword,$fromUsername,$toUsername,$time);
- }
- }
- else
- {
- echo "";
- exit;
- }
- }
- function sendNews($keyword,$fromUsername,$toUsername,$time)
- {
- //文本消息模板
- $textTpl = "<xml>
- <ToUserName><![CDATA[%s]]></ToUserName>
- <FromUserName><![CDATA[%s]]></FromUserName>
- <CreateTime>%s</CreateTime>
- <MsgType><![CDATA[%s]]></MsgType>
- <Content><![CDATA[%s]]></Content>
- <FuncFlag>0</FuncFlag>
- </xml>";
- if($keyword == "时间")
- {
- $msgType = "text";
- $contentStr= "当前的时间为".date("Y年m月d日 H时i分s秒",time());
- $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
- echo $resultStr;
- }
- else
- {
- $msgType = "text";
- $contentStr= $keyword;
- $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
- echo $resultStr;
- }
- }
- }
以上的代码实现了当用户发送地理位置是,回复用户当前的经纬度以及所在地信息;当用户发送语音时,将用户的语音转为文字并调用回复消息的函数;当用户发送的是文本时,调用回复消息函数;当用户发送文字 时间 或者语音发送 时间 时,会回复当前时间。