微信授權獲取使用者的openid

含光。發表於2020-12-10

有了微信授權才能獲取openid,有了openid才能進行後面的操作,對於某個小程式或者公眾號,使用者的openid是唯一的

獲取openid的兩種方式

  • 手工方式
  • 利用第三方SDK

註冊使用內網穿透工具natapp

內網穿透工具就是一個對映,他能將二級域名與本地ip埠耗對應起來,即你訪問任何一個都ok,用於微信開發除錯很方便

https://natapp.cn/ 購買隧道,推薦VIP_1型,然後註冊二級域名,注意要購買支援微信開發的域名,填寫到介面測試號的網頁授權獲取使用者基本資訊中,配置隧道的二級域名和埠號(8080)。到現在你大概花了十幾塊錢吧,不過沒關秀,知識是無價的,都是為了學習嘛。
下載程式,命令列執行natapp.exe -authtoken=xxx ,成功後顯示如下介面,你的每次請求也都會展示在介面上
在這裡插入圖片描述

第一步:進入官方文件,申請介面測試號

https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Requesting_an_API_Test_Account.html
  • appID是公眾號的唯一識別符號

  • appsecret是你的金鑰

掃描測試號二維碼–>找到網頁服務–>網頁賬號–>網頁授權獲取使用者基本資訊–>填寫你的二級域名

官方文件–>微信網頁開發–>網頁授權

複製提供的引導連結,寫上自己的appid和redirect_uri以及scope

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx6640a7f5b82ebd37&redirect_uri=http://coder-zrl.nat100.top/sell/weixin/auth&response_type=code&scope=snsapi_base&state=123#wechat_redirect

第二步:獲取使用者code

寫一個controller

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
@RequestMapping("/weixin")
public class WeixinController {
    @GetMapping("/auth")
    public void auth(@RequestParam("code") String code) {
        log.info("進入了auth方法");
        log.info("【獲取code】code={}",code);
    }
}

第三步:通過code獲取access_token

url的引數官方文件都有詳細說明

https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx6640a7f5b82ebd37&secret=85cf924b23a717e12caf329150b988c9&code=CODE&grant_type=authorization_code

返回值是json資料,裡面包含openid,具體每個變數什麼意義官方文件也有說明

{
  "access_token":"ACCESS_TOKEN",
  "expires_in":7200,
  "refresh_token":"REFRESH_TOKEN",
  "openid":"OPENID",
  "scope":"SCOPE" 
}

使用Spring的模板進行url訪問,就是在上面的controller再加上下面的程式碼

我寫了一個WeixinDTO和上面的欄位一致,用來獲取openid

import com.example.sell.dto.WeixinDTO;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@Slf4j
@RestController
@RequestMapping("/weixin")
public class WeixinController {
    @GetMapping("/auth")
    public void auth(@RequestParam("code") String code) {
        log.info("進入了auth方法");
        log.info("【獲取code】code={}", code);
        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APPSECRET&code=" + code + "&grant_type=authorization_code";
        //Spring提供了一個簡單便捷的模板類實現java程式碼訪問restful服務
        //get是指呼叫get方法,object是我們要轉化成的型別
        RestTemplate restTemplate = new RestTemplate();
        String response = restTemplate.getForObject(url, String.class);
        log.info("response={}",response);
        Gson gson = new Gson();
        WeixinDTO data = gson.fromJson(response,WeixinDTO.class);
        log.info("openid={}",data.getOpenid());
    }
}

相關文章