Java realiza el inicio de sesión y la autorización del código de escaneo de WeChat

Escriba una función de inicio de sesión de terceros (versión web) de WeChat. El terminal móvil está autorizado. Preste atención a la diferencia entre los dos. He visto muchos documentos y documentos oficiales de desarrollo. Finalmente realizada esta función, lo siguiente es el código y el proceso.
1. Primero, debemos solicitar una aplicación de sitio web en la plataforma abierta de WeChat.
Seleccionar desarrollo de aplicaciones de sitios web
Elija Crear aplicación
Tenga en cuenta que esto es una tarifa (no lo piense, es imposible que la interfaz de WeChat sea una prostituta)
. Después de la solicitud, habrá un appid y una clave para guardar., Y luego necesitamos configurar nuestro dominio de devolución de llamada (esto es una cadena, no agregue http || protocolo https). Una vez completada la configuración, puede desarrollarla (para principiantes, puede solicitar un número de prueba y probar el enlace de la aplicación: https: //mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login para probar)

Código de front-end:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>微信登录</title>
	</head>
	<body>
		<div onclick="dianji()">微信登录</div>
		
		<div  id="login_container">

		</div>
	</body>
		//实现二维码 就要引入这个js样式,如果是上线的话,需要把这个js下载下来引入
	<script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>  
       //jquery文件引入
	<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
	</html>

código js:

function dianji() {
    
    
var obj = new WxLogin({
    
    
		       self_redirect:true,
		       id:"login_container", //要与你在那里生成二维码的div id 一致
		       appid: "appid", //你申请的appid
	           scope:"snsapi_login,snsapi_userinfo",//你的权限
               redirect_uri:encodeURIComponent("你自己配置的回调地址"),//url要进行encodeURIComponent编码
               state: "STATE",//微信官方接口为了防止跨域攻击要加的参数 可以自己定义
               style: "black",//样式
               href: ""//可以引入你自己的样式 注意这个只能是网络中的
       });
       }

Código de back-end:

public class WxLoginController{
    
    
	@Autowired
	private WxLoginService wxLoginService;
	@RequestMapping(value = "/MessageController/get_weiXingInformation", method=RequestMethod.GET)
	@ResponseBody
	public String wxLogin(@RequestParam("code") String code,@RequestParam("wzid") Integer wzid,@RequestParam("mid") Integer mid,@RequestParam("wzUrl") String wzUrl,@RequestParam("stafftoken") String stafftoken,HttpServletResponse res) throws IOException{
    
    
		
		if (code==null) {
    
    
			return ResultJsonData.resultFailed("请扫码");
		}
		
		if (wzid==null||wzUrl==null||mid==null||stafftoken==null) {
    
    
			
			return ResultJsonData.resultFailed("请查看参数: id="+wzid+",      分享者id="+mid+",        文章唯一标识id参数="+stafftoken);
		}
		//向第三方微信发送的url
		String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=appid&secret=密钥&code="+code+"&grant_type=authorization_code";
		JSONObject jsonObject = this.httpGet(url);//向第三方发送请求
		String accesstoken = jsonObject.getString("access_token"); // 获取微信开放平台票据号
	    String refreshtoken = jsonObject.getString("refresh_token");//获取微信开放平台的刷新token
	    String openId = jsonObject.getString("openid");  // 获取登录微信的唯一凭证号
	    url="https://api.weixin.qq.com/sns/userinfo?access_token="+accesstoken+"&openid="+openId;  // 该url用于从微信那里获取用户数据
	    jsonObject = this.httpGet(url);//向第三方发送请求
	    Visitor visitor = new Visitor(); //创建微信用户对象  用于存储
	  //根据key获取jsonObject对象并转换为String类型并存储到Visitor对象中  主要用于添加wx用户
	    visitor.setOpenid(jsonObject.getString("openid").toString());//用户的标识
	      visitor.setNickname(jsonObject.getString("nickname").toString());//用户名称
	      visitor.setSex(jsonObject.getString("sex").toString());//用户性别
	      visitor.setProvince(jsonObject.getString("province").toString());//用户省份
	      visitor.setCity(jsonObject.getString("city").toString());//用户城市
	      visitor.setCountry(jsonObject.getString("country").toString());//用户国家
	      visitor.setHeadimgurl(jsonObject.getString("headimgurl").toString());//用户头像
	      visitor.setPrivilege(jsonObject.getString("privilege").toString());//用户特权信息
	      visitor.setUnionid(jsonObject.getString("unionid").toString());//用户唯一身份
	      visitor.setAccesstoken(accesstoken);//用户交换的token
	      visitor.setRefreshtoken(refreshtoken);//用来刷新token的凭证
	      Visitor wxUser = wxLoginService.getWxUser(visitor.getUnionid());//向数据查询是否有这个微信用户
	      if (null!=wxUser) {
    
    
			//查询到了有这个用户  但是依然要更新信息  unionid 是不变的
	    	int add =  wxLoginService.updateWxUserByUnionid(wxUser);
	    	if (add>0) {
    
    
	    		System.out.println("有这个用户"+wzUrl+"&unionid="+wxUser.getUnionid()+"&stafftoken="+stafftoken);
	    		//重定向我的原Url 并携带参数  unionid 是微信的唯一ID  wzid 是文章的D  stafftoken 是文章的标识
	    		res.sendRedirect(wzUrl+"&unionid="+wxUser.getUnionid()+"&stafftoken="+stafftoken+"&id="+wzid);	
			  return ResultJsonData.resultFailed("wx用户修改成功");
			}else {
    
    
				System.out.println(wzUrl+"&unionid="+wxUser.getUnionid()+"&stafftoken="+stafftoken+"&id="+wzid);
				//重定向我的原Url 并携带参数  stafftoken 是文章的标识
				res.sendRedirect("有这个用户失败"+wzUrl);
				return ResultJsonData.resultFailed("wx用户修改失败");
			}   	
		}else {
    
    
			//没有查询到这个用户  向数据库里添加一个微信用户
			int addWxUser = wxLoginService.addWxUser(visitor);
			if (addWxUser>0) {
    
    
				System.out.println("成功加入用户"+wzUrl+"&unionid="+wxUser.getUnionid()+"&stafftoken="+stafftoken);
				//重定向我的原Url 并携带参数  unionid 是微信的唯一ID  wzid 是文章的ID  stafftoken 是文章的标识
				res.sendRedirect(wzUrl+"&unionid="+wxUser.getUnionid()+"&stafftoken="+stafftoken+"&wzid="+wzid);
				 return ResultJsonData.resultFailed("wx用户添加成功");
			}else {
    
    
				System.out.println("加入用户失败"+wzUrl+"&unionid="+wxUser.getUnionid()+"&stafftoken="+stafftoken);
				//重定向我的原Url 并携带参数  stafftoken 是文章的标识
				res.sendRedirect(wzUrl);
				return ResultJsonData.resultFailed("wx用户添加失败");
			}
			
		}
	  }    
	}

Autorización de WeChat

== Explicación de la autorización de WeChat: en comparación con el desarrollo empresarial, necesitamos solicitar una cuenta oficial o una cuenta de suscripción (preferiblemente una cuenta oficial). Lo que necesitamos son Appid y secret. Si ha desarrollado una aplicación de sitio web en WeChat, abra plataforma, debe vincular nuestra aplicación a la cuenta oficial y vincularla a la aplicación de nuestro sitio web. Esto significa que si está utilizando el inicio de sesión de WeChat en mi aplicación y autorizando su ID de unión de WeChat es el único representante que la misma persona no necesita ser agregado al usuario Si no está vinculado a la tabla, el tercero de WeChat no le devolverá el identificador de unión del identificador de unión. Este campo representa que este campo es exclusivo del desarrollador (para decirlo simplemente, la cuenta oficial de WeChat y un La aplicación del sitio web o varias aplicaciones del sitio web son nuestras, lo que significa que ha utilizado una de las aplicaciones de mi sitio web, entonces su unionid es el único en mis otras aplicaciones de sitios web y cuentas oficiales. Solo dígame otras aplicaciones bajo mi nombre. Esta persona tiene una cuenta, no es necesario registrarse) == Para obtener una
explicación relacionada, puede ir al documento oficial: plataforma pública WeChat

Código de front-end autorizado: solo necesitamos redirigir a la dirección de nuestro tercero WeChat para usar el appid que solicitamos

Paso 1: el usuario acepta la autorización y obtiene el código

window.location.href=https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
Luego, aparecerá la página de autorización y seleccionará el permiso para enviar una solicitud al tercero de WeChat. Después de verificar que sus parámetros no son un problema, el tercero de WeChat saltará a la dirección de devolución de llamada que configuramos y llevará el parámetro de código.

Paso 2: intercambie el código para la autorización web access_token

Envíe una dirección URL de solicitud a un tercero de WeChat a través de java: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

lista de parámetros:

Campo de parámetro Descripción de parámetros
appid La aplicación que solicitó
secreto La clave que solicitó
grant_type Debe ser código_autorización
código Parámetros llevados cuando WeChat salta a la dirección de devolución de llamada

Parámetros de retorno:

parámetro descripción
access_token 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
expira en Tiempo de espera de la credencial de llamada de la interfaz de Access_token, unidad (segundos)
refresh_token Actualización de usuario access_token
openid El ID único del usuario. Tenga en cuenta que cuando el usuario visita la página web de la cuenta oficial sin seguir la cuenta oficial, también se generará un OpenID exclusivo para el usuario y la cuenta oficial.
alcance El alcance de la autorización del usuario, separado por comas (,)

Paso 3: extraiga la información del usuario (el alcance necesario es snsapi_userinfo)

Envíe una dirección URL de solicitud a un tercero de WeChat a través de java: https://api.weixin.qq.com/sns/userinfo?access_token=the access_token que obtuvo & openid = the openid que obtuvo & lang = la versión de idioma del país y la región para ser devuelto (chino simplificado zh_CN simplificado, zh_TW tradicional, en inglés)
Parámetros de retorno:

parámetro descripción
openid ID único del usuario
apodo Apodo del usuario
sexo El género del usuario, cuando el valor es 1, es masculino, cuando el valor es 2, es femenino, y cuando el valor es 0, se desconoce
provincia Provincia rellenada en el perfil de usuario
ciudad Ciudad completada por datos personales del usuario general
país País, como China es CN
headimgurl Avatar de usuario, el último valor representa el tamaño del avatar cuadrado (hay valores opcionales de 0, 46, 64, 96, 132 y 0 representa un avatar cuadrado de 640 * 640). Cuando el usuario no tiene avatar, este el artículo está vacío. Si el usuario cambia el avatar, la URL del avatar original no será válida.
privilegio Información de privilegios de usuario, matriz json, por ejemplo, el usuario de WeChat Woka es (chinaunicom)
sindicatos Este campo solo aparecerá después de que el usuario vincule la cuenta oficial a la cuenta de la plataforma abierta de WeChat.

El cuarto paso: guardar en la base de datos y usar el objeto para pasar (la implementación específica depende de usted)

Supongo que te gusta

Origin blog.csdn.net/weixin_51591918/article/details/111993806
Recomendado
Clasificación