Colección de citas famosas - Colección de consignas - Separe el front-end y el back-end y obtenga la autorización de la página web de WeChat.

Separe el front-end y el back-end y obtenga la autorización de la página web de WeChat.

¿Método front-end

Función GetRequest()

? {

? var url = ubicación.búsqueda? //Obtener "?" en la URL. ¿Cadena tras operador?

? var la solicitud = nuevo Objeto();

? if (url.indexOf("?) != -1)

?{

?var str = URL . substr(1);

?strs = str . dividir(amp;);

? para(var I = 0; i ltstrs . longitud; i) ? ]]= unescape(strs[I]). split(" = "[1]);

?}

?}

?Solicitud de devolución;

?}

Si (!GetRequest().call){

? p>

? URL: "/API/test",

? Escriba: "obtener",

? Éxito: función(datos){

console.log(datos)

ventana. ubicación .href = datos;

},

Error: función (xhr) {

console.log(xhr)

? }

});

} En caso contrario {

?

llamar);

? }

Devolución de llamada de función(){

? $.ajax({

?URL: "/API/UserList",

?Tipo: "Obtener",

?Éxito: Función(datos) {

console.log(JSON.parse(data))

},

Error: función (xhr){

console.log(xhr)

? }

});

? ¿Devolver falso

? }

?

Controlador de índice

lt? Lenguaje de programación del lado del servidor (abreviatura de Preprocesador de hipertexto profesional)

Espacio de nombres app\api\controller

Usando app\BaseController

Usando lib\Character

Usar think\facade\Db

Usar think\request;

Usar \Firebase\JWT\JWT;

Usar app\repository\WxService

Índice de clase

{

Prueba de función pública(solicitud $solicitud){

$ código = $solicitud-gt;param( );

Error (1);

encabezado(' Tipo de contenido: texto/html; conjunto de caracteres = utf-8 ');

$appid? = ' wxd 4 BCD 8 b 1ab 028596 ';

$ appKey = ' 7 db 30 a 7 BD 9750 E3 D4 c 1be 405 ea 37 b 919 ';

$wxPay? = nuevo WxService($appid,$appKey);

$datos? = $ wx pay- gt; obtener OpenID();

redis()- gt('WeChat', 'data', json_encode($data, true)); >if (array_key_exists('código ', $código)) {

//Obtener openid

$ wechatInfo = redis()- gt;'WeChat', 'datos' );

$WeChat info = JSON_decode($WeChat info);

//Obtener información del usuario

$ usuario = $ wx pay- gt; $datos['openid'], $datos['access_token']);

redis()-gt('WeChat', 'usuario', json_encode($usuario, true ));

//Obtener el nombre del dominio de devolución de llamada

$ URL = redis()- gt('WeChat', 'Callback');

redis(); ->hSet('WeChat', 'Juser', $RES);

$url = $url. ? código = '. $código['código']. estado del amplificador = '.

$código['estado']. " ampcall = callback()"

return " ltscript gtwindow . ubicación . href = ' { $ URL } ' lt; /script >

Salir;

} De lo contrario {

$ URL = getall headers()['Referer'];

redis()-gt; hSet('WeChat', 'Callback', $URL);

redis()-gt; hSet('WeChat', 'URL', json_encode($data, true));

Devuelve JSON($data);

}

}

}

curl

Función geturl($url){

$ header array = array("Tipo de contenido: aplicación/JSON;", "Aceptar: aplicación/JSON");

$ ch = curl_init();

curl_setopt($ch , CURLOPT_URL, $URL);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HTTPHEADER, $matriz de encabezados

$ salida = curl _ exec($ ch);

curl_close($ch);

$salida = json_decode($salida, verdadero);

devuelve $salida

}

Una forma de obtener información de WeChat

Lenguaje de programación del lado del servidor (abreviatura de Preprocesador de hipertexto profesional)

Aplicación de espacio de nombres \ repositorio

Usando think\facade \Db

Clase WxService

{

protected$appid

protected$ appKey

public $data = null

Función pública_ _construct($appid, $appKey)

{

$ this- gt;appid? = $ appid // El APPID de la cuenta oficial de WeChat correspondiente a la aplicación de pago de WeChat.

$ this- gt; appKey = $ appKey// La clave de aplicación de la cuenta oficial de WeChat correspondiente a la aplicación de pago de WeChat.

}

/**

*Obtiene el openid del usuario mediante jump. El proceso de salto es el siguiente:

* 1. Establezca parámetros como la URL a la que se debe devolver la llamada y salte al servidor WeChat/connect/oauth2/authorize.

* 2. Una vez procesado el servicio WeChat, volverá a la dirección de redirección_uri del usuario, lo que traerá algunos parámetros, como el código.

*

* @Devuelve el openid del usuario.

*/

Función pública GetOpenid()

{

//Obtener openid a través del código

Si (!isset($ _ GET[' code ']){

//Activar código de retorno de WeChat.

$ URL base = $ this- gt; getCurrentUrl();

$URL = $this-gt;_ _ CreateOauthUrlForCode($base URL);

Devolver $url

exit();

} De lo contrario {

//Obtener código para obtener openid

$code? = $_GET[' code '];

$ OpenID = $ this- gt;getopenidfromp($code);

Devolver $openid

}

}

Función pública getCurrentUrl()

{

$ esquema = $ _ SERVIDOR[' HTTPS ']= 'on'? " .$ bizString

}

/* *

* Construya una conexión URL para obtener el código

* @param string $redirectUrl Servidor WeChat, la codificación de la URL debe perderse

* @. return devuelve la URL construida

*/

Función privada_ _ CreateOauthUrlForCode($ redirigirUrl)

{

$ URL obj[" appid "]= $this- gt;appid

$urlObj["redirect_uri"]? = " $ redirigirUrl

$ URL obj[" Response_type "] = " código ";

$ URL obj[" alcance "]= " snsapi _ userinfo ";

$ URL obj[" ESTADO "]= " ESTADO ";

$bizString ? = $this->ToUrlParams($URL obj);

return "/connect/oauth 2/authorize? ".$ bizString

}

/**

*Cadena de firma de puntada

* @ param array$URL obj

* @return devuelve la cadena concatenada

*/

Función privada ToUrlParams($urlObj)

{

$ buff =

foreach($ URL obj as $ k = gt; $v) {

if ($k!= "signo") {

$ pulir. = $k "=".

"amp;;

}

}

$buff = trim($buff, "amp);

return $buff

}

/**

*Obtener información del usuario

* @param string $openid llama a la interfaz de información del usuario de acceso de autorización de la página web para Obtenga el openid del usuario en la cuenta oficial de WeChat.

* @return string

*/

Función pública getUserInfo($openid, $access_token)

{

$ respuesta = self::curl get('/SNS/userinfo?access_token= '.$access_token.ampopenid= '.$openid.amplang=zh_CN');

Devuelve json_decode( $respuesta, true);

}

Función estática pública curlGet($url = ' ', $options = array())

{

$ch = curl_init($URL);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_TIMEOUT, 30);

if (!empty($options)) {

curl_setopt_array($ch, $options);

}

//https La solicitud no se verifica el certificado y el host.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, falso);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, falso

$ datos = curl _ exec($ ch); );

curl_close($ch);

Devolver $datos

}

Función estática pública curlPost($url = ' ' , $postData = ' ', $opciones = array())

{

if (is_array($postData)) {

$ postData = http_build_query( $postData);

}

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $URL

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $ datos de publicación);

curl_setopt($ch, CURLOPT_TIMEOUT, 30); //Establece el número máximo de segundos permitidos para la ejecución de cURL.

if (!empty($opciones)) {

curl_setopt_array($ch, $opciones

}

// Las solicitudes https no verifican el certificado ni el host.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, falso);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, falso

$ datos = curl _ exec($ ch); );

curl _ close($ ch);

Devolver $ datos

}

}