微信开发(一)

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


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


第一步:开启开发者模式


首先我们需要去注册一个微信公众号。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 wechatCallbackapiTest();    
  3.     
  4. $wechatObj -> responseMsg();    
  5.     
  6. class wechatCallbackapiTest    
  7. {    
  8.        public function responseMsg()    
  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 = 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 = "<xml>    
  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. }   


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值