微信可以说是目前最火爆的社交工具之一了。微信的公众号、服务号、企业号的推出也大大的方便了用户,也催生了一批微信开发者,今天开始,我们就来一起开始学习微信开发吧!
第一节我们先来用微信完成一个简单的消息收发功能。
第一步:开启开发者模式
首先我们需要去注册一个微信公众号。https://mp.weixin.qq.com
进入公众号后,在左侧的导航栏找到 开发 -> 基本配置 。
启用服务器配置,URL填写自己的域名,Token默认填写weixin即可。
注意:开启开发者模式后,自动回复和自定义菜单功能 就不能使用了,但是我们通过接口实现这些功能。
第二步:验证消息的确来自微信服务器
当我们提交服务器配置时,微信服务器将发送GET请求到填写的服务器地址URL上,里面包含了验证的参数。我们可以在填写的URL中填写一下代码进行服务器验证:
1. <?php
2. $echoStr = $_GET["echostr"];
3.
4. $signature = $_GET["signature"];
5.
6. $timestamp = $_GET["timestamp"];
7.
8. $nonce = $_GET["nonce"];
9.
10.
11. $token = 'weixin'; //服务器配置中填写的token
12.
13. $tmpArr = array($token, $timestamp, $nonce);
14.
15. sort($tmpArr, SORT_STRING);
16.
17. $tmpStr = implode( $tmpArr
18.
19. $tmpStr = sha1( $tmpStr
20.
21.
22. if( $tmpStr == $signature
23.
24. echo $echoStr;
25.
26. }
验证成功后就可以开启微信开发之旅了。
第三步:简单的获取当前时间以及获取当前地理位置。
1. <?php
2. $wechatObj = new
3.
4. $wechatObj
5.
6. class
7. {
8. public function
9. {
10. //接收用户的消息
11. $postStr = file_get_contents("php://input");
12. //判断是否接收到有效消息
13. if (!empty($postStr))
14. {
15. //解析用户的xml
16. libxml_disable_entity_loader(true);
17. $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
18. //消息发送者
19. $fromUsername = $postObj->FromUserName;
20. //消息接收人
21. $toUsername = $postObj->ToUserName;
22. //消息内容
23. $keyword = trim($postObj->Content);
24. //消息的类型
25. $msgType=$postObj->MsgType;
26. //当前时时间戳
27. $time
28. //如果用户发送的类型是地址位置
29. if($msgType=="location")
30. {
31. $msgType = "text";
32. $contentStr="您的所在位置的经度为".$postObj->Location_Y.",纬度为:".$postObj->Location_X."地点是:".$postObj->Label;
33. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
34. echo $resultStr;
35. }
36. //如果用户发送的是语音
37. if($msgType=='voice')
38. {
39. $msgType = "text";
40. //将语音转为文字
41. $contentStr=$postObj->Recognition;
42. $this->sendNews($contentStr,$fromUsername,$toUsername,$time);
43. }
44. if(!empty($keyword))
45. {
46. $this->sendNews($keyword,$fromUsername,$toUsername,$time);
47. }
48. }
49. else
50. {
51. echo "";
52. exit;
53. }
54. }
55.
56. function sendNews($keyword,$fromUsername,$toUsername,$time)
57. {
58. //文本消息模板
59. $textTpl
60. <ToUserName><![CDATA[%s]]></ToUserName>
61. <FromUserName><![CDATA[%s]]></FromUserName>
62. <CreateTime>%s</CreateTime>
63. <MsgType><![CDATA[%s]]></MsgType>
64. <Content><![CDATA[%s]]></Content>
65. <FuncFlag>0</FuncFlag>
66. </xml>";
67. if($keyword == "时间")
68. {
69. $msgType = "text";
70. $contentStr= "当前的时间为".date("Y年m月d日 H时i分s秒",time());
71. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
72. echo $resultStr;
73. }
74. else
75. {
76. $msgType = "text";
77. $contentStr= $keyword;
78. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
79. echo $resultStr;
80. }
81. }
82. }
以上的代码实现了当用户发送地理位置是,回复用户当前的经纬度以及所在地信息;当用户发送语音时,将用户的语音转为文字并调用回复消息的函数;当用户发送的是文本时,调用回复消息函数;当用户发送文字 时间 或者语音发送 时间 时,会回复当前时间。