应用场景: 微信开发时经常需要回调地址,下面对微信需要的回调地址啰嗦几句
回调地址(回调接口):(微信通过你的发送的请求(比如授权,支付等),响应给你的信息,但是他不知道怎么返回给你,这个时候他说你要是能够配置一个回调地址,那他就把响应的信息放到这个地址里面,但是不能是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);
// }sout.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的,你只要记住我说的是重点和常见的坑,都百度这个了大体应该有点基础了