微信可以说是目前最火爆的社交工具之一了。微信的公众号、服务号、企业号的推出也大大的方便了用户,也催生了一批微信开发者,今天开始,我们就来一起开始学习微信开发吧!
第一节我们先来用微信完成一个简单的消息收发功能。
第一步:开启开发者模式
首先我们需要去注册一个微信公众号。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;
}
}
}
以上的代码实现了当用户发送地理位置是,回复用户当前的经纬度以及所在地信息;当用户发送语音时,将用户的语音转为文字并调用回复消息的函数;当用户发送的是文本时,调用回复消息函数;当用户发送文字 时间 或者语音发送 时间 时,会回复当前时间。
关于微信的消息类型以及各个参数可以参考:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453&token=&lang=zh_CN