微信公众号发布提醒(微信公众号模板消息接口) |
您所在的位置:网站首页 › 石黑一雄的小说 › 微信公众号发布提醒(微信公众号模板消息接口) |
大家好,又见面了,我是你们的朋友全栈君。 本文主要内容: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 因为涉及到微信授权登录功能,所以测试工具必须使用 微信开发者工具,而普通浏览器无法实现该功能。 微信开发者工具的使用和调试方法,与普通浏览器一致。 ![]() 1、任意域名一枚,需要开启SSL(即https访问); 2、微信服务号一个,必须通过认证; 3、具有外网IP的服务器一台。 如果仅仅是学习技术,满足前两项即可。如果项目需要上线,上述三者必不可少。 对于第2条,没有服务号,也可以在微信开放平台 中创建网站应用。不过微信开放平台同样需要企业认证。 在上述环境均满足的情况下,接下来需要对微信服务号进行一些配置。主要有: 1、获取公众号开发信息:公众号的开发信息主要是 开发者ID(AppID) 和 开发者密码(AppSecret)。 某些接口必须使用开发者ID和开发者密码才能进行调用请求。 获取路径是:微信公众号后台 → 开发 → 基本配置。 2、设置IP白名单只有IP白名单中的IP地址才可以调用 获取access_token接口,其中access_token是进行其他操作,如发送消息模板等的必备参数。 ![]() ![]() 配置域名的页面访问路径是:公众号后台 → 设置 → 公众号设置 → 功能设置。 需要配置的域名主要有三个: ① 业务域名 设置业务域名后,在微信内访问该域名下页面时,不会被重新排版。用户在该域名上进行输入时,不出现安全提示。比如在微信内打开网页,输入表单的时候,不会出现“请勿输入QQ密码”等安全提示。 ② JS接口安全域名 设置JS接口安全域名后,公众号开发者可在该域名下调用微信开放的JS接口。比如前文中的access_token的获取,需要使用此域名。 ③ 网页授权域名 用户在网页授权页同意授权给公众号后,微信会将授权数据传给一个回调页面,回调页面需在此域名下,以确保安全可靠。 ![]() 只有已添加的开发者,才可以使用web开发者工具进行对应公众号的开发和调试。 添加开发者页面的访问路径是:微信公众号后台 → 开发 → 开发者工具 → web开发者工具。 ![]() 5、添加模板 在添加功能插件模块中,添加模板消息功能 ![]() 然后在模板库中,搜索合适的模板,进行添加: ![]() 其中模板ID是开发用到的参数。 4. 官方参考文档解读关于微信公众号的开发技术,及其实现路线,在官网中均有介绍。 官方文档:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html 打开官方开发文档,第一单元标题为开发前必读,开发者规范和全局返回码说明章节还是有必要读一读的。 开发时,不能违反微信的相关规范,否则容易被封号,然后全局返回码可以帮助快速定位问题所在。 ![]() 打开官方开发文档,第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 否 模板内容字体颜色,不填默认为黑色 ![]() 请求成功后,返回的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 |