微信公众号发布提醒(微信公众号模板消息接口)

您所在的位置:网站首页 石黑一雄的小说 微信公众号发布提醒(微信公众号模板消息接口)

微信公众号发布提醒(微信公众号模板消息接口)

2024-04-11 20:56| 来源: 网络整理| 查看: 265

大家好,又见面了,我是你们的朋友全栈君。

本文主要内容:1. 项目简介功能描述:特点对比2. 项目截图3. 开发准备3.1 开发工具3.2 环境支持1、获取公众号开发信息:2、设置IP白名单3、配置域名4、添加开发者4. 官方参考文档解读4.1 网页授权登录解读1. 获取code2. 换取access_token3. 获取用户信息4.2 模板消息推送解读1. 获取基础access_token2. 发送消息模板5. 网页授权登录实现(PHP为例)5.1 工具类GetWX5.2 获取code5.3 换取access_token5.4 获取用户信息5.5 另一种完整的示例6. 模板消息推送实现(PHP为例)6.1 官方JSSDK文档(PHP)6.2 模板消息JSON化6.3 发送模板消息7. 后记与源码1. 项目简介

灵感来源于学校的 每日健康日报,要求使用微信小程序进行每日健康打卡。所以此项目的功能类似于 QQ群机器人,或者是 每日闹钟。

功能描述:

用户访问给定的页面,进行 授权登录 ,然后确认自己的身份(本科生或研究生),并 开启通知 ,即可每天在约定时间收到微信服务号的消息提醒。当然,用户可以自定义每日通知的时间,也可以随时开启或关闭每日通知。

特点对比和QQ群机器人、闹钟相比,该功能的实现,方便用户一键直达小程序。但是该方法需关注服务号,同时开发门槛较高。2. 项目截图图:项目演示截图图:项目演示截图

左图:用户订阅的页面,中图:用户修改通知时间的页面,右图:用户收到的消息提醒

3. 开发准备3.1 开发工具

1、编码工具:用于项目开发。如果使用 Java 实现,可使用 IntelliJ IDEA,如果使用 PHP 开发,可使用 JetBrains PhpStorm;

2、运行工具:用于本地测试。如果是PHP开发,可选择phpstudy_pro作为PHP项目的运行部署环境;

3、测试工具:只能使用 微信开发者工具 ,开发模式选择 公众号网页调试 。

微信开发者工具下载地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

因为涉及到微信授权登录功能,所以测试工具必须使用 微信开发者工具,而普通浏览器无法实现该功能。

微信开发者工具的使用和调试方法,与普通浏览器一致。

图:微信开发者工具截图图:微信开发者工具截图3.2 环境支持

1、任意域名一枚,需要开启SSL(即https访问);

2、微信服务号一个,必须通过认证;

3、具有外网IP的服务器一台。

如果仅仅是学习技术,满足前两项即可。如果项目需要上线,上述三者必不可少。 对于第2条,没有服务号,也可以在微信开放平台 中创建网站应用。不过微信开放平台同样需要企业认证。

在上述环境均满足的情况下,接下来需要对微信服务号进行一些配置。主要有:

1、获取公众号开发信息:

公众号的开发信息主要是 开发者ID(AppID) 和 开发者密码(AppSecret)。

某些接口必须使用开发者ID和开发者密码才能进行调用请求。

获取路径是:微信公众号后台 → 开发 → 基本配置。

2、设置IP白名单

只有IP白名单中的IP地址才可以调用 获取access_token接口,其中access_token是进行其他操作,如发送消息模板等的必备参数。

图:获取开发信息与设置IP图:获取开发信息与设置IP图:查看与修改IP白名单图:查看与修改IP白名单3、配置域名

配置域名的页面访问路径是:公众号后台 → 设置 → 公众号设置 → 功能设置。

需要配置的域名主要有三个:

① 业务域名

设置业务域名后,在微信内访问该域名下页面时,不会被重新排版。用户在该域名上进行输入时,不出现安全提示。比如在微信内打开网页,输入表单的时候,不会出现“请勿输入QQ密码”等安全提示。

② JS接口安全域名

设置JS接口安全域名后,公众号开发者可在该域名下调用微信开放的JS接口。比如前文中的access_token的获取,需要使用此域名。

③ 网页授权域名

用户在网页授权页同意授权给公众号后,微信会将授权数据传给一个回调页面,回调页面需在此域名下,以确保安全可靠。

图:域名配置页面图:域名配置页面4、添加开发者

只有已添加的开发者,才可以使用web开发者工具进行对应公众号的开发和调试。

添加开发者页面的访问路径是:微信公众号后台 → 开发 → 开发者工具 → web开发者工具。

图:添加web开发者图:添加web开发者

5、添加模板

在添加功能插件模块中,添加模板消息功能

图:开启模板消息图:开启模板消息

然后在模板库中,搜索合适的模板,进行添加:

图:添加模板消息图:添加模板消息

其中模板ID是开发用到的参数。

4. 官方参考文档解读

关于微信公众号的开发技术,及其实现路线,在官网中均有介绍。

官方文档:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

打开官方开发文档,第一单元标题为开发前必读,开发者规范和全局返回码说明章节还是有必要读一读的。

开发时,不能违反微信的相关规范,否则容易被封号,然后全局返回码可以帮助快速定位问题所在。

图:开发者文档图:开发者文档4.1 网页授权登录解读

打开官方开发文档,第5章微信网页开发中,第2节即为网页授权的参考文档。

直达链接:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

该章节的目录之前,有一段关于网页授权的一些说明。

第一点关于网页授权回调域名的说明,即前文中关于域名的配置。 第二点关于网页授权的两种scope的区别说明,主要说明的是两种授权模式,一种是静默登录授权形式,这种形式只能获取到用户的OpenID,另一种是获取用户基本信息的形式,这种形式会弹窗,需要用户手动点击登录。两种实现方式,主要是修改登录链接中的scope参数的值。后文详述。 第三点关于网页授权access_token和普通access_token的区别,可参考文档。其实主要说明的是网页授权access_token的安全性更高,必须通过code来获取access_token,而且不同code获取的access_token不同,每一个access_token有效期2小时(7200秒),每个access_token在这2小时内,只对同一个用户有效。而普通access_token(即基础支持中的“获取access_token”接口获取到的)可以直接获取,不同场景可重复使用,有效期也为2小时,过时需要刷新。

具体而言,网页授权流程分为四步:

1、引导用户进入授权页面同意授权,获取code

2、通过code换取网页授权access_token(与基础支持中的access_token不同)

3、如果需要,开发者可以刷新网页授权access_token,避免过期

4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

1. 获取code

首先需要使用户访问如下链接,才能进行登录:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

该链接中,大写字母标识的字段,需要进行替换(下同)。

上述链接中的各个参数详细说明如下:

参数

是否必须

说明

appid

公众号的唯一标识

redirect_uri

授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理

response_type

返回类型,只能填写code

scope

应用授权作用域,只能为snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid)或snsapi_userinfo(弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )

state

重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节

#wechat_redirect

无论直接打开还是做页面302重定向时候,必须带此参数

用户确定登录后,即可在授权后重定向的回调链接地址中获取到code,格式如下:

redirect_uri/?code=CODE&state=STATE

这里的CODE是接下来换取access_token的必须参数,而STATE是开发者自定义的其他信息。

2. 换取access_token

上面获取到了code,接下来需要使用这个code来换取access_token。

请求链接如下(GET方式):

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

上述链接中的各个参数详细说明如下:

参数

是否必须

说明

appid

公众号的唯一标识、开发者ID

secret

公众号的appsecret、开发者密码

code

填写第一步获取的code参数

grant_type

只能为:authorization_code

请求成功后,返回的JSON数据包格式如下:

{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }

关于该JSON数据包的各个字段说明如下:

参数

说明

access_token

网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同

expires_in

access_token接口调用凭证超时时间,单位(秒)

refresh_token

用户刷新access_token,有效期30天。当access_token超时后,可以使用refresh_token进行刷新。

openid

用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID

scope

用户授权的作用域,使用逗号(,)分隔

下面是可选操作,一般用不到:

使用refresh_token获取access_token的链接如下(GET方式):

https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

上述链接中的各个参数详细说明如下:

参数

是否必须

说明

appid

公众号的唯一标识

grant_type

填写为refresh_token

refresh_token

填写通过access_token获取到的refresh_token参数

正确返回的JSON格式和上面的一致。

一些说明: 执行到这里,我们已经拿到了用户的OpenID。如果仅仅做用户唯一性校验,至此结束即可。同样,对于发送模板消息,也只需要用户的OpenID。

3. 获取用户信息

如果网页授权作用域为 snsapi_userinfo ,则此时开发者可以通过 access_token 和 openid 拉取用户信息了。

请求链接如下(GET方式、需使用https协议):

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

上述链接的参数说明如下:

参数

描述

access_token

网页授权接口调用凭证,即前面步骤获取到的access_token。

openid

用户的唯一标识

lang

返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语

请求成功后返回的JSON数据包格式如下:

{ "openid":" OPENID", "nickname": NICKNAME, "sex":"1", "province":"PROVINCE", "city":"CITY", "country":"COUNTRY", "headimgurl": "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46", "privilege":[ "PRIVILEGE1" "PRIVILEGE2" ], "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" }

上述JSON数据包的参数详细说明如下:

参数

描述

openid

用户的唯一标识

nickname

用户昵称

sex

用户的性别,值为1时是男性,值为2时是女性,值为0时是未知

province

用户个人资料填写的省份

city

普通用户个人资料填写的城市

country

国家,如中国为CN

headimgurl

用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。

privilege

用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)

unionid

只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。

附:检验授权凭证(access_token)是否有效

请求链接(GET方法、需使用https协议):

https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID

上述链接的参数说明如下:

参数

描述

access_token

网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同

openid

用户的唯一标识

正确的JSON数据包返回结果如下:

{ "errcode":0,"errmsg":"ok"}

错误时的JSON返回示例:

{ "errcode":40003,"errmsg":"invalid openid"}

使用该方法可以检测access_token是否过期,以保证项目的高可用性。

4.2 模板消息推送解读

打开官方开发文档,第4章 消息管理 中,第7节即为 模板消息接口 的参考文档。

直达链接:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html

在官方文档中,该模块很大篇幅所叙述的内容,是针对第三方微信服务商,所以有一些是个人开发者用不到的。

总结模板消息推送的实际过程,主要流程如下:

1. 获取基础access_token

请求链接如下(GET方式):

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

该链接中的参数详细说明如下:

参数

是否必须

说明

grant_type

获取access_token填写client_credential

appid

第三方用户唯一凭证

secret

第三方用户唯一凭证密钥,即appsecret

请求成功返回的JSON数据包格式如下:

{ "access_token":"ACCESS_TOKEN","expires_in":7200}

JSON数据包参数说明:

参数

说明

access_token

获取到的凭证

expires_in

凭证有效时间,单位:秒

2. 发送消息模板

请求链接如下(POST方式):

https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

该链接中只需要 access_token 一个参数,即第一步获取到的 access_token。

POST数据包格式为JSON格式,示例如下:

{ "touser":"OPENID", "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY", "url":"http://weixin.qq.com/download", "miniprogram":{ "appid":"xiaochengxuappid12345", "pagepath":"pages/index?foo=bar" }, "data":{ "first": { "value":"恭喜你购买成功!", "color":"#173177" }, "keyword1":{ "value":"巧克力", "color":"#173177" }, "keyword2": { "value":"39.8元", "color":"#173177" }, "keyword3": { "value":"2014年9月22日", "color":"#173177" }, "remark":{ "value":"欢迎再次购买!", "color":"#173177" } } }

该JSON数据包中的各个参数详细说明如下:

参数

是否必填

说明

touser

接收者openid

template_id

模板ID,前文配置中添加模板消息后获得的一串字符

url

模板跳转链接(海外帐号没有跳转能力)

miniprogram

跳小程序所需数据,不需跳小程序可不用传该数据。当链接和小程序都存在时,优先跳转小程序。

appid

所需跳转到的小程序appid(该小程序appid必须与发模板消息的公众号是绑定关联关系,暂不支持小游戏)

pagepath

所需跳转到小程序的具体页面路径,支持带参数,(示例pages/index?foo=bar),要求该小程序已发布,暂不支持小游戏

data

模板数据。这里的数据个数,需要与消息模板中的参数对应,如下图所示。

color

模板内容字体颜色,不填默认为黑色

data字段个数示例data字段个数示例

请求成功后,返回的JSON数据包格式如下所示:

{ "errcode":0, "errmsg":"ok", "msgid":200228332 }

这时,用户手机微信将收到对应的提醒。

行文至此,讲述的主要是授权登录和发送模板消息的大致实现流程。

下文,将结合实际的项目,对上述功能的实现流程,以项目源码的形式,进行更加详细的演示。

5. 网页授权登录实现(PHP为例)5.1 工具类GetWX

该工具类的主要功能是根据微信授权登录的实现流程,进行链接请求和数据获取。

关于该工具类的具体实现方法不唯一。后文中有第二种完整的示例。

5.2 获取code

登录回调页面(login.php)的源码如下:

登录页login.php:

6. 模板消息推送实现(PHP为例)6.1 官方JSSDK文档(PHP)

该SDK实现了各种参数的获取,源码如下:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3