Java - 微信公众号 - 带领小白步入微信大门

1、开发准备

   (1)获取微信的测试账号https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login  

      

    (2)填写的URL当然不能使用IP,这时候就需要去Ngrok中映射一个域名,当然,自己要是有域名那就更好。(建议:使用Ngrok的话,最好直接花个10块大洋买个,那样会更稳定,不然有时候会好好的接不上了,那就不晓得去哪里找错了,自己看着办吧)

        本机使用的话,本地端口那块直接127.0.0.1:8080就OK。

2、开发接入

  (1)使用Controller来接入

@Controller
@RequestMapping("/wxdemo")
public class DemoController {
    
    private static final String appid = "填写你相对应的appid";

    @RequestMapping(value = "/getMsg", method = RequestMethod.GET)
    public void getMsg(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
        
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8"); 
      
            
        String signature = req.getParameter("signature");

        String timestamp = req.getParameter("timestamp");

        String nonce = req.getParameter("nonce");

        String echostr = req.getParameter("echostr");

        if(CheckUtil.checkSignature(signature, timestamp, nonce)){

            //如果校验成功,将得到的随机字符串原路返回
            resp.getWriter().write(echostr);
        }
    }
}

 

public class CheckUtil {

  //配置微信公众号时填写的Token
    private static final String token = "iysbd55iwp2z3geood4mj4apwzut5e2t";

    public static boolean checkSignature(String signature, String timestamp, String nonce) {

        // 拼接字符串
        String[] arr = new String[] { token, timestamp, nonce };
        // 排序
        Arrays.sort(arr);
        // 生成字符串
        StringBuffer content = new StringBuffer();
        for (int i = 0; i < arr.length; i++) {
            content.append(arr[i]);
        }
        // SHA1加密
        String tmp = DecriptUtil.SHA1(content.toString());
        return tmp.equals(signature);
    }
}
public class DecriptUtil {
    
    public static String SHA1(String decript) {
        try {
            MessageDigest digest = java.security.MessageDigest
                    .getInstance("SHA-1");
            digest.update(decript.getBytes());
            byte messageDigest[] = digest.digest();
            // Create Hex String
            StringBuffer hexString = new StringBuffer();
            // 字节数组转换为 十六进制 数
            for (int i = 0; i < messageDigest.length; i++) {
                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
                if (shaHex.length() < 2) {
                    hexString.append(0);
                }
                hexString.append(shaHex);
            }
            return hexString.toString();

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }
}

    配置完接口信息后点击“提交”:

     

        ---------->>>   注:如果域名使用的是免费的,可能会出现配置失败的情况,域名服务器太慢,你可以多点几次提交。。。

        

      

        controller接入完毕!!!

  

   (2)使用Servlet来接入(其实Servlet和Controller都是一样的)

public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
     req.setCharacterEncoding(
"UTF-8"); resp.setCharacterEncoding("UTF-8"); String signature = req.getParameter("signature"); String timestamp = req.getParameter("timestamp"); String nonce = req.getParameter("nonce"); String echostr = req.getParameter("echostr"); if(CheckUtil.checkSignature(signature, timestamp, nonce)){ //如果校验成功,将得到的随机字符串原路返回 resp.getWriter().write(echostr); } }

 

    以上就是本人对Java接入公众号的总结,希望对大家能够有帮助!!!(第一次写博客,写的不好还望海涵  -_-)

 

posted on 2017-09-14 17:19  IT-Dream  阅读(148)  评论(0)    收藏  举报

导航