提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、验证码推送使用场景
  • 二、测试号中消息模板的搭建
    • 1.条件测试
    • 2.配置消息模板
  • 服务端环境搭建
  • 四、实现验证码推送至公众号

前言

根据此文可以实现简单的微信公众号验证码推送功能。


提示:以下是本篇文章正文内容,下面案例可供参考

一、验证码推送使用场景

传统的验证码可以防止恶意攻击、以及防止网络爬虫。但是无论验证码设计的有多复杂,也可以通过智能算法破解。也许有人会想到手机验证码,手机验证码的确可以解决上述问题,但是如果你的系统用户存在海外用户,此项功能就被限制,所以使用微信公众号推送验证码是个非常不错的选择。

二、测试号中消息模板的搭建

1.条件测试

想要实现验证码推送必须使用消息模板,但是订阅号想要使用消息模板必须要认证,所以这里选择了测试号,测试号申请过程如下:
a.进入自己的公众号页面拉到最下面

b.找到消息模板选项

2.配置消息模板

注:其中变量必须用{{}}包裹起来、变量名后必须加.DATA否则得不到值。例:{{code.DATA}}


至此微信公众平台基本已经搭建好了,以下信息是我们在服务端需要用到的。
a. appID wx5fc55e59461****
b. appsecret a8ae4637b095df
c. 模板id jerVx-
*******


服务端环境搭建

服务端我们使用weixin-java-mp框架,此框架封装了支付、认证等众多方法。

<dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-mp</artifactId><version>2.7.0</version>
</dependency>

1.在application.yml配置app-id和app-secret以认证此测试号,相对应的建立微信配置的相关的类。

wx:app-id: *******app-secret: ****
server:port: 80

1.1 微信账号配置类WxAccountConfig.class

@Component
@ConfigurationProperties("wx")
public class WxAccountConfig {// 公众号IDprivate String appId;// 公众号secretprivate String appSecret;public String getAppId() {return appId;}public void setAppId(String appId) {this.appId = appId;}public String getAppSecret() {return appSecret;}public void setAppSecret(String appSecret) {this.appSecret = appSecret;}}

1.2 微信配置类,此类作用将appid等设置到封装的WxMpService 和 WxMpConfigStorage中。

@Configuration
public class WxConfig {@Autowiredprivate WxAccountConfig wxAccountConfig;@Beanpublic WxMpService wxMpService() {WxMpService wxMpService = new WxMpServiceImpl();wxMpService.setWxMpConfigStorage(wxMpConfigStorage());return wxMpService;}@Beanpublic WxMpConfigStorage wxMpConfigStorage() {WxMpInMemoryConfigStorage wxMpConfigStorage = new WxMpInMemoryConfigStorage();// 在这里我们要设置appid 和 appsecret 需要在配置文件里面设置两个变量,这样全局都可以用// 然后设置一个WexAccountConfig类,来注入这两个参数,这样在使用的时候就可以直接调用这两个类wxMpConfigStorage.setAppId(wxAccountConfig.getAppId());wxMpConfigStorage.setSecret(wxAccountConfig.getAppSecret());wxMpConfigStorage.setAccessToken("wangyu");return wxMpConfigStorage;}}

2.新建推送消息的Service接口和实现,这里只贴出实现。

    private final Logger logger = LoggerFactory.getLogger(this.getClass());@Autowiredprivate WxMpService wxMpService;@Overridepublic void returnVerficationCode(String receiveId) {//模板消息封装的对象WxMpTemplateMessage wxMpTemplateMessage = new WxMpTemplateMessage();//消息模板IDwxMpTemplateMessage.setTemplateId(WxConfigConstant.VERFICATION_CODE_TEMPLATE_ID);wxMpTemplateMessage.setToUser(receiveId);wxMpTemplateMessage.setData(wrapperTemplateData());try {wxMpService.getTemplateMsgService().sendTemplateMsg(wxMpTemplateMessage);}catch (WxErrorException errorException){logger.error("推送出现错误!" );}}/***  得到验证码封装数据* @return*/private List<WxMpTemplateData> wrapperTemplateData(){//得到4为验证码String code = VerficationCodeUtils.getVerficationCode(4);List<WxMpTemplateData> wxMpTemplateData = new ArrayList<>();wxMpTemplateData.add(new WxMpTemplateData("code",code));wxMpTemplateData.add(new WxMpTemplateData("validity",WxConfigConstant.VERFICATION_CODE_VALIDITY_TIME));return wxMpTemplateData;}

注:如想设置字体颜色,则需使用此构造方法WxMpTemplateData(String name, String value, String color)

3.新建推送消息的Controller,userId为关注公众号的openId。

        @ResponseBody@RequestMapping(value = "/sendVertficationCode", produces = { "application/json;charset=utf-8" })public String sendVertficationCode(HttpServletRequest request, @RequestParam(required = true) String echostr,@RequestParam String userId) {//      userId = o3FqD1sJQdv0oQz_dEPvbgk3AFbE;pushMessageService.returnVerficationCode(userId);return echostr;}

贴上生成验证码的工具类


public class VerficationCodeUtils {private static final String SYMBOLS = "0123456789"; // 数字private static final Random RANDOM = new SecureRandom();/***  生成指定位数的数字验证码* @return*/public static String getVerficationCode(int length) {// 如果需要4位,那 new char[4] 即可,其他位数同理可得char[] nonceChars = new char[length];for (int index = 0; index < nonceChars.length; ++index) {nonceChars[index] = SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length()));}return new String(nonceChars);}

四、实现验证码推送至公众号

我们再次打开我们测试号页面,如使用的本机搭建的环境,可以使用内网穿透工具,我这里使用的是natapp,里面有教程,非常方便。URL填写刚才Controller中可以访问的地址记得加上userId,Token要和wxMpConfigStorage.setAccessToken()一致,点击提交,现在你的公众号就收到验证码了。

本文来源网络, 只是记录学习用,如有侵权,可联系删除

微信公众号之验证码推送(spring-boot+测试号)相关推荐

  1. 如何在微信公众号的文章推送中展示bilibili的视频

    0x00  需求背景: 我们学院举办了一个短视频设计大赛,需要在官方公众号里进行线上投票,选出大家最喜欢的视频. 然而微信公众号的文章推送中,限制了每篇文章只能上传三部视频,而我们需要把三十部作品都放 ...

  2. 通过python实现企业微信公众号链接+图文推送

    背景:通过python实现企业微信公众号链接+图文推送 目的:实现点击即看到内容,用更符合用户查看公众号消息的习惯推送消息 步骤: 1.创建企业微信公众号(应用) 2.确定推送内容(BI报表链接)+标 ...

  3. 观察者模式--微信公众号文章的推送

    ​观察者模式 学习容易,坚持不易,如果你坚持看完,会发现设计模式如此简单~ 目录 引子 认识观察者模式 我们先来看看微信公众号和用户之间的关注是怎么回事? 发布者+订阅者=观察者模式 观察者模式的原理 ...

  4. Java对接微信公众号模板消息推送(架包WxJava)

    内容有点多,请耐心! 最近公司的有这个业务需求,又很凑巧让我来完成: 首先想要对接,先要一个公众号,再就是开发文档了:https://developers.weixin.qq.com/doc/offi ...

  5. 微信公众号每日早安推送,给女朋友的浪漫礼物

    做一个程序员给女朋友的浪漫礼物吧. 最终效果 GitHub地址: https://github.com/ynwynw/weixinPush-public 所用知识点 springboot实现java后 ...

  6. 接收微信公众号的事件推送并且回复消息

    微信公众号回调我们配置的服务器url 配置公众号回调地址 新建配置URL的接口 XML转java Bean工具类 演示 配置公众号回调地址 URL配置微信会验证此地址,直接返回微信的echostr参数 ...

  7. 该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定,Java微信公众号开发消息推送公众号用户绑定问题 的解决办法

    问题概述 在进行微信公众号开发的时候遇到的这个问题,通过Web开发公众号的模板消息推送,在调试的过程中,需要进行开发者接口联调&调试,在调试之前需要将当前的公众号与用户的微信号进行绑定, 绑定 ...

  8. 微信公众号给女友推送消息,无需手写代码(超全)

    这次推出呆瓜版教程,几乎不需要编程基础就能操作并且对接api,只有挂在服务器上有一定门槛 作者:小曜 改编自:小红书@猪咪不是猪 一.呆瓜版究极教程 文件包下载方法: ​​​​​​​公众号消息推送.z ...

  9. Java对接微信公众号模板消息推送

    最近公司的有这个业务需求,又很凑巧让我来完成: 首先想要对接,先要一个公众号,再就是开发文档了:https://developers.weixin.qq.com/doc/offiaccount/Get ...

最新文章

  1. java nextline_Java编程语言基础的9根支柱
  2. boost::adl_move_swap相关用法的测试程序
  3. 在C#2.0中使用Nullable可空类型(转帖)
  4. ATI显卡开启fedora9的3d后果的一些条记
  5. 【Excel】使用VLOOKUP+IF实现多列条件匹配查询
  6. LeetCode 1381. 设计一个支持增量操作的栈(deque/数组)
  7. 没人性!让我们这么早来上班
  8. 2012年回忆录及2013年目标设立
  9. (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  10. FreeRTOS(一)——任务管理
  11. anaconda新建python2环境安装不了jupyterlab_python/conda/jupyter-lab虚拟环境管理
  12. android listview多视图嵌套多视图
  13. [供应链·案例篇]疫情影响下的全球十大零售商都做了些什么
  14. vue+js练手前端项目->游戏平台(贪吃蛇、俄罗斯方块、飞机大战、飞翔的小鸟、2048、五子棋)
  15. jdbc操作数据库实现查询产品、增加产品库存量例子
  16. dellr420部署os_dell r420 H310/H810阵列配置教程及常见问题
  17. 如何解决error: failed to push some refs to ‘git@github.com:......git pull冲突问题
  18. Direct2D学习教程(一)
  19. 前锋linux试题,大学篮球考试题库.doc
  20. 《JavaScript百炼成仙》续集01. let强者,竟恐怖如斯

热门文章

  1. 高光谱遥感图像相关知识梳理大全
  2. Windows——启用任务计划程序中的历史记录(已禁用)
  3. Java程序员入职3月面临转正,领导:1年经验包装成5年,试用期淘汰
  4. python编写小游戏17_十分钟教你学会python编写小游戏
  5. 集丰照明|没有副光斑的射灯简直了,小山丘完美
  6. 《庄子》读书笔记(一)
  7. Bean依赖注入的3种数据类型
  8. VB6生成Word文件
  9. visualizing deep neural network decisions prediction difference analysis 可视化深度神经网络决策预测差异
  10. mysql 一行数据拆分成多行