微信可以说是目前最火爆的社交工具之一了。微信的公众号、服务号、企业号的推出也大大的方便了用户,也催生了一批微信开发者,今天开始,我们就来一起开始学习微信开发吧!


第一节我们先来用微信完成一个简单的消息收发功能。


第一步:开启开发者模式



首先我们需要去注册一个微信公众号。https://mp.weixin.qq.com

进入公众号后,在左侧的导航栏找到   开发 -> 基本配置 。

c 微信开发包 官方微信开发_php

c 微信开发包 官方微信开发_php_02

启用服务器配置,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. }

 


以上的代码实现了当用户发送地理位置是,回复用户当前的经纬度以及所在地信息;当用户发送语音时,将用户的语音转为文字并调用回复消息的函数;当用户发送的是文本时,调用回复消息函数;当用户发送文字 时间 或者语音发送 时间 时,会回复当前时间。