开发笔记

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

或许是最容易的方式:

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

 

posted @ 2017-07-14 23:15  xkfx  阅读(222)  评论(0编辑  收藏  举报