In der WeChat -Entwicklung gibt es häufig solche Anforderungen: Erhalten Sie Benutzer -Avatare, binden Sie WeChat -Konten, um Nachrichten an Benutzer zu senden. Dann ist die Voraussetzung für die Erreichung dieser Autorisierung!
1. Konfigurieren Sie den Namen Secure Callback Domain:
Bevor Entwickler die Autorisierung der Benutzerwebseite nach WeChat Public -Konto anfordern, müssen die Entwickler zur Konfigurationsoption "Entwicklung - Schnittstellenberechtigungen - Webdienste - Webdienste - Webkonten - Web -Autorisierung wechseln, um Benutzer grundlegende Informationen auf der offiziellen Website der öffentlichen Plattform zu erhalten, um den Namen des Callback -Domain -Domains der Autorisierung zu ändern. Es ist erwähnenswert, dass dies den vollständigen Domain -Namen direkt schreiben soll, wie z. B. www.liliangel.cn. In unserer Entwicklung von H5 verwenden wir jedoch im Allgemeinen sekundäre Domain -Namen, wie z.
2. Autorisierung auf Benutzerebene und stille Autorisierung
1. Die von SNSAPI_BASE eingeleitete Webseiten -Autorisierung wird verwendet, um die OpenID des Benutzers, die die Seite eingibt, zu erhalten, und ist stillschweigend autorisiert und automatisch zur Rückrufseite gesprungen. Was der Benutzer wahrnimmt, ist, dass er direkt die Rückrufseite eingibt.
2. Die von SNSAPI_USERINFO initiierte Webseiten -Autorisierung als Umfang wird verwendet, um grundlegende Benutzerinformationen zu erhalten. Diese Autorisierung erfordert jedoch die Einwilligung des Benutzerhandbuchs, und da der Benutzer zugestimmt hat, ist es nicht erforderlich, darauf zu achten, und die grundlegenden Informationen des Benutzers können nach der Autorisierung erhalten werden.
3. Der Unterschied zwischen Web -Autorisierung Access_Token und gewöhnlich Access_Token
1. Die Autorisierung der WeChat -Webseite wird über den OAuth2.0 -Mechanismus implementiert. Nachdem der Benutzer das offizielle Konto autorisiert, kann das offizielle Konto eine Schnittstellenanweisungsnachweis (Web Authorization Access_Token) erhalten, die für die Webseitenautorisierung eindeutig ist. Der Aufruf der Autorisierungsschnittstelle kann über die Webseiten -Autorisierung Access_Token durchgeführt werden, z.
2. Für andere WeChat -Schnittstellen werden gewöhnliche Access_Token -Anrufe über die Schnittstelle "Access_Token" in grundlegender Unterstützung benötigt.
4. Führen Sie den Benutzer zur Autorisierungsseite, um der Autorisierung zuzustimmen und den Code zu erhalten
Nachdem WeChat aktualisiert wurde, hat sich auch die Autorisierungsseite geändert. Eigentlich bin ich an die klassische grüne Seite ...
JS:
var Center = {init: function () {.......}, EnterWxAuthor: function () {var wxuserinfo = localStorage.getItem ("wxUserInfo"); if (! if (code) {common.getWxUserInfo (); Center.init (); } else {// Keine WeChat -Benutzerinformationen, keine Autorisierung ->> Die Autorisierung ist erforderlich, zum Fenster der Autorisierungsseite. +'& response_type = code & scope = snsapi_userinfo#wechat_redirect'; }} else {Center.init (); }}} $ (Dokument) .Ready (function () {center.enterwxAuthor ();}Nehmen Sie als Beispiel Scope = SNSAPI_USERINFO. Wenn die Seite geladen wird, geben Sie die Autorisierungsmethode ein. Holen Sie sich zunächst das WXUSERINFO -Objekt aus dem Cache. Wenn es eine Erläuterung gibt, geben Sie die Initialisierungsmethode direkt ein. Wenn nicht, bestimmen Sie, ob die URL einen Code enthält. Wenn es einen Code gibt, bedeutet dies, dass es sich um die Seite handelt, nachdem der Rückruf der Autorisierungsseite eingegeben wurde. Tauschen Sie dann die Benutzerinformationen über den Code aus. Es gibt keinen Code, das heißt, der Benutzer gibt zum ersten Mal die Seite ein und führt die Autorisierungsseite. Redirect_uri ist die aktuelle Seitenadresse.
GetWxUSERINFO -Methode:
/ *** Erhalten Sie die grundlegenden Informationen des Benutzers nach der Autorisierung*/ getwxUserInfo: Funktion (par) {var code = Common.GetUrlParameter ("Code"); if (par) code = par; $ .ajax ({async: false, data: {code: code}, type: "get", url: wx_root + "wechat/autorisierung", Erfolg: function (json) {if (json) {try {// sicherstellen, dass das WXUSERINFO geschrieben ist. localStorage.setItem ('wxuserinfo', json); // Cache-wechat Benutzerinformationen}} catch (e) {// Todo: Handle-Ausnahme}}}}}); },5. Backend RESTful- /Wechat /Autorisierung, tauschen Sie Benutzerinformationen basierend auf dem Code aus
/*** WeChat -Autorisierung* @param Code läuft nach der Verwendung ab** @return user Basic -Informationen* @throws ioException*/@RequestMapPing (value = "/Autorisierung", method = requestMethod.get) public void AuthorizationWeicin (@RequestParam String Code, httpServequestanfrage, Httpexin -Anforderung), HTTPEIXIn -Anforderung, HTTPEIXIn -Anforderung) Anforderungsanforderung, HTTPEIXINGEBORT, ANFORDERUNG, HTTPRETRETRETRETRETRETRET -ANGEBETT) request.setcharactercoding ("utf-8"); response.setcharactercoding ("utf-8"); Printwriter out = response.getWriter (); Logger.info ("RESTFOFFFOR OF ARMUCHISIONSPARAMETERSCODE: {}", Code); try {string rs = wechatService.getoAuthaccessOken (Code); out.write (rs); Logger.info ("Erholung der Autorisierung ist erfolgreich.", Rs); } catch (Ausnahme e) {logger.Error ("Erholung der Autorisierung ist Fehler.", E); } endlich {out.close (); }}Hier gibt es einen autorisierten Access_Token. Denken Sie daran: Autorisierte Access_Token ist nicht global access_token und erfordert die Verwendung von Cache. Ich benutze Redis hier. Ich werde nicht viel über die spezifische Konfiguration sagen und einen verwandten Konfigurations -Blog -Beitrag später schreiben. Natürlich können Sie auch EHCache verwenden. In meinem ersten Blog gibt es eine detaillierte Einführung in die EHCAHE -Konfiguration.
/ ** * Erhalten Sie autorisierte Token basierend auf dem Code sind nur beim Autorisieren verfügbar, unterscheiden sich von global Access_tokens * @param code * @return * @throws ioException * @throws clientProtocolException */ public String getoAuthactoken (String -Code) Throws ClientProtocolException, ioException {String data = redisStoken ("edisService (" ediskos); String rs_access_token = null; String rs_openid = null; String url = wx_oAuth_access_token_url+"? Appid ="+wx_appid+"& secry ="+wx_appsecret+"& code ="+code+"& Grant_type = Authorization_Code"; if (stringutils.isempty (data)) {synchronized (this) {// abgelaufen, string hs = apiservice.doget (url); JsonObject json = jsonObject.ParseObject (HS); String refresh_token = json.getString ("refresh_token"); String refresh_url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid="+Wx_Appid+"&grant_type=refresh_token&refresh_token="+refresh_Token; String r_hs = apiService.doget (reAbresh_url); JsonObject r_json = jsonObject.ParseObject (r_hs); String r_access_token = r_json.getString ("access_token"); String r_expires_in = r_json.getString ("expires_in"); rs_openid = r_json.getString ("openID"); rs_access_token = r_access_token; redisService.set ("wixin_sq_access_token", r_access_token, integer.parseInt (r_expires_in) - 3600); Logger.info ("SQ SQ Access_Token zu redis ist erfolgreich. }} else {// nicht abgelaufener String hs = apiservice.doget (URL); JsonObject json = jsonObject.ParseObject (HS); rs_access_token = json.getString ("access_token"); rs_openid = json.getString ("openID"); Logger.info ("Get SQ Access_Token von Redis ist erfolgreich.rs_access_token: {}, rs_openid: {}", rs_access_token, rs_openid); } return getoAuthuserinfo (rs_access_token, rs_openid); }/** * Erhalten Sie Benutzerinformationen basierend auf autorisiertem Token * @param access_token * @param openID * @return */public String getoAthuserinfo (String Access_Token, String OpenID) {String url = "https://api.wexin.qqq.com/sns/sserinfo?iscess- +"& lang = zh_cn"; try {string hs = apiservice.doget (url); // Benutzerinformationen speichern SaveWeixinuser (HS); HS zurückgeben; } catch (ioException e) {logger.Error ("Erholung der Autorisierung ist Fehler.", E); } return null; }Ich hatte es eilig und die Benennung des Codes war chaotisch. Wie Sie sehen können, habe ich eine Synchronisierungsmethode verwendet, um den Schlüssel aus dem Cache als weixin_sq_access_token zu erhalten. Wenn die Anweisungen abgerufen werden, werde ich die von WeChat bereitgestellte Schnittstelle über httpclient direkt aufrufen und die Zeichenfolge der Benutzerinformationen an den Frontend zurückgeben. Wenn es nicht abgerufen wird, bedeutet dies, dass es nicht abgelaufen ist oder ist. Aktualisieren Sie dann den Access_Token gemäß realisierung_token und schreiben Sie den Cache. Da Access_Token eine kurze Gültigkeitsdauer hat, habe ich hier die Cache -Ablaufzeit festgelegt, um die von WeChat angegebene Zeit um eine weitere Stunde zu verkürzen. Im Rückblick auf den Code stellte ich fest, dass die obige Logik ein kleines Problem darstellt. Durch das Schreiben wie dieses wird das erste Akquisition oder das Cache -Versäumnis dazu führen, dass die Access_Token für die erste Akquisition nicht aktualisiert wird, was die Verwendung vorerst nicht beeinträchtigt. Ich werde die Todo später optimieren und ändern.
6: Benutzerinformationen speichern
Normalerweise speichern wir nach der Autorisierung die Benutzerinformationen in der Datenbanktabelle, OpenID als der einzige Primärschlüssel, und der Fremdschlüssel verbindet unsere eigene Benutzertabelle. Auf diese Weise, egal in welchem Geschäft wir in Zukunft ausführen oder operative Datenstatistiken durchführen möchten, haben wir einen Zusammenhang mit dem WeChat Public Account. Es ist erwähnenswert, dass das von uns erhaltene Headimgurl eine URL -Adresse von WeChat ist. Wenn der Benutzer den Avatar modifiziert, ist die ursprüngliche Adresse möglicherweise ungültig. Daher speichern Sie das Bild auf dem lokalen Server und dann die lokale Adress -URL!
Der von WeChat zurückgegebene Wert:
Referenzlink:
Offizielles Dokument der WeChat Public Platform: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842&token=&lang=zh_cn
Online -Schnittstellen -Debugging -Tool: http://mp.weixin.qq.com/debug
Keine offiziellen Kontoleistungen: Testkontoanmeldung testen Sie
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels für das Studium oder die Arbeit eines jeden hilfreich sein wird. Ich hoffe auch, Wulin.com mehr zu unterstützen!