开发笔记
【简单的微信公众平台开发】
或许是最容易的方式:
1- 做好能够适应手机屏幕的 H5 网页,放在自家的服务器上(用户、支付什么的完全和微信分离
2- 把网址直接填入 自定义菜单 - 跳转网页
3- 没认证的话可以把网址添加到自动回复中去,别人一样可以看到
【短信验证码的简单实现】错误 ↓ 。。明显的线程不安全
请求短信的 URL 为 webapp/reg.do?method=sendSMS
package com.xkfx.service; import java.io.IOException; import java.io.PrintWriter; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.yuke.bean.User; @SuppressWarnings("serial") @WebServlet("/reg.do") public class DoRegisterService extends HttpServlet { String code = null; // 保存验证码 // 生成随机字符串 public static String getRandomString(int length) { // length 表示生成字符串的长度 String base = "abcdefghijklmnopqrstuvwxyz0123456789"; Random random = new Random(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { int number = random.nextInt(base.length()); sb.append(base.charAt(number)); } return sb.toString(); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); resp.setCharacterEncoding("UTF-8"); // 处理 AJAX 请求 String txtMobile = req.getParameter("txtMobile"); if (req.getParameter("method") != null && req.getParameter("method").equals("sendSMS")) { sendSMS(txtMobile, resp); // 生成随机验证码并发送到客户手机 return; } String txtPassword = req.getParameter("txtPassword"); boolean flag = (code != null) && code.equals(req.getParameter("txtCode")) && txtMobile.equals(req.getParameter("txtMobile")) && txtPassword != null && !"".equals(txtPassword); if (flag) { UserService userService = new UserService(); User user = new User(); user.setUsername(txtMobile); user.setPassword(txtPassword); flag = userService.register(user); // 判断用户是否已经注册 if (flag) req.getSession().setAttribute("user", user); // 维护用户信息 } code = null; // 重置验证码 // 返回 JSON PrintWriter pw = resp.getWriter(); pw.println("{\"status\": " + (flag ? 1 : 0) + ", \"msg\": \"验证码错误或该账号已经注册\"" + ", \"url\": \"/wxapp/user\"}"); pw.close(); } public void sendSMS(String txtMobile, HttpServletResponse resp) throws IOException { code = getRandomString(4); // 生成随机验证码 System.out.println(txtMobile); // 发送验证码到客户手机 PrintWriter pw = resp.getWriter(); pw.println("{\"status\": " + 1 + ", \"msg\": \"手机验证码获取成功\"" + ", \"url\": \"/wxapp/user\"}"); pw.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
把 System.out.println(txtMobile); 改成调用一个发短信的函数,把手机号,验证码作为参数传进去就 OK 了,例如 sendSMS("12223232", code); 当然这个发短信的函数需要到提供该服务的平台下载,使用方法也很简单,就 Java 而言,一般会有如下步骤:
添加必要的 JAR 包 --> 添加一些加密解密(或者其它)的类 --> 把示例代码 COPY 进来 --> 修改成需要的函数