Heim  >  Artikel  >  WeChat-Applet  >  Von WeChat entwickelte Autoren-Webseitenautorisierung

Von WeChat entwickelte Autoren-Webseitenautorisierung

高洛峰
高洛峰Original
2017-02-15 11:15:212184Durchsuche

In der WeChat-Entwicklung gibt es häufig solche Anforderungen: Benutzer-Avatare erhalten, WeChat-ID binden, um Nachrichten an Benutzer zu senden ... Dann ist die Autorisierung die Voraussetzung dafür!

1. Konfigurieren Sie einen sicheren Callback-Domainnamen:

微信开发之Author网页授权

Bevor das offizielle WeChat-Konto die Benutzerwebseite anfordert Autorisierung: Entwickler müssen zunächst die Konfigurationsoptionen „Entwicklung – Schnittstellenberechtigungen – Webdienste – Webkonten – Webautorisierung zum Erhalten grundlegender Benutzerinformationen“ auf der offiziellen Website der öffentlichen Plattform aufrufen, um den Namen der Autorisierungsrückrufdomäne zu ändern Beachten Sie, dass der vollständige Domainname hier direkt geschrieben ist, z. B.: www.liliangel.cn. Wenn wir jedoch h5 entwickeln, verwenden wir im Allgemeinen Domänennamen der zweiten Ebene, z. B. h5.liliangel.cn, die auch im Sicherheitsrückrufdomänennamen enthalten sind.

2. Autorisierung auf Benutzerebene und stille Autorisierung

1. Die mit snsapi_base initiierte Webseitenautorisierung wird zum Abrufen verwendet Die OpenID des Benutzers, der die Seite betritt, wird stillschweigend autorisiert und springt automatisch zur Rückrufseite. Was der Benutzer wahrnimmt, ist, dass er direkt die Rückrufseite betritt.

2. Die Webseitenautorisierung wird mit snsapi_userinfo initiiert, da der Bereich zum Abrufen der grundlegenden Informationen des Benutzers verwendet wird. Diese Art der Autorisierung erfordert jedoch eine manuelle Zustimmung des Benutzers. Da der Benutzer zugestimmt hat, besteht keine Notwendigkeit, darauf zu achten, und die grundlegenden Informationen des Benutzers können nach der Autorisierung abgerufen werden.

3. Der Unterschied zwischen dem Zugriffstoken für die Webseitenautorisierung und dem normalen Zugriffstoken für die WeChat-Webseite wird über den OAuth2.0-Mechanismus implementiert offizielles Konto, Das offizielle Konto kann ein Webseiten-Autorisierungs-Access_token erhalten, über das der Webseiten-Autorisierungs-Schnittstellenaufruf erfolgen kann, z. B. zum Abrufen grundlegender Benutzerinformationen >

2. Andere WeChat-Schnittstellen müssen über die Schnittstelle „get access_token“ in der Basisunterstützung weitergeleitet werden, um den normalen Aufruf von access_token zu erhalten.

4. Führen Sie den Benutzer dazu, die Autorisierungsseite aufzurufen, um der Autorisierung zuzustimmen und den Code zu erhalten

微信开发之Author网页授权

Nach dem WeChat-Update hat sich auch die Autorisierungsseite geändert. Tatsächlich bin ich an die grüne klassische Seite gewöhnt >

Nehmen Sie „scope=snsapi_userinfo“ Wenn die Seite geladen wird, ruft sie zunächst das wxUserInfo-Objekt aus dem Cache ab. Es gibt direkt die Initialisierungsmethode ein. Wenn nicht, stellen Sie fest, ob die URL einen Code enthält, der darauf hinweist, dass es sich um die Seite handelt, nachdem Sie den Rückruf der Autorisierungsseite eingegeben haben. Anschließend kann der Code gegen Benutzerinformationen ausgetauscht werden. Es gibt keinen Code, das heißt, der Benutzer betritt die Seite zum ersten Mal und wird zur Autorisierungsseite weitergeleitet. Redirect_uri ist die aktuelle Seitenadresse.

getWxUserInfo-Methode:


var center = {
        init: function(){
            .....
        },
        enterWxAuthor: function(){
            var wxUserInfo = localStorage.getItem("wxUserInfo");
            if (!wxUserInfo) {
                var code = common.getUrlParameter('code');
                if (code) {
                    common.getWxUserInfo();
                    center.init();
                }else{
                    //没有微信用户信息,没有授权-->> 需要授权,跳转授权页面
                    window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='+ WX_APPID +'&redirect_uri='+ window.location.href +'&response_type=code&scope=snsapi_userinfo#wechat_redirect';
                }
            }else{
                center.init();
            }
        }
}
$(document).ready(function() { 
    center.enterWxAuthor();
}

5. Backend Restful- - /wechat/authorization, Benutzerinformationen gemäß Code austauschen


/**
     * 授权后获取用户的基本信息
     */
    getWxUserInfo:function(par){
        var code = common.getUrlParameter("code");
        
        if (par) code = par;
        
        $.ajax({
            async: false,
            data: {code:code},
            type : "GET",
            url : WX_ROOT + "wechat/authorization",
            success : function(json) {
                if (json){
                    try {
                        //保证写入的wxUserInfo是正确的
                        var data = JSON.parse(json);
                        if (data.openid) {
                            localStorage.setItem('wxUserInfo',json);//写缓存--微信用户信息
                        }
                    } catch (e) {
                        // TODO: handle exception
                    }
                }
            }
        });
    },

Hier ist Ein Access_token autorisieren, denken Sie daran: Das Autorisieren von access_token ist kein globaler Access_token und erfordert die Verwendung von Redis. Ich werde hier nicht auf die spezifische Konfiguration eingehen und einen entsprechenden Konfigurations-Blogbeitrag schreiben ehcache. Die ehcahe-Konfiguration finden Sie in meinem ersten Blog.


  /**
     * 微信授权
     * @param code 使用一次后失效
     * 
     * @return 用户基本信息
     * @throws IOException 
     */
    @RequestMapping(value = "/authorization", method = RequestMethod.GET)    public void authorizationWeixin(
            @RequestParam String code,
            HttpServletRequest request, 
            HttpServletResponse response) throws IOException{
        request.setCharacterEncoding("UTF-8");  
        response.setCharacterEncoding("UTF-8"); 

        PrintWriter out = response.getWriter();
        LOGGER.info("RestFul of authorization parameters code:{}",code);        
        try {
            String rs = wechatService.getOauthAccessToken(code);
            out.write(rs);
            LOGGER.info("RestFul of authorization is successful.",rs);
        } catch (Exception e) {
            LOGGER.error("RestFul of authorization is error.",e);
        }finally{
            out.close();
        }
    }

Ich hatte es eilig und die Codebenennung war verwirrend. Wie Sie sehen, habe ich eine synchrone Methode verwendet. Zuerst habe ich den Schlüssel WEIXIN_SQ_ACCESS_TOKEN aus dem Cache abgerufen. Wenn ich die Beschreibung erhalten habe und sie nicht abgelaufen ist, habe ich die von WeChat bereitgestellte Schnittstelle direkt über httpclient aufgerufen und die Zeichenfolge mit den Benutzerinformationen zurückgegeben bis zum vorderen Ende. Wenn es nicht abgerufen wird, bedeutet dies, dass es nicht vorhanden ist oder abgelaufen ist. Aktualisieren Sie dann das Access_token entsprechend dem Refresh_token und schreiben Sie dann den Cache. Da das Access_token aus Sicherheitsgründen nur eine kurze Gültigkeitsdauer hat Geben Sie hier die Ablaufzeit ein und subtrahieren Sie eine Stunde von der von WeChat angegebenen Zeit. Wenn ich mir den Code noch einmal ansehe, habe ich festgestellt, dass es ein kleines Problem mit der obigen Logik gibt. Das Schreiben auf diese Weise führt dazu, dass das access_token zum ersten Mal oder nach Ablauf des Caches aktualisiert wird. Dies hat vorerst keine Auswirkungen auf die Verwendung . Optimierung und Änderung TODO werden später vorgenommen.

6: Benutzerinformationen speichern

Normalerweise speichern wir nach der Autorisierung die Benutzerinformationen in der Datenbanktabelle, openid ist der einzige Primärschlüssel und der Fremdschlüssel ist unserem eigenen Benutzer zugeordnet In der Tabelle gibt es also eine Beziehung zum offiziellen WeChat-Konto, unabhängig davon, ob es sich um ein zukünftiges Geschäft oder eine Betriebsdatenstatistik handelt.

Es ist erwähnenswert, dass es sich bei der von uns erhaltenen Headimgurl um eine von WeChat bereitgestellte URL-Adresse handelt. Wenn der Benutzer den Avatar ändert, wird die ursprüngliche Adresse möglicherweise ungültig. Speichern Sie das Bild daher am besten auf einem lokalen Server und speichern Sie es dann lokale Adress-URL!

Von WeChat zurückgegebener Wert:

微信开发之Author网页授权

Weitere verwandte Artikel zur Autoren-Webseitenautorisierung für die WeChat-Entwicklung finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn