当前位置: 首页 > news >正文

微信公众号推送

根 据业务需要,开发一个微信公众号的相关开发,根据相关开发和整理总结了一下相关的流程和需要,进行一些整理和总结分享给大家,最近都在加班和忙碌,博客已 经很久未更新了,打气精神,再接再厉,申请、认证公众号的一系列流程就不在这里赘述了,主要进行的是技术的分享,要达到的效果如下图:

999999.png

开发接入
首先说明我这里用的是PHP开发语言来进行的接入,设置一个url让微信公众号的服务回调这个url,在绑定之前需要一个token的验证,设置不对会提示token不正确的提示

官方提供的测试Url工具:developers.weixin.qq.com/apiExplorer…

private function checkSignature()
{
s i g n a t u r e = i s s e t ( signature = isset( signature=isset(_GET[“signature”]) ? $_GET[“signature”] : ‘’;
t i m e s t a m p = i s s e t ( timestamp = isset( timestamp=isset(_GET[“timestamp”]) ? $_GET[“timestamp”] : ‘’;
n o n c e = i s s e t ( nonce = isset( nonce=isset(_GET[“nonce”]) ? $_GET[“nonce”] : ‘’;
e c h o s t r = i s s e t ( echostr = isset( echostr=isset(_GET[“echostr”]) ? $_GET[“echostr”] : ‘’;
$token = ‘klsg2024’;
t m p A r r = a r r a y ( tmpArr = array( tmpArr=array(token, $timestamp, n o n c e ) ; s o r t ( nonce); sort( nonce);sort(tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return $echostr;
}else{
return false;
}
}
在设置的地方调用: 微信公众号的 $echostr 和 自定义的匹配上说明调用成功了

public function console(){
//关注公众号推送
$posts = t h i s − > p o s t s ; i f ( ! i s s e t ( this->posts; if(!isset( this>posts;if(!isset(_GET[‘openid’])){
$res = t h i s − > c h e c k S i g n a t u r e ( ) ; i f ( this->checkSignature(); if( this>checkSignature();if(res){
echo $res;
return true;
}else{
return false;
}
}
}
设置access_token
公众号的开发的所有操作的前提都是先设置access_token,在于验证操作的合法性,所需要的token在公众号后台的目录中获取:公众号-设置与开发-基本设置 设置和查看:

#POST https://api.weixin.qq.com/cgi-bin/token
{
“grant_type”: “client_credential”,
“appid”: “开发者ID(AppID)”,
“secret”: “开发者密码(AppSecret)”
}
返回的access_token,过期时间2个小时,Http url 返回结构如下:

{
“access_token”: “82_W8kdIcY2TDBJk6b1VAGEmA_X_DLQnCIi5oSZBxVQrn27VWL7kmUCJFVr8tjO0S6TKuHlqM6z23nzwf18W1gix3RHCw6uXKAXlD-pZEO7JcAV6Xgk3orZW0i2MFMNGQbAEARKU”,
“expires_in”: 7200
}
为了方便起见,公众号平台还开放了一个稳定版的access_token,参数略微有不同。

POST https://api.weixin.qq.com/cgi-bin/stable_token
{
“grant_type”: “client_credential”,
“appid”: “开发者ID(AppID)”,
“secret”: “开发者密码(AppSecret)”,
“force_refresh”:true
}
自定义菜单
第一个疑惑是公众号里的底部菜单 是怎么搞出来的,在官方文档中获取到的,如果公众号后台没有设置可以根据自定义菜单来进行设置。

1、创建菜单,参数自己去官方文档上查阅

POST https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
2、查询菜单接口,文档和调试工具给的有点不一样,我使用的是调试工具给出的url

GET https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN
3、删除菜单

GET https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN
事件拦截
在公众号的开发后台里会设置一个Url,每次在操作公众号时都会回调接口,用事件去调用和处理,操作公众号后,微信公众平台会请求到设置的接口上,公众号的openid 比较重要,是用来识别用户身份的唯一标识,openid即当前用户。

{
“signature”: “d43a23e838e2b580ca41babc78d5fe78b2993dea”,
“timestamp”: “1721273358”,
“nonce”: “1149757628”,
“openid”: “odhkK64I1uXqoUQjt7QYx4O0yUvs”
}
用户进行相关操作时,回调接口会收到这样一份请求,都是用MsgType和Event去区分,下面是关注的回调:

{
“ToUserName”: “gh_d98fc9c8e089”,
“FromUserName”: “用户openID”,
“CreateTime”: “1721357413”,
“MsgType”: “event”,
“Event”: “subscribe”,
“EventKey”: []
}
下面是点击菜单跳转的回调:

{
“ToUserName”: “gh_d98fc9c8e089”,
“FromUserName”: “用户openID”,
“CreateTime”: “1721381657”,
“MsgType”: “event”,
“Event”: “VIEW”,
“EventKey”: “https://zhjy.rchang.cn/api/project_audit/getOpenid?type=1”,
“MenuId”: “421351906”
}
消息推送
消息能力是公众号中最核心的能力,我们这次主要分享2个,被动回复用户消息和模板推送能力。

被动回复用户消息
被动回复用户消息,把需要的参数拼接成xml格式的,我觉得主要是出于安全上的考虑作为出发点。

<![CDATA[toUser]]> <![CDATA[fromUser]]> 12345678 <![CDATA[text]]> <![CDATA[你好]]> 在php代码里的实现即为:

protected function subscribe($params)
{
$time = time();
$content = “欢迎的文字”;
s e n d m s g = ′ < x m l > < T o U s e r N a m e > < ! [ C D A T A [ ′ . send_msg = '<xml> <ToUserName><![CDATA['. sendmsg=<xml><ToUserName><![CDATA[.params[‘FromUserName’].‘]]>
<![CDATA['.$params['ToUserName'].']]>
’.time().‘
<![CDATA[text]]>
<![CDATA['.$content.']]>
’;

echo $send_msg;
return false;

}
模板推送能力
模版推送的两个关键是申请了模版,还有就是模版的data需要和模版中的一致,才能成功发送,模版设置和申请的后台位置在 广告与服务-模版消息

public function project_message()
{
$touser = ‘发送人公众号openid’;
$template_id = ‘模版ID’;
$url = ‘https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=’ . $this->access_token;
$details_url = ‘点开链接,需要跳转的详情url’;
$thing1 = ‘模版里定义的参数’;
$time2 = ‘模版里定义的参数’;
$const3 = ‘模版里定义的参数’;
$send_data = [
‘touser’ => $touser,
‘template_id’ => $template_id,
‘url’ => $details_url,
‘data’ => [
‘thing1’ => [‘value’ => $thing1],
‘time2’ => [‘value’ => $time2],
‘const3’ => [‘value’ => $const3],
]
];

$result = curl_json($url, $send_data);

}
错误及解决方式
1、公众号后台: 设置与开发-安全中心-IP白名单 把IP地址加入白名单即可。

{
“errcode”: 40164,
“errmsg”: “invalid ip 47.63.30.93 ipv6 ::ffff:47.63.30.93, not in whitelist rid: 6698ef60-27d10c40-100819f9”
}
2、模版参数不正确时,接口返回

{
“errcode”: 47003,
“errmsg”: “argument invalid! data.time5.value invalid rid: 669df26e-538a8a1a-15ab8ba4”
}
3、access_token不正确

{
“errcode”: 40001,
“errmsg”: “invalid credential, access_token is invalid or not latest, could get access_token by getStableAccessToken, more details at https://mmbizurl.cn/s/JtxxFh33r rid: 669df2f1-74be87a6-05e77d20”
}
4、access_token超过调用次数

{
“errcode”: 45009,
“errmsg”: “reach max api daily quota limit, could get access_token by getStableAccessToken, more details at https://mmbizurl.cn/s/JtxxFh33r rid: 669e5c4c-2bb4e05f-61d6917c”
}


http://www.mrgr.cn/news/65883.html

相关文章:

  • 编写第一个 Appium 测试脚本:从安装到运行!
  • 红黑树的平衡之舞:数据结构中的优雅艺术
  • Vue:模板 MVVM
  • 信息安全工程师(74)网络安全风险评估技术方法与工具
  • [neo4j报错]py2neo.errors.ClientError: [Request.Invalid] Not Found解决方案
  • Vue2指令原理手写
  • 领略CSS Flex布局的精髓:打造响应式与创新设计
  • Redis数据库测试和缓存穿透、雪崩、击穿
  • 轻量级游戏服务器框架:skynet的原理讲解
  • Hadoop简介及单点伪分布式安装
  • C++:模拟实现STL的vector
  • 【含文档】基于ssm+jsp的宠物猫狗商业系统 (含源码+数据库+lw)
  • HashMap 源码分析
  • git上传大文件的解决方案
  • 文件系统上云的挑战
  • 详解:枚举类
  • 关于Linux系统调试和性能优化技巧有哪些?
  • 计算机启动过程中各个步骤
  • 全面解析:物联网技术及其应用
  • ACTF新生赛2020:NTFS数据流
  • C++——用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个团数,整数和n在主函数中输人,最后在主函数中输出。
  • 十四届蓝桥杯STEMA考试Python真题试卷第二套第四题
  • 一文了解Android SELinux
  • Golang | Leetcode Golang题解之第538题把二叉搜索树转换为累加树
  • Python | Leetcode Python题解之第538题把二叉搜索树转换为累加树
  • DDD学习笔记