在对接支付宝或微信支付等支付平台时,基本都需要进行回调接口的联调。而我们在进行本地开发时,本地的内网地址是无法被外网访问的,那么支付平台的服务器就无法回调我们的接口地址。所以我们需要做一个内网穿透,才能让外网能够访问到我们内网的接口地址。

综上所述,内网穿透就是干这么一件事的,它让外网的机器能访问到我们内网的接口地址。例如我们在本地开发好了一个网站,想要分享给朋友看,但是他不能直接访问到我们机器上的内网地址,那么就我们需要做一个内网穿透,然后他就能访问到我们内网地址了。

本文演示一下如何使用natapp来实现内网穿透,官方的新手教程文档地址:

https://natapp.cn/article/natapp_newbie

首先打开netapp官网注册并登录账户,购买或使用免费的隧道。我这里是购买的9元一月的隧道:

配置隧道的信息:

配置完成后,进行支付购买:

购买完成:

然后下载客户端:

下载完成后进行解压,在解压后的目录下,新建一个config.ini文件,该文件为natapp客户端的配置:

配置文件内容说明如下,自行根据需求及说明进行配置:

#将本文件放置于natapp同级目录 程序将读取 [default] 段
#在命令行参数模式如 natapp -authtoken=xxx 等相同参数将会覆盖掉此配置
#命令行参数 -config= 可以指定任意config.ini文件
[default]
authtoken=                      #对应一条隧道的authtoken
clienttoken=                    #对应客户端的clienttoken,将会忽略authtoken,若无请留空,
log=none                        #log 日志文件,可指定本地文件, none=不做记录,stdout=直接屏幕输出 ,默认为none
loglevel=ERROR                  #日志等级 DEBUG, INFO, WARNING, ERROR 默认为 DEBUG
http_proxy=                     #代理设置 如 http://10.123.10.10:3128 非代理上网用户请务必留空

注:我这里只配置了authtoken,authtoken在“我的隧道”页面进行查看,使用哪条隧道就配置哪条隧道的authtoken

然后双击运行natapp.exe,如下显示Online则代表是运行成功的:


创建一个SpringBoot工程进行测试

创建一个简单的SpringBoot Web工程,然后创建一个测试的controller类:

TestController 类代码如下:

package org.zero01.natapp.natapptest.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * @program: natapp-test
 * @description: 测试natapp的内网穿透
 * @author: 01
 * @create: 2018-05-15 11:01
 **/
@RestController
@RequestMapping("/local")
public class TestController {

    @GetMapping("/test")
    public Map<String, String> test() {
        Map<String, String> responseMap = new HashMap<>();
        responseMap.put("code", "0");
        responseMap.put("API", "/local/test");
        responseMap.put("address", "127.0.0.1");
        responseMap.put("msg", "这是natapp内网穿透测试");

        return responseMap;
    }
}

运行SpringBoot的启动类,启动完成后,使用浏览器访问如下地址:

http://zero.s1.natapp.cc/local/test

访问结果如下,这里由于安装了格式化json的插件,所以显示的是格式化好的json数据:

可以成功从这个外网域名地址访问成功后,我们的内网穿透就完成了,现在就可以从外网访问到我们本地的接口地址了,这种内网穿透的方式很简单也很实用,是我们实现回调接口联调的一大神器。


关于微信开发时的配置

由于微信屏蔽了natapp的三级域名,所以如果需要进行微信支付或者微信小程序的联调时需要注册一个二级域名,但是二级域名也有被屏蔽的风险并且仅支持将域名绑定在付费隧道上,因此需要自行考虑风险,不过一般不干啥坏事被屏蔽的几率还是很小的。如果没有微信开发的需求的话,可以忽略本节内容。

进入到“二级域名”页面,注册一个二级域名:

查询一个自己喜欢的域名前缀进行注册,如果用于联调微信小程序的话,则需要注册带有SSL证书的,因为微信小程序仅支持https协议。我因为需要联调微信支付以及微信小程序,所以我这里注册了15元/年的那个,但是在注册前需要先按照要求进行实名认证:

注册完成后,到隧道的配置页面中,配置这个域名:

修改完成:

关闭本地运行的natapp客户端,原本的config.ini配置无需改动,重新打开natapp客户端,如下:

重新启动我们刚刚用于测试的SpringBoot工程,使用浏览器访问如下地址,看看是否能访问到我们本地的接口:

https://zero.mynatapp.cc/local/test http://zero.mynatapp.cc/local/test

测试成功: