[Interconexión de terceros] 16. Wechat autoriza el inicio de sesión de terceros

La serie de artículos de la plataforma de terceros, hoy finalmente comenzó a actualizarse nuevamente, hoy continúan aprendiendo el inicio de sesión de terceros autorizado de Wechat (wechat)

1. Preparación

1. Solicite una cuenta de prueba pública de WeChat

Dado que somos desarrolladores individuales, debemos registrarnos y solicitar una cuenta de prueba para la plataforma pública de WeChat.

https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

Plataforma pública de microcanales
Después de iniciar sesión con el código de escaneo de WeChat, podemos obtener appID y appsecret

Gestión de números de prueba

2. Siga el número de prueba público

Número de prueba código QR

3. Configure el nombre de dominio de devolución de llamada

Busque "Cuenta web" en "Servicios web" y modifique el nombre de dominio de devolución de llamada de la interfaz "Autorización web para obtener información básica del usuario"

Modificar la información de la interfaz
Nombre de dominio de la página de devolución de llamada de autorización
Nota: decir aquí es que el nombre de dominio autorizado de devolución de llamada de la página web de configuración, generalmente acoplados con interfaces de terceros no son lo mismo, no complete la dirección completa de una devolución de llamada, sino el nombre de dominio de devolución de llamada, la dirección de devolución de llamada bajo el nombre de dominio

  • Por ejemplo :
    dirección de devolución de llamada: http://www.baidu.com/wechat/back y
    luego aquí: baidu.com

Los principiantes son generalmente fáciles de confundir aquí, una vez completada la configuración, haga clic en "confirmar"

2. Iniciar el desarrollo

1. Obtenga información de la aplicación

Escribiremos el appID y appsecret obtenidos en el archivo de configuración, mi proyecto SpringBoot aquí, lo puse en el archivo application.yml

Información de configuración

2. Introducir la dependencia de maven

<!-- 网络请求 -->
<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpclient</artifactId>
	<version>4.5.6</version>
</dependency>
<!-- alibaba的fastjson -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.51</version>
</dependency>

Aquí necesitamos usar solicitudes de red y la conversión de objetos JSON, así que presenté httpclient y fastjson, y el resto de las dependencias, preséntese

3. Obtenga la información de configuración de "wechat" del archivo de configuración

/**
 * 公众平台提供的 appid 和 appsecret
 */
@Value("${wechat.oauth.appid}")
public String APPID;
@Value("${wechat.oauth.appsecret}")
public String APPKEY;
@Value("${wechat.oauth.callback}")
public String URL;

4. Redirigir a la página de autorización

/**
 * 请求授权页面
 */
@RequestMapping("/auth")
public String token(HttpSession session) throws Exception {
    
    
    // 用于第三方应用防止CSRF攻击
    String uuid = UUID.randomUUID().toString().replaceAll("-", "");
    session.setAttribute("state", uuid);
	// Step1:获取Authorization Code
    String url = "https://open.weixin.qq.com/connect/oauth2/authorize?" +
            "appid=" + APPID +
            "&redirect_uri=" + URLEncoder.encode(URL) +
            "&response_type=code" +
            "&scope=snsapi_userinfo" +
            "&state=" + uuid +
            "#wechat_redirect";
    return PasswordUtils.redirectTo(url);
}
  • Los parámetros de Step1 se explican a continuación:
parámetro Tienes que Descripción
appid si El identificador único de la cuenta oficial.
redirect_uri si Dirección del enlace de devolución de llamada redirigida después de la autorización, utilice urlEncode para procesar el enlace
tipo_respuesta si Tipo de devolución, ingrese el código
alcance si Alcance de autorización de la aplicación, snsapi_base (no muestre la página de autorización, salte directamente, solo obtenga el openid del usuario), snsapi_userinfo (muestre la página de autorización, puede obtener el apodo, el género y la ubicación a través de openid. E incluso si no está prestando atención, Siempre que el usuario esté autorizado, se puede obtener la información)
estado No Después de la redirección, se traerá el parámetro de estado y los desarrolladores pueden completar el valor del parámetro de a-zA-Z0-9, hasta 128 bytes
#wechat_redirect si Ya sea para abrir directamente o para redireccionar la página 302, debe traer este parámetro

Página de autorización
En este momento, cuando visitemos, aparecerá la página de autorización

5. Devolución de llamada de autorización

/**
 * 授权回调
 */
@GetMapping(value = "/callback")
public void callback(HttpServletRequest request) throws Exception {
    
    
    HttpSession session = request.getSession();
    // 得到Authorization Code
    String code = request.getParameter("code");
    // 我们放在地址中的状态码
    String state = request.getParameter("state");
    String uuid = (String) session.getAttribute("state");

    // 验证信息我们发送的状态码
    if (null != uuid) {
    
    
        // 状态码不正确,直接返回登录页面
        if (!uuid.equals(state)) {
    
    
            return PasswordUtils.redirectTo("/login");
        }
    }

    // Step2:通过Authorization Code获取Access Token
    String url = "https://api.weixin.qq.com/sns/oauth2/access_token?" +
            "appid=" + APPID +
            "&secret=" + APPKEY +
            "&code=" + code +
            "&grant_type=authorization_code";
    JSONObject resJson = HttpRequestUtils.httpRequestGet(url);
    if (null == resJson) {
    
    
        return PasswordUtils.redirectTo("/login");
    }
    String accessToken = resJson.getString("access_token");
    String openId = resJson.getString("openid");
    if (StringUtils.isBlank(accessToken) || StringUtils.isBlank(openId)) {
    
    
        return PasswordUtils.redirectTo("/login");
    }

    url = "https://api.weixin.qq.com/sns/userinfo?" +
            "access_token=" + accessToken +
            "&openid=" + openId +
            "&lang=zh_CN";
    // Step3: 获取微信用户信息
    resJson = HttpRequestUtils.httpRequestGet(url);
    /**
     * TODO 这时就该写自己的业务逻辑了
     */
}
  • Los parámetros de Step2 se explican a continuación:
parámetro Tienes que Descripción
appid si El identificador único de la cuenta oficial.
secreto si Appsecret de la cuenta oficial
código si Complete los parámetros del código obtenidos en el primer paso
grant_type si Complete como código_autorización
  • Los parámetros de Step3 se explican a continuación:
parámetro Tienes que Descripción
access_token si Credenciales de llamada de la interfaz de autorización de la página web, nota: este access_token es diferente del access_token básico compatible
openid si ID único del usuario
lang si Regrese a la versión del idioma del país y la región, zh_CN simplificado, zh_TW tradicional, en inglés

6. Método de solicitud de red

El paso 2 y el paso 3 son métodos de solicitud GET

/**
 * GET 请求
 */
public static JSONObject httpRequestGet(String url) throws IOException {
    
    
    CloseableHttpClient client = HttpClients.createDefault();
    HttpGet httpGet = new HttpGet(url);
    HttpResponse response = client.execute(httpGet);
    HttpEntity entity = response.getEntity();
    if (entity != null) {
    
    
        String result = EntityUtils.toString(entity, "UTF-8");
        return JSONObject.parseObject(result);
    }
    httpGet.releaseConnection();
    return null;
}

3. Documentación

La dirección del documento para el inicio de sesión autorizado de WeChat es la siguiente:

https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

Cuatro, resumen

El proceso de autenticación de autorización se ajusta al proceso de autenticación básico de OAuth2. Para las aplicaciones, el proceso consta de dos pasos: obtener el Código de Autorización y obtener el Token de Acceso a través del Código de Autorización, como se muestra en la figura:

Autenticación de autorización OAuth

Si encuentra deficiencias en la lectura, ¡deje un mensaje! ! !

Supongo que te gusta

Origin blog.csdn.net/qq_40065776/article/details/109369262
Recomendado
Clasificación