• 开发笔记


    【简单的微信公众平台开发】

    或许是最容易的方式:

    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 进来 --> 修改成需要的函数

  • 相关阅读:
    bzoj2809 [Apio2012]dispatching
    bzoj2743[HEOI2012]采花
    bzoj3626[LNOI2014]LCA
    bzoj2038 [2009国家集训队]小Z的袜子(hose)——莫队
    bzoj2442[Usaco2011 Open]修剪草坪——单调队列优化
    bzoj1588[HNOI2002]营业额统计——双向链表
    洛谷1527(bzoj2738)矩阵乘法——二维树状数组+整体二分
    bzoj1503[NOI2004]郁闷的出纳员——Splay
    洛谷P2014——选课
    洛谷P1352——动规
  • 原文地址:https://www.cnblogs.com/xkxf/p/7172996.html
Copyright © 2020-2023  润新知