史上最簡單:springboot對接微信授權(quán)登錄接口

請求的整體流程

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

填寫好回調(diào)域名后yum配置如圖:
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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容