Maison  >  Article  >  développement back-end  >  PHP implémente le développement de l'autorisation de connexion à la page Web WeChat

PHP implémente le développement de l'autorisation de connexion à la page Web WeChat

不言
不言original
2018-04-19 15:26:4714592parcourir

Cet article présente principalement la mise en œuvre du développement d'autorisations de connexion aux pages Web WeChat avec PHP. Il a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

WeChat ouvert. plate-forme et le public Différences entre les plates-formes

1. Les plates-formes publiques sont destinées aux utilisateurs ordinaires, tels que les auto-médias et les médias, et sont utilisées par les opérateurs de comptes publics officiels d'entreprise WeChat. L'équipe ou l'entreprise a la force de développer du contenu peut également appeler des interfaces dans la plate-forme publique, telles que des menus personnalisés, des réponses automatiques et des fonctions de requête. À l'heure actuelle, la plupart des WeChat le font après avoir obtenu la certification.

mp.weixin.qq.com


2. La plateforme ouverte est destinée aux développeurs et aux développeurs de logiciels tiers indépendants. Je pense que la plus grande ouverture de la plateforme de développement est la connexion WeChat. À cette époque, Tencent n'a pas fait de gros efforts pour mettre en œuvre une connexion unifiée. En conséquence, chaque site Web doit désormais développer un mécanisme de connexion. Heureusement, ils comprennent désormais la situation. Les développeurs ou développeurs de logiciels, grâce à la plate-forme et à l'interface fournies par WeChat, peuvent développer des sites Web de commerce électronique adaptés aux entreprises, scanner le code QR pour accéder à une interface de jeu, puis acheter des produits. Bien entendu, la plate-forme ouverte ultérieure ouvrira l'interface de paiement, afin que les développeurs de logiciels tels que Pocket Tong puissent fournir des services et des logiciels tels que les magasins WeChat aux grandes, petites et moyennes entreprises.

open.weixin.qq.com

La plateforme publique est le backend de gestion et de développement des comptes d'abonnement aux comptes de service.

Pour faire simple, la plateforme de développement consiste à réaliser le partage en un clic du contenu du logiciel installé dans le téléphone mobile avec le cercle d'amis

Le tiers suivant ; la connexion repose sur la plateforme ouverte (open.weixin.qq.com) Fonctions

Travail de préparation

Application de site Web La connexion WeChat est un système de connexion autorisé WeChat OAuth2.0 construit basé sur la norme de protocole OAuth2.0.

Avant d'effectuer WeChat OAuth2. Avant d'effectuer la connexion et l'accès autorisés à WeChat OAuth2.0, enregistrez un compte de développeur sur la plate-forme ouverte WeChat, disposez d'une application de site Web approuvée et obtenez l'AppID et l'AppSecret correspondants. connectez-vous et réussissez l’examen, vous pouvez démarrer le processus d’accès.

Description du processus d'autorisation

La connexion autorisée WeChat OAuth2.0 permet aux utilisateurs de WeChat d'utiliser leur identité WeChat pour se connecter en toute sécurité à des applications ou à des sites Web tiers, et l'utilisateur WeChat autorise à se connecter à les tiers qui ont accédé à WeChat OAuth2.0 Après l'application, le tiers peut obtenir les informations d'identification d'appel de l'interface utilisateur (access_token) et utiliser le access_token pour appeler l'interface de relation d'autorisation de la plate-forme ouverte WeChat, obtenant ainsi les informations ouvertes de base des utilisateurs de WeChat et aider les utilisateurs à réaliser les fonctions ouvertes de base.

La connexion autorisée WeChat OAuth2.0 prend actuellement en charge le mode authorisation_code, qui convient à l'autorisation d'application côté serveur. Le processus global de ce modèle est le suivant :

1. Le tiers lance une demande de connexion d'autorisation WeChat Une fois que l'utilisateur WeChat autorise l'autorisation de l'application tierce, WeChat lancera l'application ou redirigera vers le tiers. site Web du parti et apportez le paramètre de code de ticket temporaire d'autorisation

2. Ajoutez AppID et AppSecret via le paramètre de code et échangez access_token via l'API ;

Obtenir le diagramme de séquence access_token :


Étape 1 : demander le CODE
Autorisation d'application de site Web d'utilisation par un tiers avant en vous connectant, veuillez noter que vous avez obtenu la portée d'autorisation de la page Web correspondante (scope=snsapi_login), vous pouvez ouvrir le lien suivant sur le PC :
https://open.weixin.qq.com/connect/qrconnect? appid=APPID&redirect_uri= REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect


S'il apparaît "Le lien n'est pas accessible", veuillez vérifier si les paramètres sont mal renseignés. Par exemple, le nom de domaine de redirect_uri est incohérent. avec le nom de domaine autorisé renseigné lors de l'examen ou la portée n'est pas snsapi_login.

appid est L'identifiant unique de l'applicationredirect_uri est L'adresse de redirection doit être UrlEncoderesponse_type est Remplissez le codeportée est Portée d'autorisation de l'application. Si vous avez plusieurs portées, séparez-les par des virgules (, Pour les applications Web, il vous suffit actuellement de renseigner snsapi_loginindiquer.
Paramètre

Est-ce nécessaire

Description

Non

permet de maintenir le statut de la demande et du rappel, et de le ramener au tiers tel quel après avoir autorisé la demande. Ce paramètre peut être utilisé pour empêcher les attaques CSRF (attaques de falsification de requêtes intersites). Il est recommandé aux tiers d'apporter ce paramètre. Il peut être défini sur un simple nombre aléatoire plus une session pour vérification

Description du paramètre
Description du retour

Une fois que l'utilisateur a autorisé l'autorisation, il sera redirigé vers l'URL redirect_uri, avec les paramètres de code et d'état

redirect_uri?code=CODE&state=STATE

Si l'utilisateur interdit l'autorisation, le paramètre code ne sera pas porté après la redirection, seul le paramètre state sera porté

redirect_uri?state=STATE

Demande exemple

Connectez-vous à l'application du site Web Yihaodian

https://passport.yhd.com/wechat/login.do

Après ouverture, le Yihaodian générera l'état paramètre et accédez à
https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https%3A%2F%2Fpassport.yhd.com%2Fwechat%2Fcallback.do&response_type=code&scope= snsapi_login&state= 3d6be0a4035d839573b04816624a415e#wechat_redirect

https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https%3A%2F%2Fpassport.y hd.com%2Fwechat%2 Fcallback.do&response_type=code&scope=snsapi_login&state =eb407f95fbc413185209fd85931761c2#wechat_redirect

Une fois que les utilisateurs de WeChat ont scanné le code QR à l'aide de WeChat et confirmé la connexion, le PC passera à

https://passport.yhd.com /wechat/callback.do ?code=CODE&state=3d6be0a4035d839573b04816624a415e

La deuxième façon d'obtenir le code permet au site Web d'intégrer le code QR de connexion WeChat dans sa propre page, et l'utilisateur utilise WeChat pour scanner le code pour autorisation. Renvoyez ensuite le code au site Web via JS.

L'objectif principal de la connexion JS WeChat : le site Web espère que les utilisateurs pourront terminer la connexion sur le site Web sans accéder au domaine WeChat pour se connecter puis revenir, afin d'améliorer la fluidité et le taux de réussite de Connexion WeChat. Comment implémenter JS pour la connexion WeChat par code QR intégrée au site Web :

Étape 1 : Introduisez d'abord le fichier JS suivant dans la page (https est pris en charge) :

e98a644783ae9ff405b61b4d9d2c25b32cacc6d41bbb37262a98f745aa00fbf0

Étape 2 : Instance de l'objet JS suivant où la connexion WeChat est requise :
   varobj = new WxLogin({
                            id:"login_container", 
                            appid: "", 
                            scope: "", 
                            redirect_uri: "",
                            state: "",
                            style: "",
                            href: ""
                          });

参数

是否必须

说明

id

第三方页面显示二维码的容器id

appid

应用唯一标识,在微信开放平台提交应用审核通过后获得

scope

应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login即可

redirect_uri

重定向地址,需要进行UrlEncode

state

用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验

style

提供"black"、"white"可选,默认为黑色文字描述。详见文档底部FAQ

href

自定义样式链接,第三方可根据实际需求覆盖默认样式。详见文档底部FAQ

Paramètres

Est-ce nécessaire

Description

l'identifiant est L'identifiant du conteneur du code QR affiché sur la page tierce appid est L'identification unique de la candidature est obtenue après avoir soumis la candidature pour examen sur la plateforme ouverte WeChat portéeOui Portée de l'autorisation de l'application, avec plusieurs portées séparées par des virgules (,), les applications Web n'ont actuellement qu'à remplir snsapi_loginredirect_uri est l'adresse de redirection , qui nécessite UrlEncode state Non aux tiers. Ce paramètre peut être utilisé pour empêcher les attaques CSRF (attaques de falsification de requêtes intersites). Il est recommandé aux tiers d'apporter ce paramètre. Il peut être défini sur un simple nombre aléatoire plus une session pour vérification . styleNon fournit les options "noir" et "blanc", et la valeur par défaut est le noir description textuelle. Pour plus de détails, veuillez consulter la FAQ au bas du document Définir les liens de style, et des tiers peuvent remplacer le style par défaut en fonction des besoins réels. Pour plus de détails, veuillez consulter la FAQ en bas du document
Description du paramètre
Étape 2 : Obtenez le jeton d'accès via le code

Obtenez le jeton d'accès via le code

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

Description du paramètre
tr>

参数

是否必须

说明

appid

应用唯一标识,在微信开放平台提交应用审核通过后获得

secret

应用密钥AppSecret,在微信开放平台提交应用审核通过后获得

code

填写第一步获取的code参数

grant_type

填authorization_code

Paramètres

Est-ce nécessaire

{ &lt;br&gt;"access_token":"ACCESS_TOKEN", &lt;br&gt;"expires_in":7200, &lt;br&gt;"refresh_token":"REFRESH_TOKEN",<br>"openid":"OPENID", &lt;br&gt;"scope":"SCOPE","unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"}Description

参数

说明

access_token

接口调用凭证

expires_in

access_token接口调用凭证超时时间,单位(秒)

refresh_token

用户刷新access_token

openid

授权用户唯一标识

scope

用户授权的作用域,使用逗号(,)分隔

 unionid

只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。

appid

Oui

L'identification unique de la candidature est obtenue après avoir soumis la candidature pour examen sur la plateforme ouverte WeChat

secret{"errcode":40029,"errmsg":"invalidcode"}

est

La clé d'application AppSecret est obtenue après avoir soumis la demande pour examen sur la plateforme ouverte WeChat

code

est

Remplissez les paramètres de code obtenus lors de la première étape

grant_type

Oui

Remplissez le code_autorisation

Instructions de retour

Retour correct :

Description

Paramètres

参数

是否必须

说明

appid

应用唯一标识

grant_type

填refresh_token

refresh_token

填写通过access_token获取到的refresh_token参数

access_token

Identifiants d'appel de l'interface

expires_in

délai d'expiration du bon d'appel de l'interface access_token, unité (seconde)

refresh_token

Actualisation utilisateur access_token

openid

L'identifiant unique de l'utilisateur autorisé

scope

Portée de l'autorisation utilisateur, séparée par des virgules (,)

unionid

Ce champ n'apparaîtra qu'une fois que l'utilisateur aura lié le compte officiel au compte WeChat Open Platform.

Exemple de retour d'erreur : Actualiser la période de validité du jeton d'accèsaccess_token est l'identifiant d'appel pour appeler l'interface de relation d'autorisation. Étant donné que la période de validité de access_token (actuellement 2 heures) est courte, lorsque le access_token expire, vous pouvez utiliserfresh_token pour actualiser. Il existe deux résultats d'actualisation de access_token : <.>1. Si le access_token a expiré, l'exécution defresh_token obtiendra un nouveau access_token avec un nouveau délai d'attente 2. Si le access_token n'a pas expiré, l'exécution defresh_token ne modifiera pas le access_token, mais le délai d'attente le modifiera. être actualisé, ce qui équivaut à continuer. refresh_token a une longue période de validité (30 jours). Lorsquefresh_token expire, l'utilisateur doit le réautoriser. Méthode de requêteAprès avoir obtenu le code de la première étape, demandez le lien suivant pour rafraîchir_token : https://api.weixin.qq.com/sns/ oauth2/fresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKENDescription du paramètre

Paramètre

Est-il obligatoire

Description

appid

is

Appliquer un identifiant unique

grant_type

Oui

Remplissezfresh_token

refresh_token

Oui

Remplissez le paramètre rafraîchir_token obtenu via access_token
Instructions de retour

Retour correct :

{ &lt;br&gt;"access_token":"ACCESS_TOKEN", &lt;br&gt;"expires_in":7200, &lt;br&gt;"refresh_token":"REFRESH_TOKEN", &lt;br&gt;"openid":"OPENID", &lt;br&gt;"scope":"SCOPE" &lt;br&gt;}

Paramètres

参数

说明

access_token

接口调用凭证

expires_in

access_token接口调用凭证超时时间,单位(秒)

refresh_token

用户刷新access_token

openid

授权用户唯一标识

scope

用户授权的作用域,使用逗号(,)分隔

Description

access_token

Identifiants d'appel de l'interface

expires_in{"errcode":40030,"errmsg":"invalidrefresh_token"}

Délai d'expiration des informations d'identification de l'appel de l'interface Access_token, unité (seconde)

refresh_token

Actualisation de l'utilisateur access_token

openid

Identification unique des utilisateurs autorisés

portée

Portée autorisée par l'utilisateur, utilisez des virgules ( ,) séparés

Exemple de retour d'erreur :

Remarque :
1. Appsecret est la clé utilisée par l'interface de l'application. En cas de fuite, elle peut entraîner des conséquences à haut risque telles qu'une fuite de données d'application et une fuite de données utilisateur d'application. Lorsqu'elle est stockée sur le client, elle est très susceptible d'être volée de manière malveillante. (comme la décompilation pour obtenir l'Appsecret );
2. Le access_token est l'identifiant utilisé par l'utilisateur pour autoriser les applications tierces à lancer des appels d'interface (équivalent à l'état de connexion de l'utilisateur). le client. Une fuite de données utilisateur et des problèmes liés à l'utilisateur WeChat peuvent survenir après l'obtention malveillante du access_token. Des comportements tels que l'initiation malveillante des fonctions d'interface

3. Le rafraîchissement_token est un identifiant à long terme permettant aux utilisateurs d'autoriser un tiers. -applications tierces. Il n'est utilisé que pour actualiser le access_token, mais s'il est divulgué, cela équivaudra à une fuite du access_token, et le risque est le même que ci-dessus.

Il est recommandé de placer le secret et les données utilisateur (telles que access_token) sur le serveur cloud de l'application et d'appeler la demande via l'interface de transfert cloud.

授权作用域(scope)

接口

接口说明

snsapi_base

/sns/oauth2/access_token

通过code换取access_token、refresh_token和已授权scope

/sns/oauth2/refresh_token

刷新或续期access_token使用

/sns/auth

检查access_token有效性

snsapi_userinfo

/sns/userinfo

获取用户个人信息

Étape 3 : Appeler l'interface via access_tokenAprès avoir obtenu l'access_token, effectuez l'appel de l'interface avec les prérequis suivants : 1. Le access_token est valide et n'a pas expiré 2. L'utilisateur WeChat a autorisé la portée de l'interface (portée) correspondante du compte d'application tiers. Pour l'interface scope (scope), les interfaces qui peuvent être appelées sont les suivantes :

/sns/oauth2/refresh_token

Portée de l'autorisation

Interface

Description de l'interface

snsapi_base

/ sns/ oauth2/access_token

Code d'échange pour access_token,fresh_token et portée autorisée

Actualiser ou continuer Période access_token utilise

/sns/auth

Vérifier la validité du access_token

snsapi_userinfo td>

/sns/userinfo

Obtenir les informations personnelles de l'utilisateur td>

Parmi eux, snsapi_base appartient à l'interface de base. Si l'application dispose déjà d'autres autorisations de portée, elle aura les autorisations de snsapi_base par défaut. L'utilisation de snsapi_base peut permettre à l'autorisation de la page Web mobile de contourner l'action consistant à accéder à la page de connexion d'autorisation pour demander l'autorisation de l'utilisateur, et d'accéder directement à la page Web tierce avec le ticket temporaire d'autorisation (code), mais cela rendra l'autorisation de l'utilisateur autorisée. scope (scope) uniquement snsapi_base , ce qui entraîne l'impossibilité d'obtenir des données et des fonctions de base nécessitant l'autorisation de l'utilisateur.

F.A.Q
1. Qu'est-ce qu'un ticket d'autorisation temporaire (code) ?

Réponse : Un tiers doit utiliser le code pour obtenir le access_token. Le délai d'expiration du code est de 10 minutes. Un code ne peut échanger avec succès le access_token qu'une seule fois, puis il deviendra invalide. La nature temporaire et unique du code garantit la sécurité de la connexion autorisée à WeChat. Les tiers peuvent renforcer davantage la sécurité de leurs propres connexions autorisées en utilisant https et les paramètres d'état.

2. Quelle est la portée de l'autorisation ?

Réponse : la portée de l'autorisation (portée) représente les autorisations d'interface accordées par les utilisateurs à des tiers. Les applications tierces doivent demander à la plate-forme ouverte WeChat l'autorisation d'utiliser la portée correspondante, puis utiliser la méthode décrite. dans le document pour permettre aux utilisateurs d'autoriser. Après l'autorisation de l'utilisateur, l'interface ne peut être appelée qu'après avoir obtenu le access_token correspondant.

3. Quel est le rôle du champ de style dans le code JS de connexion WeChat avec un code QR intégré dans le site Web ?

Réponse : Le style de couleur de la page tierce peut être clair ou foncé. Si la page tierce a un fond clair, le champ de style doit fournir une valeur "noir" (ou ne pas la fournir, le noir est la valeur par défaut), puis le style de texte de connexion WeChat correspondant est noir. Les effets associés sont les suivants :

Si la valeur "blanc" est fournie, la description textuelle correspondante sera affichée en blanc, adapté aux fonds sombres. Les effets pertinents sont les suivants :

4. Quel est le rôle du champ href dans le code JS de connexion WeChat avec le code QR intégré dans le site Web ?

R : Si un tiers estime que le style par défaut fourni par l'équipe WeChat ne correspond pas à son propre style de page, il peut fournir son propre fichier de style pour remplacer le style par défaut. Par exemple, si un tiers estime que le code QR par défaut est trop volumineux, il peut fournir des fichiers de style CSS pertinents et renseigner l'adresse du lien dans le champ href

.impowerBox .qrcode {width:200px;}<br>.impowerBox .title {display: none;}<br>.impowerBox .info {width: 200px;}<br>.status_icon {displaynone}<br>.impowerBox .status {text-align: center;} 

Les effets associés sont les suivants :

Obtenir les informations personnelles de l'utilisateur (mécanisme UnionID)
Description de l'interface

Cette interface est utilisée pour obtenir des informations personnelles sur les utilisateurs. Les développeurs peuvent obtenir des informations utilisateur de base via OpenID. Il est particulièrement important de noter que si un développeur possède plusieurs applications mobiles, applications de site Web et comptes publics, l'utilisateur peut être distingué de manière unique en obtenant l'unionid dans les informations de base de l'utilisateur, car tant qu'il s'agit d'applications mobiles sous le même WeChat ouvert Compte de plateforme, applications de sites Web et comptes publics, l'identifiant syndical de l'utilisateur est unique. En d’autres termes, pour un même utilisateur, l’unionid est le même pour différentes applications sous la même plateforme ouverte WeChat.

Description de la demande

Méthode de requête http : GET

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

Description du paramètre
Instructions de retour

Résultat de retour Json correct :

{ &lt;br&gt;"openid":"OPENID",<br>"nickname":"NICKNAME",<br>"sex":1,<br>"province":"PROVINCE",<br>"city":"CITY",<br>"country":"COUNTRY",<br>"headimgurl":"http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",<br>"privilege":[<br>"PRIVILEGE1", &lt;br&gt;"PRIVILEGE2"<br>],<br>"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"<br><br>}

Paramètre

参数

是否必须

说明

access_token

调用凭证

openid

普通用户的标识,对当前开发者帐号唯一

Est-ce nécessaire

Description

access_token td >

Oui

Identifiants d'appel

openid

Oui

L'identification des utilisateurs ordinaires, unique au compte développeur actuel

Paramètres

参数

说明

openid

普通用户的标识,对当前开发者帐号唯一

nickname

普通用户昵称

sex

普通用户性别,1为男性,2为女性

province

普通用户个人资料填写的省份

city

普通用户个人资料填写的城市

country

国家,如中国为CN

headimgurl

用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空

privilege

用户特权信息,json数组,如微信沃卡用户为(chinaunicom)

unionid

用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。

Description

openid

L'identification des utilisateurs ordinaires, unique au compte développeur actuel

surnom{ &lt;br&gt;"errcode":40003,"errmsg":"invalid openid"<br>}

Surnom d'utilisateur normal

sexe

Sexe général de l'utilisateur, 1 est un homme, 2 est une femme td>

province

接口名

频率限制

通过code换取access_token

1万/分钟

刷新access_token

5万/分钟

获取用户基本信息

5万/分钟

Normal Province renseignée dans le profil utilisateur

ville

Ville renseignée par les informations personnelles des utilisateurs ordinaires

pays

Un pays comme la Chine est CN

headimgurl

Avatar de l'utilisateur, la dernière valeur représente la taille de l'avatar carré (0, 46 , 64, 96 , 132 les valeurs sont facultatives, 0 représente un avatar carré de 640*640), cet élément est vide lorsque l'utilisateur n'a pas d'avatar

privilège

Informations sur les privilèges utilisateur, tableau json, tel que l'utilisateur WeChat Woka est (chinaunicom)

unionid

Identification unifiée de l'utilisateur. Pour les applications sous un compte de plateforme ouverte WeChat, l'unionid du même utilisateur est unique.

Exemple de retour Json incorrect :Limite de fréquence d'appel

Nom de l'interface

Limite de fréquence

Échangez le code pour access_token

10 000/minute

tr>

Actualiser le jeton d'accès

50 000/minute

Obtenir des informations utilisateur de base

50 000/minute

代码示例:

第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;

通过code参数加上AppID和AppSecret等,通过API换取access_token;

通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

Login.php如下:

/*
返回  code state*/
$appid = 'wxea1xxxxxxxx20cb62';
$url = "https://open.weixin.qq.com/connect/qrconnect?appid=$appid&redirect_uri=http://zhiliaoke.com.cn/weixin.php&response_type=code&scope=snsapi_login&state=1&connect_redirect=1#wechat_redirect";

header('location:'.$url);

验证处理如下:

<?php
$code = $_GET['code'];
$state = $_GET['state'];//换成自己的接口信息
$appid = 'XXXXX';
$appsecret = 'XXXXX';
if (empty($code)) $this->error('授权失败');
 <br>
$token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code';
$token = json_decode(file_get_contents($token_url));
if (isset($token->errcode)) {
    echo '4a249f0d628e2318394fd9b75b4636b1错误:473f0a7621bec819994bb5020d29372a'.$token->errcode;
    echo '076402276aae5dbec7f672f8f4e5cc81c1a436a314ed609750bd7c7d319db4da错误信息:2e9b454fa8428549ca2e64dfac4625cd'.$token->errmsg;
    exit;
}
 <br>
$access_token_url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid='.$appid.'&grant_type=refresh_token&refresh_token='.$token->refresh_token;//转成对象
$access_token = json_decode(file_get_contents($access_token_url));
if (isset($access_token->errcode)) {
    echo '4a249f0d628e2318394fd9b75b4636b1错误:473f0a7621bec819994bb5020d29372a'.$access_token->errcode;
    echo '076402276aae5dbec7f672f8f4e5cc81c1a436a314ed609750bd7c7d319db4da错误信息:2e9b454fa8428549ca2e64dfac4625cd'.$access_token->errmsg;
    exit;
}
 <br>
 <br>
$user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token->access_token.'&openid='.$access_token->openid.'&lang=zh_CN';//转成对象
$user_info = json_decode(file_get_contents($user_info_url));
if (isset($user_info->errcode)) {
    echo '4a249f0d628e2318394fd9b75b4636b1错误:473f0a7621bec819994bb5020d29372a'.$user_info->errcode;
    echo '076402276aae5dbec7f672f8f4e5cc81c1a436a314ed609750bd7c7d319db4da错误信息:2e9b454fa8428549ca2e64dfac4625cd'.$user_info->errmsg;
    exit;
}
$rs =  json_decode(json_encode($user_info),true);//返回的json数组转换成array数组
//打印用户信息echo 'e03b848252eb9375d56be284e690e873';
 <br>
print_r($rs);echo 'bc5574f69a0cba105bc93bd3dc13c4ec';
 <br>
?>

 

微信第三方登录(静默授权和非静默授权)

用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。

微信的授权登录在日常应用中应用的非常广泛,越来越多的平台支持用户使用微信进行授权第三方登录

 使用微信授权登录有哪些优势/好处;

 1、用户量足够大,基本所有用户都会有微信,登录起来比较方便快捷;

 2、微信作为一个开放平台,为众多公众号/服务开放了许多服务接口,让公众号能够为自己的用户提供更加个性、更加优质的产品服务;

open id 和 union id ,这两个id有什么区别;

1、openid:在关注者与公众号产生消息交互后,公众号可获得关注者的openid,同一个用户,在不同公众号或移动应用下对应有不同open id标识;

2、union id:同一个用户,在不同公众号或移动应用下unionID相同;前提是,如若需要做多个公众号以及移动应用账户互通,得到唯一身份标识union id,则需要将多个公众号或移动应用在微信开放平台进行绑定,然后我们才能给拿到unionid;

所以,如果某个应用或者服务,有联合登录甚至多个公众应用多账户互通,可以采用union id来进行账户体系的用户识别与合并;即微信平台可以通过union id 来进行基于多个公众号之间的账户体系互通与识别合并;

 微信联合登录是怎么登录的,有几种登录方式;微信联合登录和微信授权登录【授权登录(非静默授权)与静默授权】

微信联合登录;也就是我们常用的微信移动端/PC端之间的扫码登录,PC端用微信扫码登录,微信移动端确认授权登录后,应用可以从微信拿到用户的open id或union id,将微信获取的用户信息与自己账户体系中的用户身份进行关联;

授权登录:需要用户确认登录,这样可以通过用户的个人确认,获取用户全面的信息,无论是否关注相关微信公众号等都可以获取。

静默授权不需要用户确认,只需要用户访问某个网页,属于嵌套在普通网页里的授权形式,但是只能获取到用户的唯一标示openid和union id,无法拿到用户的微信头像、微信名称等个人信息,对于用户的简单认证还是很有用的。

如何通过微信账户体系来做多应用、多平台之间的账户互通体系;如果某个服务同时分布在多个公众号中,账户体系如何建立;如何做到用户身份唯一识别;

1)、同一用户不同公众号/应用下open id不同,同一用户不同公众号/应用下unionid相同;

2)、建立应用账户体系时,通过union来进行多应用/平台之间的用户账户体系识别与合并;

3)、多应用/平台建立账户体系时,需要做到唯一user id对应唯一union id;

Pour un certain service, y compris l'application mobile , la page Web PC et le service de compte public, quel est le processus de flux de données permettant aux utilisateurs de se connecter avec l'autorisation WeChat

1. L'utilisateur autorise le service d'application mobile via WeChat ; le service d'application peut obtenir l'identifiant syndical de l'utilisateur via l'interface. À ce stade, si l'identifiant n'est pas trouvé dans la base de données, il sera identifié comme un nouveau. l'utilisateur et un utilisateur seront créés directement id, l'identifiant utilisateur unique correspond à l'identifiant syndical

2 L'utilisateur scanne le code QR côté PC de WeChat pour autoriser la connexion conjointe pour obtenir le service côté PC ; ; le service d'application peut obtenir l'identifiant syndical de l'utilisateur via l'interface. À ce stade, si cet identifiant est trouvé dans la base de données, le compte de connexion PC sera fusionné avec le compte d'identifiant unique créé auparavant

3 ; . L'utilisateur peut se connecter au service de compte public en suivant le compte officiel du service et en l'autorisant avec WeChat ; Le serveur d'applications peut obtenir l'identifiant syndical de l'utilisateur via l'interface. À ce stade, si cet identifiant est trouvé dans la base de données, le. le compte connecté à partir du compte officiel sera fusionné avec le compte d'identification d'utilisateur unique créé précédemment

Explication de la différence entre les deux étendues d'autorisation de page Web :

1. Autorisation de connexion à la page Web initiée avec snsapi_base car la portée est utilisée pour obtenir la page d'entrée. L'openid de l'utilisateur est autorisé en silence et passe automatiquement à la page de rappel. Ce que l'utilisateur perçoit, c'est qu'il accède directement à la page de rappel (souvent une page professionnelle). Caractéristiques : L'utilisateur n'est pas au courant

2. Autorisation silencieuse de la page Web initiée avec snsapi_userinfo car la portée est utilisée pour obtenir ; les informations de base de l'utilisateur. Cependant, ce type d'autorisation nécessite que l'utilisateur accepte manuellement, et puisque l'utilisateur a accepté, il n'est pas nécessaire d'y prêter attention et les informations de base de l'utilisateur peuvent être obtenues après autorisation.

Autorisation silencieuse dans des scénarios spéciaux :

Pour les utilisateurs qui ont suivi le compte officiel, si l'utilisateur entre depuis la session du compte officiel ou personnalisé menu La page d'autorisation Web de ce compte officiel, même si la portée est snsapi_userinfo, est autorisée en silence et l'utilisateur n'en est pas conscient.

Processus d'autorisation de page Web :

1, guidez l'utilisateur pour saisir l'autorisation page pour accepter l'autorisation, Obtenez le code

Assurez-vous que le compte public WeChat a la portée d'autorisation (paramètre de portée) et guidez l'utilisateur vers la page d'autorisation

Lien de référence :

la portée est snsapi_base

Remarque : appid, redirect_uri, l'état doit être négocié avec le backend

https://open.weixin .qq.com/connect/oauth2 /authorize?appid="+wx_appid+"&redirect_uri="+api.wx_reg+"&response_type=code&scope=

snsapi_login,snsapi_userinfo&state=1,0#wechat_redirect

la portée est snsapi_userinfo

https://open.weixin.qq.com/connect/oauth2/authorize?appid="+wx_appid+"&redirect_uri="+api.wx_reg+"&response_type=code&scope=snsapi_base,snsapi_userinfo&state= 1,0#wechat_redirect



Après que l'utilisateur ait accepté l'autorisation

Si l'utilisateur accepte l'autorisation, la page passera à redirect_uri/?code=CODE&state=STATE.

2, code d'échange pour l'autorisation de la page Web access_token (opération backend)

redirect_uri sur l'url de la page revient à /?code=CODE&state=STATE. code

Ce qui est échangé via le code est l'autorisation de page Web access_token. Si la portée de l'autorisation de page Web est snsapi_base, dans cette étape, lors de l'obtention de l'autorisation de page Web access_token, l'openid est également obtenu, ainsi que la page Web de style snsapi_base. le processus d’autorisation est terminé jusqu’à présent.

3 : Les informations personnelles sont obligatoires. L'arrière-plan obtient la valeur via le code et la renvoie au front-end pour l'exploitation

Recommandations associées :

php implémente le push de message du modèle WeChat

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn