微信公众号开发--接入
程序员文章站
2022-04-19 15:44:02
微信公众号开发 微信开发者工具:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 需要绑定开发者账号:微信公众平台--开发者工具--web开发者工具--绑定开发者微信号 微信公众平台接口调试工具:https ......
微信公众号开发
微信开发者工具:
需要绑定开发者账号:微信公众平台--开发者工具--web开发者工具--绑定开发者微信号
微信公众平台接口调试工具:
接口调试需要使用“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.主动推送消息
需认证,调用客服消息接口
具体参考:
现在只是模糊向的开发操作,如果有错误,请联系我。
在完成这些操作时,参考了一些其他博文,但当时没有好习惯,用完就找不到了,如果有知道线索的请联系我。
上一篇: 上楼时在转角处遇到女同事下楼
下一篇: vue常见深入面试题