将内网IP虚拟成外网能够访问的域名

应用场景:

微信开发时经常需要回调地址,下面对微信需要的回调地址啰嗦几句

回调地址(回调接口):(微信通过你的发送的请求(比如授权,支付等),响应给你的信息,但是他不知道怎么返回给你,这个时候他说你要是能够配置一个回调地址,那他就把响应的信息放到这个地址里面,但是不能是IP地址,而是域名地址(相当于IP的别名,其实本质是一回事,但是他就认这个别名),但是你如果配置的是本地的地址IP,那么他仍然不能把响应的信息给你,因为条件是(1:这个地址外网能够访问,2:纯数字的IP地址他不认识),那么你需要做的就是满足他,配置一个(1:外网可以访问的地址,2:这个地址不要是单纯的数字的192.168.xx.x那种格式,而是https://www.baidu.com/这种域名的格式)他好把信息携带过来,放到你的回调地址)

怎么才可以满足这个微信回调地址的要求呢,这个时候需要第三方工具,比如花生壳,NATAIPP这些工具帮我们做1:(内网穿透)和2:(实现域名绑定的,就是把IP地址映射成域名,这样微信回调地址才认可)

1:在第三方官网注册:比如natapp网站地址 https://natapp.cn/

2:注册完了去实名认证一下,比如支付宝或者淘宝(身份证等),之后就可以买免费的版本,9元每月可以固定域名其实也还好

 3:选择免费隧道后,会到的以下信息

4:配置本地启动(这里以Windows版本为例,注意配置文件和natapp.exe在同一路径):https://natapp.cn/article/config_ini

 

5:点击客户端工具,启动,这时候就会有界面如图所示(是不是远程的域名 http://ms73qk.natappfree.cc -> 127.0.0.1:80)指向了本地,实现了:内网穿透(微信可以使用http://ms73qk.natappfree.cc)并且可以把它(http://ms73qk.natappfree.cc )当做回调域名(本质是127.0.0.1:80的IP地址),这个natapp软件保证了http://ms73qk.natappfree.cc是内网穿透的(就是外网可以访问的,比如微信访问这个是可以的),而且不在是单纯的数字IP地址,而是域名(只是这个免费版本域名是定期会变的,测试的话可以凑合使用的,如果变了,重新启动一下,在一段时间类似可以测试的,当然买个9元的收费的这个域名是可以固定的)

注意外网的80端口一般习惯对应本地的8080端口,所以一般会做一个映射(在"我的隧道"找到隧道,附近有个配置,点击进去就是可以设置8080),因为微信公众号回调他默认访问80端口,所以需要映射到你的8080端口,如果不配置8080,那么他去找80端口是找不到的,所以会提示配置失败,如图

 上面的/wechatback/test接口的写法(仅供参考,我也是网上找的一段)

import java.io.PrintWriter;

import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 微信接口配置需要的一个接口
 */
@RequestMapping("/wechatback")
@Controller
public class WechatController {
    private static Logger logger = Logger.getLogger(WechatController.class);

    private static String WECHAT_TOKEN = "wx_oms";

    @RequestMapping(value = "/test")
    public void get(HttpServletRequest request, HttpServletResponse response) throws Exception {

        logger.error("WechatController   ----   WechatController");

        System.out.println("========WechatController========= ");


        Enumeration pNames = request.getParameterNames();
        while (pNames.hasMoreElements()) {
            String name = (String) pNames.nextElement();
            String value = request.getParameter(name);
            // out.print(name + "=" + value);

            String log = "name =" + name + "     value =" + value;

        }

        String signature = request.getParameter("signature");/// 微信加密签名
        String timestamp = request.getParameter("timestamp");/// 时间戳
        String nonce = request.getParameter("nonce"); /// 随机数
        String echostr = request.getParameter("echostr"); // 随机字符串
        PrintWriter out = response.getWriter();

        //if (SignUtil.checkSignature(signature, timestamp, nonce)) {
        out.print(echostr);
//		}s
        out.close();
//		out = null;

    }

}

修改如

启动界面

 6:做你微信开发(NGINX需要简单配置一下),比如参考:https://natapp.cn/article/wechat_local_debug

 注意:微信公众号还需要配置域名

在设置的时候不需要加http://,不然还是会出现redirect_uri域名还是与后台配置不一致 

 

 在构造微信开发的URL传参时,接口的域名必须进行编码的解码后才可以,这个https://meyerweb.com/eric/tools/dencoder/网站可以实现URL编码(微信要求的)

 当然直接使用代码更好,如  

String encode = URLEncoder.encode(url, "ISO-8859-1");

 示例请求(获取微信网页授权,重点是URL哪里,其他的不重要)把这个发给微信好友,就可以获取它的头像,省份等

 注意需要关注(获取code)

 返回的code如图

7:常规natapp配置错误的情况(说一下我拆过的坑,我不知道我的反向代理配置的时候应该是正确的,但是不知道为什么代理到SVN去了,你们应该不会遇到): https://natapp.cn/article/errors

8:说明:我感觉有点乱,一会儿微信一会natapp的,你只要记住我说的是重点和常见的坑,都百度这个了大体应该有点基础了

发布了57 篇原创文章 · 获赞 33 · 访问量 814万+

猜你喜欢

转载自blog.csdn.net/wozniakzhang/article/details/90138418
今日推荐