微信公众号开发--接入
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.主动推送消息
需认证,调用客服消息接口
现在只是模糊向的开发操作,如果有错误,请联系我。
在完成这些操作时,参考了一些其他博文,但当时没有好习惯,用完就找不到了,如果有知道线索的请联系我。
以上是关于微信公众号开发--接入的主要内容,如果未能解决你的问题,请参考以下文章