微信小程序与后端SpringBoot通信
案例概述
微信小程序请求后端SpirngBoot,中间使用Ngrok做内网穿透.
内网穿透Ngrok配置
下载Ngrok
注册并配置Ngrok认证
注册完Ngrok之后进入个人主页在Auth页面找到自己的验证码,然后打开Ngrok认证即可

配置端口和协议
我这里的端口是8181,因为我Tomcat的端口是8181\
ngrok http 8181
Ngrok配置完成
配置完成之后Ngrok会为我们提供两个链接,一个是http协议的一个市https协议的.
Ngrok的作用说白了就是将你本地某个端口上运行的服务暴露在了公网上.
这里的穿透指的就是将内网中的服务穿过防火墙.
后端SpringBoot
Controller
接收微信小程序发来的请求,并根据请求做出响应
package le.controll;
import le.domain.Info;
import le.utils.JSONResult;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @program: SpringBootIntrodoction
* @description:
* @author: Mr.Han
* @create: 2019-01-26 22:16
**/
@Controller
public class QuickController2 {
    @RequestMapping("/info")
    @ResponseBody
    public JSONResult quick(Info info) {
        System.out.println(info.toString());
        return JSONResult.ok(info);
    }
}实体类
package le.domain;
import java.io.Serializable;
/**
* @program: SpringBootIntrodoction
* @description: 测试实体类
* @author: Mr.Han
* @create: 2019-02-01 14:13
**/
public class Info implements Serializable {
    private String name;
    private String personName;
    private Integer age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPersonName() {
        return personName;
    }
    public void setPersonName(String personName) {
        this.personName = personName;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Info{" +
                "name='" + name + '\'' +
                ", personName='" + personName + '\'' +
                ", age=" + age +
                '}';
    }
}JSON工具类
package chen.utils;
import chen.domain.Info;
import com.fasterxml.jackson.databind.util.JSONPObject;
import org.springframework.boot.configurationprocessor.json.JSONObject;
/**
* @program: SpringBootIntrodoction
* @description: 实体类转换成JSON
* @author: Mr.Han
* @create: 2019-02-01 14:17
**/
public class JSONResult {
    // 响应业务状态
    private Integer status;
    // 响应消息
    private String msg;
    // 响应中的数据
    private Object data;
    private String ok;    // 不使用
    public static JSONResult build(Integer status, String msg, Object data) {
        return new JSONResult(status, msg, data);
    }
    public static JSONResult ok(Object data) {
        return new JSONResult(data);
    }
    public static JSONResult ok() {
        return new JSONResult(null);
    }
    public static JSONResult errorMsg(String msg) {
        return new JSONResult(500, msg, null);
    }
    public static JSONResult errorMap(Object data) {
        return new JSONResult(501, "error", data);
    }
    public static JSONResult errorTokenMsg(String msg) {
        return new JSONResult(502, msg, null);
    }
    public static JSONResult errorException(String msg) {
        return new JSONResult(555, msg, null);
    }
    public JSONResult() {
    }
    public JSONResult(Integer status, String msg, Object data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
    }
    public JSONResult(Object data) {
        this.status = 200;
        this.msg = "OK";
        this.data = data;
    }
    public Boolean isOK() {
        return this.status == 200;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }
    public String getOk() {
        return ok;
    }
    public void setOk(String ok) {
        this.ok = ok;
    }
}微信小程序端
视图
<view bindtap="clickMe">点击发送请求</view>绑定了一个bindtap事件,点击的时候发送请求
JS代码
// pages/requestinterface/requestinterface.js
Page({
  /**
  * 页面的初始数据
  */
  data: {
  },
  clickMe: function() {
    wx.request({
      url: 'ngrok公网接口',
      data: {
        personName: "张三的父亲",
        name: "张三",
        age: 18
      },
      header: {
        'content-type': 'application/json' 
      },
      success(res) {
        console.log(res.data)
      }
    })
  }
})完整的流程
特别提醒
因为我们使用的是Ngrok做的内网穿透,微信小程序默认识别出Ngrok的接口时非法的.
这时候我们就必须要设置不校验合法域名