建立微信公众号测试帐号-Java本地服务
优采云 发布时间: 2020-08-09 03:56这里的重点是页面授权回调的域名.
这是第一个坑. 在测试编号中,您可以填写域名ip,甚至不需要填写域名,这极大地方便了测试授权的使用. 回调页面表示微信用户关注您的官方账号. 当他选择授权登录时,我们可以调用微信界面来获取他的基本微信信息,例如唯一的微信openid,然后返回到我们的页面之一,或者这是用于采集用户信息的服务. 页面或服务必须在此域名下. 假设我填写了
例如,如果我想返回页面,它可以是:
,
返回服务:
只要在此域名下,无论嵌入多少层. 请注意,不能在前面添加https或http前缀.
在回调域名中,如果您的项目名称由下划线组成,
例如,要访问您的项目,请删除带下划线的项目名称. 尽管删除的项目名称只能映射回本地启动服务器,而不是映射回项目,但这不会造成伤害.
好的,这里很多人说,如果没有域名,我该怎么办,那是第二种材料,一个可以映射到Intranet的域名.
我使用的花生壳域名.
新用户可以获得几个免费域名,他们也可以使用这些域名,但是对于我来说,测试并购买100个大洋的.com域名非常方便.
然后通过花生壳内部网下载客户端
您拥有的域名将显示在这里,包括您发送的域名.
随意编写应用程序名称,域名是下属之一,映射是HTTP80. 内部主机不知道您可以打开cmd ip config / all来查看您的地址. 我的项目从tomact开始,使用默认端口8080. 最后,进行诊断并在地址栏中键入Internet域名,以确保其他人可以访问您的本地项目.
到目前为止,第二种材料已经准备好了.
第三个是可以运行的项目...这里将不讨论. 您可以使用springboot + myb,springMVC,struts2来构建可以运行的项目. 如果没有,请搜索其他博客以快速建立一个博客,至少您可以输入一个servelet. 我只是直接运行公司的项目.
连接授权界面
首先编写一个链接: APPID&redirect_uri = l&response_type = code&scope = snsapi_base&state = 123#wechat_redirect
此链接已发送至微信,表明我要开始停靠此界面
appid: 是测试编号上的appid
redirect_uri: 我们刚刚在上面填写了,因此这里是在该域名下填写一个HTML以供回调. 必须添加或在这里,必须!
scope: 这是指要调用的微信界面,snsapi_base是指用户的静默授权,这是用户执行微信授权而没有弹出框提示是否进行授权的情况,因此该界面获取的信息较少,您可以查看详细信息官方技术文档.
状态: 填写您想要的任何内容.
我下载了官方的微信调试工具. 如果您按照上述步骤进行操作,则您的链接将不会出现代码错误,redirect_uri和其他错误.
如您所见,在返回的页面上,后缀附有代码. 该代码将被发送到微信以交换刚刚登录的用户的信息. 当然,您可以对上述授权链接进行异步请求,并使用js在页面上获取它. 我是这样子的
函数GetQueryString(name)
{
var reg = new RegExp(“(^ |&)” + name +“ =([^&] *)(&| $)”);
var r = window.location.search.substr(1).match(reg);
if(r!= null)返回unescape(r [2]);返回null;
}
调用GetQueryString(code)获取地址的参数值.
获取后,将其发送到后台进行处理. 有很多提交方法. 异步也是可能的,或者将整个表单直接连接到其他值并提交到后台. 根仍然由后台处理.
仅使用老式的struts2粘贴密钥代码,因此返回String映射以返回到页面,如果您是springMVC控制器,请自行更改
public String juvenileSubsidy() {
//如果是第二次验证登录则直接发送微信的opendid
String openId =getOpenId();
.......//省略各种去到信息以后的service
return "login_jsp";
}
........
private String getOpenId(){
//appid和secret是测试公众号上的,自行填写,别直接copy,
//code是刚刚获取到的,自行改写参数
String url="https://api.weixin.qq.com/sns/oa"
+ "uth2/access_token?appid="+wxappid+"&"
+ "secret="+appsecret+"&code="+wxcode+""
+ "&grant_type=authorization_code";
String openId="";
try {
URL getUrl=new URL(url);
HttpURLConnection http=(HttpURLConnection)getUrl.openConnection();
http.setRequestMethod("GET");
http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
http.setDoOutput(true);
http.setDoInput(true);
http.connect();
InputStream is = http.getInputStream();
int size = is.available();
byte[] b = new byte[size];
is.read(b);
String message = new String(b, "UTF-8");
JSONObject json = JSONObject.parseObject(message);
openId=json.get("openid").toString();
} catch (Exception e) {
System.out.println(e.getMessage());
}
return openId;
}
当然,许多博客文章都是关于如何封装地址参数名称的,以便以后可以调用. 一开始,我写得很粗糙以显示效果. 您可以在将来轻松封装它,甚至可以使用xml读取配置信息. 我的私有方法只是返回我需要的String openid. 您可以选择返回对象,或检查正式文档,更改原创范围,非静默授权可以获取更多用户信息.
接下来是调试观察.
{"access_token":"15_0D9_XTsx2YdwoD5KPd6WHAEc47xLqy4uuQAb06irOd5UgOnzwW3zPRdhMXinpJ7ucvkW3D7coema7QAdA",
"expires_in":7200,
"refresh_token":"15_cz_GGe-k41d_YVVgmrFvQBUvF_LuyuNSB2PTq8YWXHLz0l7Vg8hJnBWjGFMNhTT2NRFqqRYT5gSofww",
"openid":"o-MN1B0FGR1JV398vbSPNZ70xa424",
"scope":"snsapi_base"}
以上是成功发送到微信界面的json对象. 我叫snsapi_base,所以我只能返回此信息. 这些令牌每次都会刷新,并且这些密钥也被微信用于验证服务器的重要数据,但是在这里它们是无用的. 我得到了所需的openid.
通过这种方式,获得了微信登录官方账号上唯一识别的ID,并可以通过该ID实现业务逻辑. 同时,可以在本地测试官方帐户服务.
对于本文开头提到的接口配置信息,此处不需要使用它. 这要求后端发送令牌进行验证.
最后,您可以将此婴儿链接放在官方帐户的自定义菜单中. 这就是所谓的用户登录授权.
当然,这是测试帐户授权. 正式启动后,它将替换为注册域名,appid被替换为官方官方帐户的ID,其余部分保持不变.
到目前为止,官方帐户的静默授权已完成!