php怎么实现微信小程序登录

PHPz
Freigeben: 2023-04-21 10:16:09
Original
2586 Leute haben es durchsucht

微信小程序是近年来非常流行的一种应用类型,因其便捷、易用和生态完整,被广泛应用于各种场景。在开发微信小程序时,经常需要实现用户登录功能,其实现难度与传统网站登录相当。本文将介绍微信小程序登录的实现过程,主要包括前端调用API获取code,后端接收code并请求微信服务器获取用户openid和session_key,最后将用户信息存储到自己的数据库中。

一、微信小程序登录流程

微信小程序登录流程如下图所示:

微信小程序登录流程

具体流程如下:

  1. 用户打开小程序并点击登录按钮。
  2. 前端通过wx.login调用API获取临时登录凭证code。
  3. 将code发送至后端服务器。
  4. 后端向微信服务器发送请求,获取openid和session_key。
  5. 微信服务器返回openid和session_key。
  6. 后端根据openid查询数据库,若该用户不存在则将其添加至数据库。
  7. 后端将用户信息存储,并生成自定义登录态token,将其返回给前端。
  8. 前端将token存储至本地,作为用户登录态凭证。
  9. 用户下一次登录时,前端携带token向后端发送请求,后端验证token有效性,若有效则登录成功,否则返回未登录错误。

二、前端获取临时登录凭证code

前端使用wx.login调用API,获取临时登录凭证code。该API返回的code有效期只有5分钟,因此需要及时向后端发送请求。

wx.login({
  success: function(res) {
    if (res.code) {
      // 发送code至后端服务器
      wx.request({
        url: 'https://example.com/login.php',
        method: 'POST',
        data: {'code': res.code},
        success: function(resp) {
          // 获取后端返回的token并存储至本地
          wx.setStorageSync('token', resp.data.token);
        }
      });
    } else {
      console.log('获取登录态失败!' + res.errMsg);
    }
  }
});
Nach dem Login kopieren

三、后端获取openid和session_key

后端接收前端发送的临时登录凭证code,并向微信服务器发送请求,获取openid和session_key。请求的URL为:https://api.weixin.qq.com/sns/jscode2session。需要携带的参数包括appid、secret、js_code和grant_type,其中appid和secret为小程序的开发者ID和对应的密钥,js_code为前端获取的code,grant_type为授权类型,取值为authorization_code。

$appid = "Your AppID";
$secret = "Your AppSecret";
$code = $_POST['code'];
$url = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$code&grant_type=authorization_code";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$res = curl_exec($ch);
curl_close($ch);
$data = json_decode($res, true);
$openid = $data['openid'];
$session_key = $data['session_key'];
Nach dem Login kopieren

四、后端处理用户信息

后端根据openid查询数据库,若该用户不存在则将其添加至数据库。本例中使用MySQL作为数据库管理系统,用户数据表命名为user,包括字段id、openid和create_time。其中,id为用户ID(自增长),openid为用户唯一标识,create_time为用户创建时间。

// 连接数据库
$con = mysqli_connect('localhost', 'root', 'password', 'database');
mysqli_set_charset($con, 'utf8');

// 查询用户
$result = mysqli_query($con, "SELECT * FROM user WHERE openid='$openid' LIMIT 1");

if(mysqli_num_rows($result) == 0) {
  // 添加新用户
  $now = date('Y-m-d H:i:s');
  mysqli_query($con, "INSERT INTO user (openid, create_time) VALUES ('$openid', '$now')");

  // 获取用户ID
  $user_id = mysqli_insert_id($con);
} else {
  // 获取用户ID
  $row = mysqli_fetch_assoc($result);
  $user_id = $row['id'];
}
Nach dem Login kopieren

用户ID获取成功后,后端就可以生成自定义登录态token,并将用户信息存储。

// 生成token
$token = md5($user_id . time() . mt_rand());

// 存储token和用户信息
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->setex($token, 3600 * 24 * 7, $user_id);

// 返回token
echo json_encode(array('token' => $token));
Nach dem Login kopieren

五、前端存储token

前端在获取到后端返回的token后,将其存储到本地。一般采用LocalStorage或SessionStorage进行存储,以便下次访问时按需检索。

wx.request({
  url: 'https://example.com/login.php',
  method: 'POST',
  data: {'code': res.code},
  success: function(resp) {
    // 获取后端返回的token并存储至本地
    wx.setStorageSync('token', resp.data.token);
  }
});
Nach dem Login kopieren

六、用户下一次访问验证token有效性

用户在下一次访问时,前端需携带之前获取并存储的token向后端发送请求,后端验证token有效性。若token有效,则登录成功,否则返回未登录错误。

// 验证token有效性
$token = $_POST['token'];
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$user_id = $redis->get($token);

if($user_id) {
  // 验证成功,返回用户信息
  // ...
} else {
  // 验证失败,返回未登录错误
  echo json_encode(array('errcode' => 40001, 'errmsg' => 'user not logged in'));
}
Nach dem Login kopieren

七、总结

实现微信小程序登录,需要前后端配合完成多个步骤,其中包括前端获取临时登录凭证code、后端获取openid和session_key、后端处理用户信息、生成自定义登录态token,并将其返回给前端。前端将token存储到本地,作为下次访问时的登录态凭证。后端在接收到用户请求后,需验证token是否有效,若有效则返回相应的用户信息,否则返回未登录错误。通过以上步骤,就可以比较稳定地实现微信小程序的用户登录功能了。

Das obige ist der detaillierte Inhalt vonphp怎么实现微信小程序登录. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!