微信开发入门

问题描述:在做微信公众号开发的时候,第一次看见微信开发文档 简直就是一脸懵逼啊!都什么跟什么啊,请看下面详解:

1.微信开发需要启用开启开发者模式(不懂的自行百度)

2.填写服务器地址,token

3.服务器配置:

  1 <?php
  2
  3 class Test{
  4     private $token = ‘4512c35162db71cb7ecee5bc5cd65978‘;
  5     private $weixin_token = null;
  6     /**
  7      * @desc 验证微信接入
  8      * @author wzh
  9      * @qq646943067
 10      */
 11     private function valid(){
 12         $echoStr = $_GET["echostr"];
 13         if($this->checkSignature()){
 14             echo $echoStr;
 15             exit;
 16         }
 17     }
 18     /**
 19      * @desc 验证签名
 20      * @author wzh
 21      */
 22     private function checkSignature(){
 23         if (! $this -> token) {
 24             throw new Exception(‘TOKEN is not defined!‘);
 25         }
 26
 27         $signature = $_GET["signature"];
 28         $timestamp = $_GET["timestamp"];
 29         $nonce = $_GET["nonce"];
 30         $token = $this -> token;
 31
 32         $tmpArr = array($token, $timestamp, $nonce);
 33         // use SORT_STRING rule
 34         sort($tmpArr, SORT_STRING);
 35         $tmpStr = implode( $tmpArr );
 36         $tmpStr = sha1( $tmpStr );
 37
 38         if( $tmpStr == $signature ){
 39             return true;
 40         }else{
 41             return false;
 42         }
 43     }
 44
 45     /**
 46      * 处理xml数据
 47      *
 48      */
 49     private function transmitText($object, $content, $flag = 0)
 50     {
 51         $textTpl = "<xml>
 52         <ToUserName><![CDATA[%s]]></ToUserName>
 53         <FromUserName><![CDATA[%s]]></FromUserName>
 54         <CreateTime>%s</CreateTime>
 55         <MsgType><![CDATA[text]]></MsgType>
 56         <Content><![CDATA[%s]]></Content>
 57         <FuncFlag>%d</FuncFlag>
 58         </xml>";
 59         $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
 60         return $resultStr;
 61     }
 62
 63     //回复图文消息
 64     private function transmitNews($object, $newsArray)
 65     {
 66         if(!is_array($newsArray)){
 67             return;
 68         }
 69         $itemTpl = "<item>
 70         <Title><![CDATA[%s]]></Title>
 71         <Description><![CDATA[%s]]></Description>
 72         <PicUrl><![CDATA[%s]]></PicUrl>
 73         <Url><![CDATA[%s]]></Url>
 74         </item>";
 75         $item_str = "";
 76         foreach ($newsArray as $item){
 77             $item_str .= sprintf($itemTpl, $item[‘Title‘], $item[‘Description‘], $item[‘PicUrl‘], $item[‘Url‘]);
 78         }
 79         $xmlTpl = "<xml>
 80         <ToUserName><![CDATA[%s]]></ToUserName>
 81         <FromUserName><![CDATA[%s]]></FromUserName>
 82         <CreateTime>%s</CreateTime>
 83         <MsgType><![CDATA[news]]></MsgType>
 84         <ArticleCount>%s</ArticleCount>
 85         <Articles>
 86         $item_str</Articles>
 87         </xml>";
 88
 89         $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray));
 90         return $result;
 91     }
 92
 93
 94     //post请求
 95     public function http_request($url, $data){
 96         $curl = curl_init();
 97         curl_setopt($curl, CURLOPT_URL, $url);
 98         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
 99         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
100         if(!empty($data)){
101             curl_setopt($curl, CURLOPT_POST, 1);
102             curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
103
104         }
105         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
106         $output = curl_exec($curl);
107         curl_close($curl);
108         return $output;
109     }
110
111
112     /**
113       * @desc 微信接入
114       * @author wzh
115       * @qq 646943067
116       */
117     public function weixin(){
118         $this -> valid(); //如果已经验证通过 则把该行注释
119         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
120         $this -> responseMsg($postStr);
121     }
122
123     /**
124      * 接收推送消息
125      *
126      */
127     public function responseMsg($postStr){
128         if (!empty($postStr)){
129             $postObj = simplexml_load_string($postStr, ‘SimpleXMLElement‘, LIBXML_NOCDATA);
130             $RX_TYPE = trim($postObj->MsgType);
131             switch ($RX_TYPE)
132             {
133                 case "text":
134                     $resultStr = $this->receiveText($postObj);    /*文本消息*/
135                     break;
136                 case "image":
137                     $resultStr = $this->receiveImage($postObj);    /*图片消息*/
138                     break;
139                 case "location":
140                     $resultStr = $this->receiveLocation($postObj);/*地理位置消息*/
141                     break;
142                 case "voice":
143                     $resultStr = $this->receiveVoice($postObj);/*音频消息*/
144                     break;
145                 case "video":
146                     $resultStr = $this->receiveVideo($postObj);/*视频消息*/
147                     break;
148                 case "link":
149                     $resultStr = $this->receiveLink($postObj);/*连接消息*/
150                     break;
151                 case "event":
152                     $resultStr = $this->receiveEvent($postObj);/*事件消息*/
153                     break;
154                 default:
155                     $resultStr = "unknow msg type: ".$RX_TYPE;/*未知类型消息*/
156                     break;
157             }
158             echo $resultStr;
159         }else {
160             echo "";
161             exit;
162         }
163     }
164
165
166     /**
167      * 文本消息
168      */
169     private function receiveText($object){
170         /*用户输入的内容*/
171         $funcFlag = 0;
172         $content = $contentStr = $object->Content ;
173         /* 在这里书写 你的项目逻辑 */
174         $str = ‘‘;
175         if($content == ‘联系方式‘){
176             $str = ‘646943067‘;
177         }
178         /* 通过逻辑后 得到的字符串 后处理成xml格式 发送给微信*/
179         $resultStr = $this->transmitText($object, $contentStr, $funcFlag);
180         return $resultStr;
181     }
182     /**
183      * 图片消息
184      *
185      */
186     private function receiveImage($object,$media_id){
187         $textTpl = "
188                     <xml>
189                     <ToUserName><![CDATA[%s]]></ToUserName>
190                     <FromUserName><![CDATA[%s]]></FromUserName>
191                     <CreateTime>%s</CreateTime>
192                     <MsgType><![CDATA[image]]></MsgType>
193                     <Image>
194                     <MediaId><![CDATA[%s]]></MediaId>
195                     </Image>
196                     </xml>";
197         $time = time();
198         $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, $time, $media_id);
199
200         return $resultStr;
201     }
202
203     /**
204      * 地理位置
205      *
206      */
207     private function receiveLocation($object){
208         $funcFlag = 0;
209         $contentStr = "你发送的是位置,纬度为:".$object->Location_X.";经度为:".$object->Location_Y.";缩放级别为:".$object->Scale.";位置为:".$object->Label;
210         $resultStr = $this->transmitText($object, $contentStr, $funcFlag);
211         return $resultStr;
212     }
213
214     /**
215      * 语音消息
216      *
217      */
218     private function receiveVoice($object){
219         $funcFlag = 0;
220         $contentStr = "你发送的是语音,媒体ID为:".$object->MediaId;
221         $resultStr = $this->transmitText($object, $contentStr, $funcFlag);
222         return $resultStr;
223     }
224     /**
225      * 视频消息
226      *
227      */
228     private function receiveVideo($object){
229         $funcFlag = 0;
230         $contentStr = "你发送的是视频,媒体ID为:".$object->MediaId;
231         $resultStr = $this->transmitText($object, $contentStr, $funcFlag);
232         return $resultStr;
233     }
234     /**
235      * 连接地址
236      *
237      */
238     private function receiveLink($object){
239         $funcFlag = 0;
240         $contentStr = "你发送的是链接,标题为:".$object->Title.";内容为:".$object->Description.";链接地址为:".$object->Url;
241         $resultStr = $this->transmitText($object, $contentStr, $funcFlag);
242         return $resultStr;
243     }
244     /**
245      * 事件消息
246      *@modify by yangyanzhao
247      *@2016-03-19
248      */
249     private function receiveEvent($object)
250     {
251         $contentStr = "";
252
253         switch ($object->Event)
254         {
255             case "subscribe":
256
257                 $id = (!empty($object->EventKey))?(str_replace("qrscene_","",$object->EventKey)):"";
258                 $wxuid = $this -> addwxUser($id,$object -> FromUserName);
259                 //file_put_contents(‘/alidata1/www/yatibang/abc.txt‘, var_export($object->EventKey,true),FILE_APPEND);
260                 $id = (int) $id;
261                 $wx_name = DB::result_first("select wx_name from app_wx_user where wxuid = $id ");
262                 if($wx_name){
263                     $contentStr = "嗨,伙伴~您通过【".$wx_name."】来到php深入浅出公众微信";
264                 }else{
265                     $contentStr = "嗨,伙伴~终于把你等来了,我们一起学习吧";
266                 }
267                 $this->pushMessage($wxuid);
268
269                 break;
270             case "unsubscribe":
271                 $contentStr = "取消关注";
272                 break;
273             case "SCAN":
274                 //已关注的用户扫码
275                 break;
276             case "CLICK":
277                 switch ($object->EventKey)
278                 {
279                     case "tel":
280                         $contentStr = "12345678911";
281                         break;
282                     case "resolve":
283                         $content = array();
284                         $content[] = array(
285                                 "Title"=>"web前端入门",
286                                 "Description"=>"",
287                                 "PicUrl"=>$this -> local . "/images/weixin/moreimage/1.png",
288                                 "Url" =>"http://www.baidu.com/",
289                             );
290                         $content[] = array(
291                                 "Title"=>"php入门基础知识",
292                                 "Description"=>"",
293                                 "PicUrl"=>$this -> local . "/images/weixin/moreimage/2.png",
294                                 "Url" =>"http://php.net"
295                             );
296                         $content[] = array(
297                                 "Title"=>"框架学习",
298                                 "Description"=>"",
299                                 "PicUrl"=>$this -> local . "/images/weixin/moreimage/3.png",
300                                 "Url" =>"thinkphp.cn"
301                             );
302                         if (isset($content[0][‘PicUrl‘])){
303                             $result = $this->transmitNews($object, $content);
304                             return $result;
305                         }
306                         break;
307
308                     default:
309                         $contentStr = "你点击了: ".$object->EventKey;
310                         break;
311                 }
312                 break;
313             default:
314                 $contentStr = "receive a new event: ".$object->Event;
315                 break;
316         }
317         $resultStr = $this->transmitText($object, $contentStr);
318
319         return $resultStr;
320     }
321
322 }

4.总结:以上代码逻辑转载 互联网,结合自身逻辑 书写代码

时间: 2024-08-09 00:15:49

微信开发入门的相关文章

微信开发学习总结(二)——微信开发入门

上一篇<微信开发学习总结(一)——微信开发环境搭建>我们已经完成了微信开发的准备工作,准备工作完成之后,就要开始步入正题了. 一.微信公众平台的基本原理 在开始做之前,先简单介绍了微信公众平台的基本原理. 微信服务器就相当于一个转发服务器,终端(手机.Pad等)发起请求至微信服务器,微信服务器然后将请求转发给我们的应用服务器.应用服务器处理完毕后,将响应数据回发给微信服务器,微信服务器再将具体响应信息回复到微信App终端. 通信协议为:HTTP 数据传输格式为:XML 具体的流程如下图所示:

python 微信开发入门篇-调用JS SDK 含微信支付(二)

本章节完成微信js sdk + 微信支付调用,项目基础部分请参照入门篇第一章:https://www.cnblogs.com/wangcongxing/p/11546780.html 1.微信服务号设置    登录服务号后台设置如下: 1.登录地址:https://mp.weixin.qq.com/ 2.设置-->公众号设置-->功能设置 设置后结果如下 2.微信商户后台设置 登录微信支付平台设置如下: 1.登录地址(因为需要安装exe插件, 设置浏览为兼容模式  建议使用QQ浏览器):htt

微信开发入门教程

转自:http://www.cnblogs.com/txw1958/p/wechat-tutorial.html 本系列教程将引导你完成如下任务: 创建新浪云计算平台应用 启用微信公众平台开发模式 了解数据收发原理及消息格式 开发实现微信天气预报功能 创建新浪云计算应用 申请账号 我们使用SAE新浪云计算平台作为服务器资源,并且申请PHP环境+MySQL数据库作为程序运行环境. 申请地址:http://sae.sina.com.cn/,使用新浪微博账号可以直接登录SAE,登录后SAE将赠送500

微信开发入门指南

以下为PHP接入微信平台开发 几个小例子,已经做了备注就不过多解释 public function getAllOpenid(){ //获取token,请替换下边的编号和密匙,公众号后台有,每次token的请求都会改变,这里token是身份验证的根据 $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=编号&secret=密匙"; //根据微信提供接口获取 $c

[050] 微信公众平台开发入门视频教程已发布

2014年4月26日晚8点,我在CSDN社区在线培训课堂讲解了微信公众平台开发入门的相关知识,受到广大网友的一致好评,在此非常感谢大家的支持!课程结束后,很多网友表示由于报名人数限制.临时有事等原因,未能参加,希望能够提供录制视频的观看地址.视频教程的主要内容包括: 1.移动APP发展趋势(Native APP.Web APP.Light APP) 2.微信公众平台基础知识(服务号/订阅号.公众账号注册的注意事项.微信认证) 3.开发模式的使用(启用开发模式.接收与响应消息.回复文本/图文/音乐

微信公众平台开发入门教程

在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/JS等基础. 我们将使用微信公众账号方倍工作室作为讲解的例子,二维码见底部. 本系列教程将引导你完成如下任务: 创建新浪云计算平台应用 启用微信公众平台开发模式 基础接口消息及事件 微信公众平台PHP SDK 微信公众平台开发模式原理 开发天气预报功能 第一章 申请服务器资源 创建新浪云计算应用 申请账号 我们使用SAE新浪云计算平台作为服务器资源,并且申请PHP环境+M

微信公众平台开发入门教程(PHP从入门到精通)

微信,我的入门之路 主要针对大学生,像我一样曾经迷惘的人 务必看第三章个人体会,会很有用 这一个月的学习经验分享 最后第三章我学习php的入门经验 本人是一个大三的学生,眼看明年就要毕业了.要学点什么?就接触了微信公众号.下面是我开学到现在一个月的学习成果,也是我的入门的经验了吧.(以前我是学习硬件的,这一个月也是摸索到现在.下面是我的入门之路,及遇到问题,我解决问题的经验和技巧吧,希望能帮到那些像我一样的人,也希望和那些人一起成长.)开始吧: 在这篇微信公众平台开发教程中,我们假定你已经有了P

微名汇-微信公众平台开发入门教程

在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/JS等基础. 本系列教程将引导你完成如下任务: 创建新浪云计算平台应用 启用微信公众平台开发模式 基础接口消息及事件 微信公众平台PHP SDK 微信公众平台开发模式原理 开发天气预报功能 第一章 申请服务器资源 创建新浪云计算应用 申请账号 我们使用SAE新浪云计算平台作为服务器资源,并且申请PHP环境+MySQL数据库作为程序运行环境.申请地址:http://sae.

JAVA微信公众号开发入门

好久没进博客,最近应某人的要求,要每周写一篇博客,故此今天就把我这周刚学的微信公众号开发的知识在此总结总结,以供后人查阅.我写博客都是简要白话文,勿喷. 1.为什么要学微信公众号开发 微信的用户量庞大,微信公众号的完善和不断的开放力度,企业市场对公众号开发的需求不断增加 2.如何搭建微信开发平台 开发工具什么的就不说了,因为微信是要外网访问的,所有你必须有个网上的服务器资源,而且你必须申请一个微信公众号. 2.1申请微信公众号 公众号有3种:订阅号,服务号,企业号 区别是企业号适合内部人使用,因