一張圖說清微信網頁授權

在這裏插入圖片描述

個人覺得上圖描述已經很清晰。更多的可以參考:網頁授權獲取用戶基本信息
貼一下微信測試號和測試地址:微信測試號微信公衆平臺接口調試工具
下面貼下部分代碼:
依賴包:該依賴包裏面呢,有別人封裝好的一些方法,可以直接拿來用,如果不怕麻煩呢,也可以直接封裝。

		<dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-mp</artifactId>
            <version>${weixin-java-mp.version}</version>
        </dependency>

WxUserController.java

    @Autowired
    WxUtil wxUtil;
    @Autowired
    RedisTemplate redisTemplate;

    @ApiOperation(value = "用戶綁定服務",notes = "@auth liuwanli")
    @PostMapping("bind")
    public Result<WxUser> bind(@RequestBody WxUser user,HttpServletResponse response){
        WxUser wxUser = WxAuthUtil.getWxUserTemp();
        if(wxUser == null){
            return Result.fail("獲取用戶信息失敗");
        }
        //補充用戶填寫的信息
        wxUser.setUsername(user.getUsername());
        wxUser.setPhone(user.getPhone());
        wxUser.setIdCard(user.getIdCard());
        wxUser.setCreateTime(new Date());
        wxUser.setUpdateTime(new Date());
        getWxUserService().save(wxUser);
        WxAuthUtil.setWxUser(wxUser,redisTemplate,response);
        wxUser.setOpenid(null);
        WxAuthUtil.removeUserTemp();
        return Result.ok().setContent(wxUser);
    }

    @ApiOperation(value = "驗證用戶是否已經綁定服務",notes = "@auth liuwanli")
    @ApiImplicitParam(name = "code")
    @GetMapping("has/{code}")
    public Result<WxUser> hasBind(@PathVariable String code, HttpServletResponse response, HttpServletRequest request){
        WxUser wxUser =  wxUtil.getWxUser(code);
        //用openid查詢已綁定的用戶
        WxUser dbWxUser = getWxUserService().findByOpenId(wxUser.getOpenid());
        if(dbWxUser!=null){
            //已綁定,就返回用戶信息
            WxAuthUtil.setWxUser(dbWxUser,redisTemplate,response);
            wxUser.setOpenid(null);
            return Result.ok().setContent(wxUser);
        }else{
            //把微信用戶信息緩存一下,等下綁定服務用
            WxAuthUtil.setWxUserTemp(request,wxUser);
        }
        return Result.ok().setContent(wxUser);
    }
    @ApiOperation(value = "獲取微信授權路徑",notes = "@auth liuwanli")
    @GetMapping("authurl")
    public void authUrl(HttpServletResponse response) throws IOException {
        response.sendRedirect(wxUtil.getWxAuthUrl());
    }

WxUtil.java

@Component
@Configuration
@EnableConfigurationProperties(WxPushMsgConfig.class)
public class WxUtil {

    @Autowired
    WxMpService wxMpService;
    @Autowired
    WxUserService wxUserService;
    @Autowired
    WxAuthConfig wxAuthConfig;

    /**
     * 獲取微信授權路徑
     * @return
     */
    public String getWxAuthUrl(){
        return wxMpService.oauth2buildAuthorizationUrl(wxAuthConfig.getRedirect_uri(),wxAuthConfig.getScope(),wxAuthConfig.getState());
    }

    /**
     * 輸入微信給的code去拿用戶信息
     * @param code
     * @return
     */
    public WxUser getWxUser(String code){
        try {
            WxMpOAuth2AccessToken wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);
            WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken,null);
            WxUser user = new WxUser();
            user.setProvince(wxMpUser.getProvince());
            user.setSex(wxMpUser.getSex());
            user.setHeadimgurl(wxMpUser.getHeadImgUrl());
            user.setCity(wxMpUser.getCity());
            user.setOpenid(wxMpUser.getOpenId());
            user.setUsername(wxMpUser.getNickname());
            return user;
        } catch (WxErrorException e) {
            e.printStackTrace();
        }
        return null;
    }
}

另附上一個網絡穿透工具natapp,可以用來測試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章