首先說明,本幫助文檔是利用javaweb的Servlet來進行“接口配置信息配置信息”認證的。
在學習微信公眾號開發的時候,讀到填寫服務器配置的幫助部分,總是不能理解為啥按照他的步驟做總是設置失敗(吐槽:這個幫助寫的太簡略,原理講了一般,對不了解PHP的人簡直就是歧視)。
設置失敗的一個重要原因:url的請求相應沒有返回echostr這個參數。
如果讀到這里你還不能理解,就請看以下的截圖和源代碼:
1、首先我搭建了一個將局域網內我的電腦發布到intetnet上的環境,利用ngrok,如果想了解如何搭建,請查看我的另一篇博客:ngrok使用命令幫助
1 @WebServlet("/portal") 2 public class ServerPortal extends HttpServlet { 3 private static final long serialVersionUID = 1L; 4 private static final String token = "janken"; 5 6 /** 7 * @see HttpServlet#HttpServlet() 8 */ 9 public ServerPortal() { 10 super(); 11 } 12 13 /** 14 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 15 */ 16 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 17 String signature = request.getParameter("signature"); 18 String timestamp = request.getParameter("timestamp"); 19 String nonce = request.getParameter("nonce"); 20 String echostr = request.getParameter("echostr"); 21 System.out.println("signature:" + signature); 22 System.out.println("timestamp:" + timestamp); 23 System.out.println("nonce:" + nonce); 24 System.out.println("echostr:" + echostr); 25 PrintWriter pw = response.getWriter(); 26 pw.append(echostr); 27 pw.flush(); 28 } 29 30 /** 31 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 32 */ 33 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 34 doGet(request, response); 35 } 36 37 }
4、根據ngrok提供的url和我們創建的servlet填寫微信的url和token
5、點擊提交,這是微信會主動訪問我們寫的servlet,獲得我們返回的參數中的echostr的內容即可認證通過。
認證過程原理分析: