Inhaltsverzeichnis
Anmeldevorgang für das WeChat-Konto:
1. Um das Miniprogramm aufzurufen, erhalten Sie zunächst den Code über wx.login und senden Sie ihn an das Backend über die Backend-Schnittstelle tauscht die WeChat-API session_key und openid aus.
Schritt 1: Wenn Sie das Miniprogramm aufrufen, erhalten Sie zunächst den Code über wx.login und senden ihn über die Backend-Schnittstelle an das Backend. Das Backend tauscht den Sitzungsschlüssel aus openid mit der WeChat-API;
Schritt 2: Bestimmen Sie, ob die openid in der Datenbank vorhanden ist [eindeutige Kennung, muss an ein Konto (Mobiltelefonnummer) gebunden werden];
Schritt 3: Anmeldeseite: Springen Sie nach erfolgreicher Anmeldung zur Startseite, um die Methode wx.login auszuführen. Anschließend ist die Anmeldung erfolgreich und der Anmeldestatus bleibt erhalten.
So erhalten Sie Sitzungsschlüssel und OpenID basierend auf der WeChat-API
Testergebnisse:
Heim Backend-Entwicklung PHP-Tutorial Mini-Programm und ThinkPHP5 kombiniert, um den Anmeldestatus zu erreichen (Code beigefügt)

Mini-Programm und ThinkPHP5 kombiniert, um den Anmeldestatus zu erreichen (Code beigefügt)

Aug 11, 2018 pm 02:00 PM
小程序

Der Inhalt dieses Artikels befasst sich mit der Kombination kleiner Programme und ThinkPHP5 zum Erreichen des Anmeldestatus (mit Code). Ich hoffe, dass er für Sie hilfreich ist.

WeChat-Miniprogramme umfassen im Allgemeinen drei Anmeldemethoden:
1. Melden Sie sich mit dem WeChat-Konto
an 2. Registrieren Sie sich und melden Sie sich mit Ihrem eigenen Konto an
3. Verwenden Sie andere Plattformkonten von Drittanbietern, um sich anzumelden.

Anmeldevorgang für das WeChat-Konto:

1. Das Miniprogramm erhält den Code über wx.login und sendet ihn an das Backend, das ihn austauscht der session_key und die openid;
2. Generieren Sie zufällig eine Zeichenfolge als session_key und openid als Wert und speichern Sie sie in Redis.
Beim Speichern sollte ein Timeout festgelegt werden . Der Client speichert die zurückgegebene Sitzungs-ID im Speicher. Wenn Sie Hintergrunddienste aufrufen, für deren Zugriff eine Anmeldeberechtigung erforderlich ist,
können Sie die im Speicher gespeicherte Sitzungs-ID herausnehmen und in die Anforderung übernehmen und sie anschließend im Hintergrundcode abrufen die Sitzungs-ID,
durchsucht Redis, um zu sehen, ob die Sitzungs-ID vorhanden ist, wird bestätigt, dass die Sitzung gültig ist.
Setzt die nachfolgende Codeausführung fort, andernfalls wird eine Fehlerbehandlung durchgeführt.

Dieser Artikel verwendet die kostenlose Kontoregistrierung und Anmeldung. Die Hauptideen und Prozesse sind wie folgt:

1. Um das Miniprogramm aufzurufen, erhalten Sie zunächst den Code über wx.login und senden Sie ihn an das Backend über die Backend-Schnittstelle tauscht die WeChat-API session_key und openid aus.

Bestimmen Sie, ob die openid in der Datenbank vorhanden ist > -- Wenn die openid nicht in der Datenbank vorhanden ist (bedeutet, dass kein solches Konto vorhanden ist):
Stellen Sie fest, ob die übergebene Mobiltelefonnummer leer ist (die Mobiltelefonnummer wird beim Anmelden in einer globalen Variablen gespeichert ). Wenn es nicht leer ist, bedeutet dies, dass Sie sich gerade angemeldet haben, und dann openid und openid_time (aktuelle Zeit) binden.
Wenn die Mobiltelefonnummer ebenfalls leer ist, bedeutet dies, dass Sie sich nicht angemeldet haben Es wird eine Anmeldefehlermeldung zurückgegeben, die dazu führt, dass der Client zur Anmeldeseite springt.
– Wenn die openid in der Datenbank vorhanden ist (bedeutet, dass ein entsprechendes Mobiltelefon in der Datenbank vorhanden ist),
Bestimmen Sie, ob openid_time Wenn die Zeit größer als 4 Stunden ist, geben Sie Informationen zum Anmeldefehler zurück und veranlassen Sie den Client, zur Anmeldeseite zu springen.
Wenn sie kleiner als 4 ist, aktualisieren Sie openid_time auf die aktuelle Zeit und geben Sie dann Informationen zum Anmeldeerfolg zurück und Handynummer.
3. Anmeldeseite: Stellen Sie fest, ob die Mobiltelefonnummer in der Datenbank vorhanden ist. Aktualisieren Sie openid_time auf die aktuelle Uhrzeit. Fügen Sie den Benutzer mit der Mobiltelefonnummer hinzu. Springen Sie dann zur Startseite und führen Sie die Methode wx.login aus. Die Anmeldung ist erfolgreich und der Anmeldestatus bleibt bestehen.

Detaillierter Prozess:

Schritt 1: Wenn Sie das Miniprogramm aufrufen, erhalten Sie zunächst den Code über wx.login und senden ihn über die Backend-Schnittstelle an das Backend. Das Backend tauscht den Sitzungsschlüssel aus openid mit der WeChat-API;

var user_phone = app.globalData.user_phone;
wx.login({
    success: res => {      
    // 发送 res.code 到后台换取 openId, sessionKey, unionId
      wx.request({
        url: 'http://www.tphoutai.com/wx/index', 
        data: {
          code: res.code,
          user_phone: user_phone,
        },
        success: function (result) {
          var res = result.data;
          console.log(res);          
          if(res.sendsure == 0){
            wx.reLaunch({
              url: '../login/login',
            })
          }else if(res.sendsure == 1){
            wx.reLaunch({
              url: '../index/index',
            })
          }
        }
      })
    }
  })
Nach dem Login kopieren

Schritt 2: Bestimmen Sie, ob die openid in der Datenbank vorhanden ist [eindeutige Kennung, muss an ein Konto (Mobiltelefonnummer) gebunden werden];

// 后台代码:
public function index(Request $request){
        $url = "https://api.weixin.qq.com/sns/jscode2session";        
        // 参数
        $params['appid']= '小程序的appid';        
        $params['secret']= '小程序的AppSecret';        
        $params['js_code']= $request -> param('code');        
        $params['grant_type']= 'authorization_code';        
        $user_phone= $request -> param('user_phone');        
        // 微信API返回的session_key 和 openid
        $arr = httpCurl($url, $params, 'POST');        
        $arr = json_decode($arr,true);        
        // 判断是否成功
        if(isset($arr['errcode']) && !empty($arr['errcode'])){            
        return json(['code'=>'2','message'=>$arr['errmsg'],"result"=>null]);
        }        
        $openid = $arr['openid'];        
        $session_key = $arr['session_key'];        
        // 从数据库中查找是否有该openid
        $is_openid = Db::table('user_info')->where('openid',$openid)->find();        
        // 如果openid存在,更新openid_time,返回登录成功信息及手机号
        if($is_openid){            
        // openid存在,先判断openid_time,与现在的时间戳相比,如果相差大于4个小时,则则返回登录失败信息,使客户端跳转登录页,如果相差在四个小时之内,则更新openid_time,然后返回登录成功信息及手机号;
            // 根据openid查询到所在条数据
            $data = Db::table('user_info')->where('openid',$openid)->find();            
            // 计算openid_time与现在时间的差值
            $time = time() - $data['openid_time'];            
            $time = $time / 3600;            
            // 如果四个小时没更新过,则登陆态消失,返回失败,重新登录
            if($time > 4){                
            return json(['sendsure'=>'0','message'=>'登录失败',]);
            }else{                
            // 根据手机号更新openid时间
                $update = Db::table('user_info')->where('openid', $openid)->update(['openid_time' => time()]);                
                // 判断是否更新成功
                if($update){                    
                return json(['sendsure'=>'1','message'=>'登录成功','user_phone' => $data['user_phone']]);
                }else{                    
                return json(['sendsure'=>'0','message'=>'登录失败']);
                }
            }        
            // openid不存在时
        }else{            
        // dump($user_phone);
            // 如果openid不存在, 判断手机号是否为空
            if(isset($user_phone) && !empty($user_phone)){                
            // 如果不为空,则说明是登录过的,就从数据库中找到手机号,然后绑定openid,+时间

                // 登录后,手机号不为空,则根据手机号更新openid和openid_time
                $update = Db::table('user_info')
                    ->where('user_phone', $user_phone)
                    ->update([                        
                    'openid'  => $openid,                        
                    'openid_time' => time(),
                    ]);                
                    if($update){                    
                    return json(['sendsure'=>'1','message'=>'登录成功',]);
                }
            }else{                
            // 如果也为空,则返回登录失败信息,使客户端跳转登录页
                return json(['sendsure'=>'0','message'=>'读取失败',]);
            }
        }
    }
Nach dem Login kopieren

Schritt 3: Anmeldeseite: Springen Sie nach erfolgreicher Anmeldung zur Startseite, um die Methode wx.login auszuführen. Anschließend ist die Anmeldung erfolgreich und der Anmeldestatus bleibt erhalten.

// 前台登录
    wx.request({
      url: 'http://www.tphoutai.com/wx/login', 
      data: {
        user_phone: user_phone
      },
      success: function (result) {
        var res = result.data;        
        if (res.sendsure == 1){
          app.globalData.user_phone = that.data.user_phone;
          wx.reLaunch({
            url: '../loading/loading',
          })
        }
      }
    })
Nach dem Login kopieren
// 后台登录方法
    public function login(Request $request){

        // 获取到前台传输的手机号
        $user_phone = $request -> param('user_phone');        
        // 判断数据库中该手机号是否存在
        $is_user_phone = Db::table('user_info')->where('user_phone',$user_phone)->find();        
        if(isset($is_user_phone) && !empty($is_user_phone)){            
        // 登录时,数据库中存在该手机号,则更新openid_time
            $update = Db::table('user_info')
                    ->where('user_phone', $user_phone)
                    ->update([                        
                    'openid_time' => time(),
                    ]);            
                    if($update){                
                    return json(['sendsure'=>'1','message'=>'登录成功',]);
            }
        }else{            
        $data = [                
        "user_phone" => $user_phone,                
        "pass" => '12345'
            ];            
            // 如果数据库中不存在该手机号,则进行添加
            Db::table('user_info')->insert($data);
        }        return json(['sendsure'=>'1','message'=>'登录成功',]);
    }
Nach dem Login kopieren

So erhalten Sie Sitzungsschlüssel und OpenID basierend auf der WeChat-API

function httpCurl($url, $params, $method = 'GET', $header = array(), $multi = false){
        date_default_timezone_set('PRC');        
        $opts = array(
            CURLOPT_TIMEOUT        => 30,
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_HTTPHEADER     => $header,
            CURLOPT_COOKIESESSION  => true,
            CURLOPT_FOLLOWLOCATION => 1,
            CURLOPT_COOKIE         
            =>session_name().'='.session_id(),
        );        
        /* 根据请求类型设置特定参数 */
        switch(strtoupper($method)){            
        case 'GET':                
        // $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
                // 链接后拼接参数  &  非?
                $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);                break;            case 'POST':                //判断是否传输文件
                $params = $multi ? $params : http_build_query($params);                $opts[CURLOPT_URL] = $url;                $opts[CURLOPT_POST] = 1;                $opts[CURLOPT_POSTFIELDS] = $params;                break;            default:                throw new Exception('不支持的请求方式!');
        }        
        /* 初始化并执行curl请求 */
        $ch = curl_init();
        curl_setopt_array($ch, $opts);        
        $data  = curl_exec($ch);        
        $error = curl_error($ch);
        curl_close($ch);        
        if($error) throw new Exception('请求发生错误:' . $error);        
        return  $data;
    }
Nach dem Login kopieren
Testergebnisse:


Mini-Programm und ThinkPHP5 kombiniert, um den Anmeldestatus zu erreichen (Code beigefügt)Verwandte Empfehlungen:

Lösung des Namensproblems des Modulnamens „gehörtToMany()“ in thinkphp5

Detaillierte Analyse des Adaptermodus in PHP (mit Code)

Das obige ist der detaillierte Inhalt vonMini-Programm und ThinkPHP5 kombiniert, um den Anmeldestatus zu erreichen (Code beigefügt). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Entwickeln Sie ein WeChat-Applet mit Python Entwickeln Sie ein WeChat-Applet mit Python Jun 17, 2023 pm 06:34 PM

Entwickeln Sie ein WeChat-Applet mit Python

Können kleine Programme reagieren? Können kleine Programme reagieren? Dec 29, 2022 am 11:06 AM

Können kleine Programme reagieren?

Implementieren Sie Kartenumdreheffekte in WeChat-Miniprogrammen Implementieren Sie Kartenumdreheffekte in WeChat-Miniprogrammen Nov 21, 2023 am 10:55 AM

Implementieren Sie Kartenumdreheffekte in WeChat-Miniprogrammen

Wie uniapp eine schnelle Konvertierung zwischen Miniprogrammen und H5 erreicht Wie uniapp eine schnelle Konvertierung zwischen Miniprogrammen und H5 erreicht Oct 20, 2023 pm 02:12 PM

Wie uniapp eine schnelle Konvertierung zwischen Miniprogrammen und H5 erreicht

So bedienen Sie die Miniprogramm-Registrierung So bedienen Sie die Miniprogramm-Registrierung Sep 13, 2023 pm 04:36 PM

So bedienen Sie die Miniprogramm-Registrierung

Alipay hat das Miniprogramm „Chinese Character Picking-Rare Characters' gestartet, um die Bibliothek seltener Charaktere zu sammeln und zu ergänzen Alipay hat das Miniprogramm „Chinese Character Picking-Rare Characters' gestartet, um die Bibliothek seltener Charaktere zu sammeln und zu ergänzen Oct 31, 2023 pm 09:25 PM

Alipay hat das Miniprogramm „Chinese Character Picking-Rare Characters' gestartet, um die Bibliothek seltener Charaktere zu sammeln und zu ergänzen

Einführung in die WeChat-Applet-Entwicklung in der Java-Sprache Einführung in die WeChat-Applet-Entwicklung in der Java-Sprache Jun 09, 2023 pm 10:40 PM

Einführung in die WeChat-Applet-Entwicklung in der Java-Sprache

Tutorial zum Schreiben eines einfachen Chat-Programms in Python Tutorial zum Schreiben eines einfachen Chat-Programms in Python May 08, 2023 pm 06:37 PM

Tutorial zum Schreiben eines einfachen Chat-Programms in Python

See all articles