請求的整體流程

20190410110821.png
一、測試賬號
去https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
獲取個(gè)測試號,將appID和appsecret記錄到application.yum文件中,或者也可以配置到項(xiàng)目的常量接口中
在體驗(yàn)接口權(quán)限列表中找到網(wǎng)頁賬號修改授權(quán)回調(diào)頁面域名(本地開發(fā)環(huán)境,可使用ngrok、cpolar、向日葵等內(nèi)網(wǎng)穿透軟件)

20190410111316.png

20190410111613.png
java后臺設(shè)置:
前端頁面就是幾個(gè)簡單的標(biāo)簽,在此沒有貼出
@Controller
public class WXConntroller {
@Value("${oauth.wx.appid}")
private String appid;
@Value("${oauth.wx.appsecret}")
private String appsecret;
@Value("${oauth.callback.http}")
private String http;
private String access_Token;
private String openId;
@GetMapping("/")
public String wxlogin() {
// 第一步:用戶同意授權(quán),獲取code
String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid +
"&redirect_uri=" + http +
"&response_type=code" +
"&scope=snsapi_userinfo" +
"&state=STATE#wechat_redirect";
return "redirect:" + url;
}
@GetMapping("/wxcallback")
public String wxcallback(String code, ModelMap map) throws IOException {
// 第二步:通過code換取網(wǎng)頁授權(quán)access_token
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appid +
"&secret=" + appsecret +
"&code=" + code +
"&grant_type=authorization_code";
JSONObject jsonObject = HttpClientUtils.doGet(url);
openId = jsonObject.getString("openid");
access_Token = jsonObject.getString("access_token");
System.out.println("access_Token"+access_Token);
// 第四步:拉取用戶信息(需scope為 snsapi_userinfo)
url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_Token +
"&openid=" + openId +
"&lang=zh_CN";
JSONObject userInfoJson = HttpClientUtils.doGet(url);
System.out.println("UserInfo:" + userInfoJson);
// 微信帳號做來一個(gè)關(guān)聯(lián),來關(guān)聯(lián)我們的賬號體系
// 此處實(shí)現(xiàn)自己的保存用戶信息邏輯
return "redirect:/gohome?openid=" + openId;
}
@GetMapping("/gohome")
public String gohome(String openid, ModelMap map) {
WXUser userEntity = wxUserService.getModel(openid);
if (StringUtils.isEmpty(userEntity.getPhone())) {
return "redirect:/register?openid=" + openid; // 重定向到注冊接口
} else {
map.put("openid", openid);
return "/home"; // 打開首頁
}
}
@GetMapping("/register")
public String register(String openid, ModelMap map) {
map.put("openid", openid);
return "/upload"; // 我這里是打開上傳頁面,可根據(jù)自己業(yè)務(wù)需要實(shí)際來跳轉(zhuǎn)
}
@GetMapping("/success")
public String register() {
return "/success"; // 打開注冊成功頁面
}
}
二、部署服務(wù)器后網(wǎng)頁授權(quán)
準(zhǔn)備工具:
域名(已備案)、服務(wù)器、微信服務(wù)賬號
開始工作:
前往
https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=1840226221&lang=zh_CN
獲取公眾號開發(fā)信息

20190410113249.png
配置方法如測試賬號一樣配置
回調(diào)地址需要進(jìn)入 開發(fā)--接口權(quán)限--網(wǎng)頁授權(quán) 修改網(wǎng)頁授權(quán)域名

20190410123116.png
[個(gè)人服務(wù)器是用nginx代理,springboot項(xiàng)目部署服務(wù)器后使用一個(gè)端口,微信網(wǎng)頁授權(quán)驗(yàn)證需要一個(gè)域名,將該域名映射到springboot項(xiàng)目端口即可]
因?yàn)樯蟼魑募渲幂^繁瑣,我直接將驗(yàn)證的txt文件信息寫入到一個(gè)接口
@Controller
public class WXConntroller {
@GetMapping("/這里寫你txt文本名稱.txt") // 從微信網(wǎng)頁授權(quán)下載的txt的文件名稱
@ResponseBody
public String verify() {
return "返回txt文本內(nèi)容"; // 從微信網(wǎng)頁授權(quán)下載的txt的文件內(nèi)容
}
}
到此,配置完成后 使用測試賬號的代碼即可運(yùn)行
如果項(xiàng)目使用的是springboot,可以去github或者碼云上,搜微信授權(quán)對應(yīng)的項(xiàng)目,或者使用JustAuth