Java Facebook';s webhook应用程序创建失败,原因是;无法验证提供的URL";

Java Facebook';s webhook应用程序创建失败,原因是;无法验证提供的URL";,java,facebook,facebook-graph-api,Java,Facebook,Facebook Graph Api,无法在Facebook上创建Webhook应用程序,因为出现错误“无法验证提供的URL” 从带有https端口443的浏览器中,为回调提供的url工作正常 从webhook接收post调用的Servlet代码如下 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.

无法在Facebook上创建Webhook应用程序,因为出现错误“无法验证提供的URL”

  • 从带有https端口443的浏览器中,为回调提供的url工作正常
  • 从webhook接收post调用的Servlet代码如下

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
             System.out.println("**************Entering Callback Servlet**************************");
                Map<String, String[]> parametersMap = request.getParameterMap();
                if (parametersMap.size() > 0) {
                    if (request.getParameter("hub.mode").equals("streamInit")) {
                        System.out.println("Verify Token: " + request.getParameter("hub.verify_token"));
                        System.out.println("Challenge number:" + request.getParameter("hub.challenge"));
                        String responseToClient = request.getParameter("hub.challenge");
                        response.setStatus(HttpServletResponse.SC_OK);
                        response.getWriter().write(responseToClient);
                        response.getWriter().flush();
                        response.getWriter().close();           
                        response.getWriter().append("Fetch-Mode").append(request.getParameter("hub.mode"));
                        response.getWriter().append("App Verify Token:").append(request.getParameter("hub.verify_token"));
                        response.getWriter().append("App Challenge No").append(request.getParameter("hub.challenge"));
                        System.out.println("**************Callback Successful**************************");
                       }
    
                    //response.getWriter().append("Served at: ").append(request.getContextPath());
                    }else{
                        System.out.println("**************Not an Facebook POST**************************");
                    }
                   System.out.println("**************Exiting Callback Servlet**************************");
    
    
            }
    
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                doGet(request, response);
            }
    
    受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
    System.out.println(“*******************进入回调Servlet**********************************”);
    映射参数Map=request.getParameterMap();
    如果(参数map.size()>0){
    if(request.getParameter(“hub.mode”).equals(“streamInit”)){
    System.out.println(“验证令牌:+request.getParameter(“hub.Verify_令牌”));
    System.out.println(“质询编号:+request.getParameter(“hub.Challenge”));
    String responseToClient=request.getParameter(“hub.challenge”);
    response.setStatus(HttpServletResponse.SC_OK);
    response.getWriter().write(responseToClient);
    response.getWriter().flush();
    response.getWriter().close();
    response.getWriter().append(“获取模式”).append(request.getParameter(“hub.Mode”));
    response.getWriter();
    response.getWriter().append(“应用程序质询编号”).append(request.getParameter(“hub.Challenge”));
    System.out.println(“****************回调成功*******************************”);
    }
    //response.getWriter().append(“服务于:”).append(request.getContextPath());
    }否则{
    System.out.println(“****************不是Facebook帖子****************************”);
    }
    System.out.println(“*************正在退出回调Servlet*******************************”;
    }
    受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
    doGet(请求、响应);
    }
    

  • 需要关于我这里缺少的内容的帮助。

    Facebook希望被指向确切的文件(例如:callback.php),您可以使用mod rewrite解决这个问题。值得一提的是,https://证书必须是有效的,并由公共机构(例如:comodo)签名。

    您可以使用它将https Webhook发送到本地主机开发服务器

    if(request.getParameter(“hub.mode”).equals(“streamInit”))

    if(request.getParameter(“hub.mode”).equals(“subscribe”)


    我不需要把它指向一个精确的文件。

    你在这里并没有真正使用IP
    0.0.0
    ,是吗?您不能为此使用本地IP地址,它必须是可公开访问的URL。(我也不确定IP地址是否有效——在大多数情况下,Facebook想要有主机名的URL。)不,我不知道。使用0.0.0.0。我有一个公共URL和它的可访问性。但我没有像markus说的那样拥有一个签名SSL证书。我现在走到了死胡同:)是的,没错,现在你需要提供一个HTTPS URL。获取有效SSL证书的一种廉价而简单的方法是,但它需要您的服务器配合(允许您使用其处理域验证的客户端)。如果不这样做,还可以为个人提供免费证书。确定。我没有签名的SSL证书。除了webhook之外,我还有什么办法可以获得实时订阅源吗?@KarthickRadhakrishnan没有。但是你可以用大约8美元一杰尔的价格获得签名的sll证书。我发现最便宜的是在