微信公众号之验证码推送(spring-boot+测试号)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、验证码推送使用场景
二、测试号中消息模板的搭建
1.条件测试
b.找到消息模板选项
2.配置消息模板
注:其中变量必须用{ {}}包裹起来、变量名后必须加.DATA否则得不到值。例:{ {code.DATA}}
服务端环境搭建
服务端我们使用weixin-java-mp框架,此框架封装了支付、认证等众多方法。
<dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-mp</artifactId> <version>2.7.0</version> </dependency>
wx: app-id: ******* app-secret: **** server: port: 80
@Configuration public class WxConfig { @Autowired private WxAccountConfig wxAccountConfig; @Bean public WxMpService wxMpService() { WxMpService wxMpService = new WxMpServiceImpl(); wxMpService.setWxMpConfigStorage(wxMpConfigStorage()); return wxMpService; } @Bean public 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()); @Autowired private WxMpService wxMpService; @Override public void returnVerficationCode(String receiveId) { //模板消息封装的对象 WxMpTemplateMessage wxMpTemplateMessage = new WxMpTemplateMessage(); //消息模板ID wxMpTemplateMessage.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)
@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); }
四、实现验证码推送至公众号
上一篇:
uniapp开发微信小程序-2.页面制作
下一篇:
微信小程序 通过获取地理位置查看天气