zoukankan      html  css  js  c++  java
  • 微信测试号开发入门配置问题java

    这个测试号配置弄了好几天了,入了无数坑,终于解决了。。。辛苦我了,手动安慰一下自己。。

    为了萌新们以后不要再浪费时间绕半天做无用功。看看楼楼的艰苦历程吧。

    此教程针对没有云服务器,没有自己的域名的、没钱的、等不及域名备案的同学。

    第一步:申请公众号。

     这里用订阅号,个人。实名认证一下就行了。注册地址:https://mp.weixin.qq.com/

    遇到问题:

    1:邮箱不通过?因为绑定了你微信号的邮箱是不可以用的。就算你解绑,也是要等很久才能用,这里可以直接注册另一个邮箱。

    用网易或新浪重新申请了一个邮箱账号,只把@qq.com改成@163.com申请就可以了,方便记忆。注册地址:http://mail.sina.com.cn/

    https://mail.163.com/

    第二步:准备好配置验证代码:写个servlet

    这里用jdk1.7  (配置自行百度),eclipse,服务器tomcat安装配置自行百度注意将conf下service.xml里端口号改为80,自行百度

    1:Test.java           注意;这里新建的时候选择servlet。 WEB-INF下就会自动生成web.xml配置文件,如果没有请自己新建

    import java.io.IOException;  
    import java.io.PrintWriter;  
    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 cc.ngork.heyes.tools.CheckUtil;
    
    @WebServlet("/Test")  
    public class Test extends HttpServlet {  
        private static final long serialVersionUID = 1L;  
             
        /** 
         * @see HttpServlet#HttpServlet() 
         */  
        public Test() {  
            super();  
            // TODO Auto-generated constructor stub  
        }  
      
        /** 
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
         */  
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
    
            String signature = request.getParameter("signature");  
            String timestamp = request.getParameter("timestamp");  
            String nonce = request.getParameter("nonce");  
            String echostr = request.getParameter("echostr"); 
            System.out.println("signature:" + signature);
            System.out.println("timestamp:" + timestamp);
            System.out.println("nonce:" + nonce);
            System.out.println("echostr:" + echostr);
            PrintWriter out = response.getWriter();  
              
            if(CheckUtil.checkSignature(signature, timestamp, nonce)){  
                out.print(echostr);  
                System.out.println("成功");
            }  else{
                 out.print(echostr);  
                 System.out.println("失败");
                 
            }
            out.flush();
            
        }  
      
        /** 
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
         */  
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
              
            doGet(request, response);  
        }  
      
    }  

    servlet的web.xml配置不会自行百度吧,挺简单的。懒得写了。

    2:CheckUtil.java

    import java.security.MessageDigest;  
    import java.util.Arrays;  
      
    public class CheckUtil {  
      
        private static final String token = "这里填写你自己的token,随便写";  
        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]);  
            }  
              
            //加密  
            String temp = getSha1(content.toString());  
            return temp.equals(signature);  
        }  
          
        public static String getSha1(String str){  
            if(str==null||str.length()==0){  
                return null;  
            }  
            char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9',  
                    'a','b','c','d','e','f'};  
            try {  
                MessageDigest mdTemp = MessageDigest.getInstance("SHA1");  
                mdTemp.update(str.getBytes("UTF-8"));  
                byte[] md = mdTemp.digest();  
                int j = md.length;  
                char buf[] = new char[j*2];  
                int k = 0;  
                for (int i = 0; i < j; i++) {  
                    byte byte0 = md[i];  
                    buf[k++] = hexDigits[byte0 >>> 4 & 0xf];  
                    buf[k++] = hexDigits[byte0 & 0xf];   
                }  
                return new String(buf);  
            } catch (Exception e) {  
                return null;  
            }  
        }  
    }  

    这里工程发布到tomcat后,直接网页进入是500错误,这没有关系,不要担心。进入下一步。

    第三步:使用sunny ngrok  映射        

       网址:https://www.ngrok.cc    按照他说的仔细看他给的教程完成操作。完全免费。一定要看教程!!!

    下载客户端后双击.bat文件输入隧道id后回车,出现这个界面代表成功!保持这个界面开启,保持tomcat刚刚写的工程发布、开启。

    第四步:进入微信公众号,开发,基础配置:

    配置token和url

    url是你的工程路径:如你在sunny ngrok里申请了叫demo,你的前置域名就是:http://demo.free.ngrok.cc

    然后看你刚工程Test的web.xml文件

    <servlet-name>Test</servlet-name>
    <url-pattern>/servlet/Test</url-pattern>

    这里这样配置那么你的url就是:http://demo.free.ngrok.cc/servlet/Test

    token就是你在刚刚代码里填的token

    点击提交。看看你的eclipse控制台有没有信息显示,如果显示了成功。而提交那边显示url超时不要急,因为这个sunny ngrok给你的免费服务器是香港的,网络不太稳定,也很卡。你把那个.bat

    退出重进输入隧道id重启,再提交!还是超时就再来一次,(确保eclipse是有信息的,如果没有就是别的地方错了,楼楼反正没遇到)再来一次。。。如果显示不成功请注意你的tomcat是不是改为80端口。

     第五步:进入微信公众号,开发者工具。微信测试号开发。进入:

    之后填写url和token如果显示配置失败请按照第四步弄。配置成功恭喜你可以进行开发了。

        说的不太详细,但是希望可以解决你的问题。

     

          这个仅供不想花钱的学习者开发使用教程。至少现在sunny ngrok还是可以用的。

     

     

  • 相关阅读:
    Palindrome Partitioning
    Minimum Path Sum
    Maximum Depth of Binary Tree
    Minimum Depth of Binary Tree
    Unique Binary Search Trees II
    Unique Binary Search Trees
    Merge Intervals
    Merge Sorted Array
    Unique Paths II
    C++ Primer Plus 笔记第九章
  • 原文地址:https://www.cnblogs.com/yang4869/p/8398546.html
Copyright © 2011-2022 走看看