微信公众号开发--接入

Posted ZeroC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信公众号开发--接入相关的知识,希望对你有一定的参考价值。

微信公众号开发
  需要绑定开发者账号:微信公众平台--开发者工具--web开发者工具--绑定开发者微信号
  微信公众平台接口调试工具:https://mp.weixin.qq.com/debug/
  接口调试需要使用“access_token”,access_token的获取需要从在基本设置中的url访问获取,其他终端基本无法获取
 
1.公众号类型
  (1)订阅号:主要偏于为用户传达资讯(类似报纸杂志),认证前后都是每天只可以群发一条消息;
  (2)服务号:主要偏于服务交互(类似银行,114,提供服务查询),认证前后都是每个月 可群发4条消息;
  (3)企业号:主要用于公司内部通讯使用,需要先验证身份才可以关注成功企业号。
 
2.微信公众号开发类型:
·设置模式:无需认证,无代码需求,完全依据微信官方管理平台,小白操作,功能有限
·浅交互模式:无需认证,需对接自己的服务器,可在服务器上部署自定义的消息规则,可实现以下接口的自定义交互
 
·深度交互模式:微信认证,获取更高级权限
3.微信公众号接入
(1)微信公众平台--开发--基本配置
 
APPID:公众号唯一标识,连接服务的基本账号,例如:“wx123456”
appsecret:标识密码,例如:“abcdefg”
url:填写自己服务器目录下接收微信消息的文件,例如:http://服务器域名/../wechatMsgAction.php
token:任意字符串,例如“token”
EncodingAESKey:随机生成密钥,例如:“aaaaaaaaaaaaaaaaaaa”
(2)接入操作
·民间接入方式
编辑wechatMsgAction.php文件
 
 1 <?php
 2 define("APPID","wx123456");//填写自己的APPID
 3 define("APPSECRET","abcdefg");//填写自己的APPSECRET
 4 define("TOKEN", "token");//token随便填,只要一致就行。
 5 $wechat = new wechat();
 6 $wechat->valid();//微信公众号安全验证
 7   
 8 class wechat{
 9     private $_appid;
10     private $_appsecret;
11     private $_token;
12     public function __construct(){
13         $this->_appid =APPID;
14         $this->_appsecret =APPSECRET;
15         $this->_token =TOKEN;
16     }
17     /**
18       *接入微信平台时验证
19     **/
20     public function valid()//检查安全性
21     {
22         $echoStr = $_GET["echostr"];
23   
24         //valid signature , option
25         if($this->checkSignature()){//检查签名是否一致
26             echo $echoStr;//验证成功后,输出
27             exit;
28         }
29     }
30     /**
31       *验证签名
32     **/
33     private function checkSignature()
34     {
35         $signature = $_GET["signature"];
36         $timestamp = $_GET["timestamp"];
37         $nonce = $_GET["nonce"];
38         $token = TOKEN;
39         $tmpArr = array($token, $timestamp, $nonce);
40         sort($tmpArr, SORT_STRING);
41         $tmpStr = implode( $tmpArr );
42         $tmpStr = sha1( $tmpStr );
43           
44         if( $tmpStr == $signature ){
45             return true;
46         }else{
47             return false;
48         }
49     }
50 }

 

官方接入方式:
官方接入demo:
PHP示例代码下载:下载
 
(3)接入
确认将wechatMsgAction.php文件放在服务器配置中url所写的对应位置(如http://服务器域名/../wechatMsgAction.php)后,点击“提交”,若提示成功,则配置成功,否则自行排错
 
(4)验证URL有效性成功后即接入生效,成为开发者。你可以在公众平台网站中申请微信认证,认证成功后,将获得更多接口权限,满足更多业务需求。
成为开发者后,用户每次向公众号发送消息、或者产生自定义菜单、或产生微信支付订单等情况时,开发者填写的服务器配置URL将得到微信服务器推送过来的消息和事件,开发者可以依据自身业务逻辑进行响应,如回复消息。
 
4.接收推送
 
微信服务器在发给己方服务器的xml中的参数“MsgType”负责告诉己方服务器,用户操作的类型。
MsgType
Event
信息类型
text
 
用户发送了文本消息
image
 
用户发送了图片消息
voice
 
用户发送了语音消息
video
 
用户发送了视频消息
shortvideo
 
用户发送了小视频消息
location
 
用户发送了地理位置消息
link
 
用户发送了连接消息
event
subscribe
用户关注了公众号
event
unsubscribe
用户取消关注了公众号
event
subscribe+ EventKey
用户通过扫描带参二维码关注了公众号
event
SCAN
已关注公众号的用户扫描了带参数二维码
event
LOCATION
用户进入公众号时上报地理位置
event
CLICK
用户点击菜单拉取消息
event
VIEW
用户点击菜单跳转链接
具体参考
在微信服务器推送的消息中的关键字段:
ToUserName
开发者微信号,是接收推送的开发者
FromUserName
发送方帐号(一个OpenID),用户相对于公众号的唯一标识
 
5.事件处理

直接修改wechatMsgAction.php,添加事件处理函数,并使微信公众号推送事件调用该函数。

 1 define("APPID","wx123456");//填写自己的APPID
 2 define("APPSECRET","abcdefg");//填写自己的APPSECRET
 3 define("TOKEN", "token");//token随便填,只要一致就行。
 4 $wechat = new wechat();
 5 $WeChatMessage->Action();//不同于第三步的调用,此处是处理事件的函数
 6 class WeChatMessage{
 7     public function Action(){
 8   /*获得请求时POST:XML字符串不能用$_POST获取,因为没有key*/
 9         $xml_str = $GLOBALS[\'HTTP_RAW_POST_DATA\'];
10         if(empty($xml_str)){
11             die(\'\');
12         }
13         if(!empty($xml_str)){
14             // 解析该xml字符串,利用simpleXML
15             libxml_disable_entity_loader(true);
16             //禁止xml实体解析,防止xml注入
17               $request_xml = simplexml_load_string($xml_str, \'SimpleXMLElement\', LIBXML_NOCDATA);
18             //判断该消息的类型,通过元素MsgType
19             switch ($request_xml->MsgType){
20                 case \'event\':
21                     //判断具体的时间类型(关注、取消、点击)
22                     $event = $request_xml->Event;
23                     $Ticket = $request_xml->Ticket;
24                       if ($event==\'subscribe\'&&$Ticket==\'\') { // 普通关注事件
25                           $this->_doSubscribe($request_xml);
26                       }
27                       if ($event==\'subscribe\'&&$Ticket!=\'\') {//扫描渠道二维码关注
28                           $this->_doQRSubscribe($request_xml);
29                       }
30                       if ($event==\'SCAN\'&&$Ticket!=\'\') {//已关注公众号扫描渠道二维码事件
31                           $this->_doSCAN($request_xml);
32                       }
33                       break;
34                 case \'text\'://文本消息
35                     $this->_doText($request_xml);
36                     break;
37                 case \'image\'://图片消息
38                     $this->_doImage($request_xml);
39                     break;
40                 case \'voice\'://语音消息
41                     $this->_doVoice($request_xml);
42                     break;
43                 case \'video\'://视频消息
44                     $this->_doVideo($request_xml);
45                     break;
46                 case \'shortvideo\'://短视频消息
47                     $this->_doShortvideo($request_xml);
48                     break;
49                 case \'location\'://位置消息
50                     $this->_doLocation($request_xml);
51                     break;
52                 case \'link\'://链接消息
53                     $this->_doLink($request_xml);
54                     break;
55               }        
56          }  
57     }
58 }

 

 
根据MsgType,判断事件类型进行处理(_do*()是对应的处理函数,自行编写),当然,也可以依据其他信息处理事件(此代码为网上摘来的,如果知道原著线索,请联系我)
 
 
 
5.常用概念
access_token:
·access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用 access_token。
·开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。
·access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效
· 公众号和小程序均可以使用AppID和AppSecret调用本接口来获取access_token。
· access_token只能通过在IP白名单中的服务器调用接口才能被获取到
OpenID:
·在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID
·它加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号,同一用户的openid不同。
·公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。
 
6.回复消息模板
己方服务器向用户回复(发送)消息时,遵循一定的xml格式
 
7.请求方式
根据接口请求需要,使用curl函数调用接口
get请求:
 1 //初始化
 2     $curl = curl_init();
 3     //设置抓取的url
 4     curl_setopt($curl, CURLOPT_URL, \'http://www.baidu.com\');
 5     //设置头文件的信息作为数据流输出
 6     curl_setopt($curl, CURLOPT_HEADER, 1);
 7     //设置获取的信息以文件流的形式返回,而不是直接输出。
 8     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 9     //执行命令
10     $data = curl_exec($curl);
11     //关闭URL请求
12     curl_close($curl);
13     //显示获得的数据
14     print_r($data);

 

post请求:
 
 1 //初始化
 2     $curl = curl_init();
 3     //设置抓取的url
 4     curl_setopt($curl, CURLOPT_URL, \'http://www.baidu.com\');
 5     //设置头文件的信息作为数据流输出
 6     curl_setopt($curl, CURLOPT_HEADER, 1);
 7     //设置获取的信息以文件流的形式返回,而不是直接输出。
 8     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 9     //设置post方式提交
10     curl_setopt($curl, CURLOPT_POST, 1);
11     //设置post数据
12     $post_data = array(
13         "username" => "coder",
14         "password" => "12345"
15         );
16     curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
17     //执行命令
18     $data = curl_exec($curl);
19     //关闭URL请求
20     curl_close($curl);
21     //显示获得的数据
22     print_r($data);
8.主动推送消息
需认证,调用客服消息接口
 
现在只是模糊向的开发操作,如果有错误,请联系我。
在完成这些操作时,参考了一些其他博文,但当时没有好习惯,用完就找不到了,如果有知道线索的请联系我。

以上是关于微信公众号开发--接入的主要内容,如果未能解决你的问题,请参考以下文章

使用localtunne一分钟搞定微信公众号接入

微信公众号开发--接入

微信公众号开发--开发服务器接入微信服务器

JavaWeb接入微信公众号

用.Net Core接入微信公众号开发

Flask+微信公众号开发(接入指南)