首页 > 编程语言 >微信小程序+php后台服务器实现登录流程实例说明(转)

微信小程序+php后台服务器实现登录流程实例说明(转)

时间:2024-08-31 15:47:55浏览次数:4  
标签:openid 3rd 微信 session res 服务器 curl php

下面就对PHP后台实现微信小程序登录进行详细讲解。

一、获取微信小程序登录凭证

小程序登录流程中,首先需要通过微信小程序接口获取登录凭证(code)。

我们需要在小程序端调用微信提供的wx.login()函数,该函数返回用户登录凭证code。例如:

wx.login({
  success: function(res) {
    if (res.code) {
      // 将code发送给后端服务器进行认证
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

 二、通过PHP后台获取sessionkey和openid

拥有小程序登录凭证后,我们需要在后端服务器通过微信接口调用获取用户信息的API获取用户sessionkey和openid。可以通过curl库,使用PHP代码向微信接口发送请求,并处理响应结果。例如:

$appid = "你的小程序AppID";
$secret = "你的小程序AppSecret";
$url = "https://api.weixin.qq.com/sns/jscode2session?appid=".$appid."&secret=".$secret."&js_code=".$wxCode."&grant_type=authorization_code";

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url); // 设置请求的URL
curl_setopt($curl, CURLOPT_HEADER, 0); // 不带头部信息
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 返回数据流,而不是直接输出
$result = curl_exec($curl); // 发送请求
curl_close($curl); // 关闭请求

//解析结果
$resultObj = json_decode($result);
$sessionKey = $resultObj->session_key;
$openid = $resultObj->openid;

  

 

四、生成3rd_session并返回终端

获取到sessionkey和openid后,最终需要在后端服务器生成3rd_session,用于记录用户身份信息。我们可以借助PHP的session机制,将sessionkey和openid记录到session中,并将3rd_session返回到小程序终端。

session_id(md5($openid . $sessionKey . time())); // 自定义session_id
session_start();
$_SESSION["session_key"] = $sessionKey;
$_SESSION["openid"] = $openid;
$session3rd = session_id();
// 将session3rd返回给小程序终端
echo $session3rd;

  

 

五、实现微信小程序登录

在小程序端获取到3rd_session后,在进行其他需要认证的API调用时,需要将3rd_session通过HTTP Header的方式发送到后端服务器,后端需要验证3rd_session的有效性,并返回相应结果。

例如:

wx.request({
  url: 'https://your_domain.com/api/function',
  header: {
    'content-type': 'application/json', // 默认值
    '3rd_session': wx.getStorageSync('session3rd') // 读取本地缓存中的3rd_session值
  },
  success: function(res) {
    console.log(res.data)
  }
})

  

 

后端获取3rd_session的方式也非常简单,只需要读取HTTP Header中的3rd_session字段即可。PHP代码示例如下:

session_id($_SERVER["HTTP_3RD_SESSION"]); // 设置session_id
session_start();
if(isset($_SESSION['session_key'])&&($_SESSION['openid']==$openid)){
 // 3rd_session验证通过
}

  

 

六、示例说明

示例1:微信小程序登录——获取sessionkey和openid

wx.login({
  success: function(res) {
    if (res.code) {
      // 通过接口调用获取用户sessionkey和openid
      wx.request({
        url: 'https://your_domain.com/api/login',
        data: {
          wxCode: res.code
        },
        success: function(res) {
          console.log(res.data.session_key);
          console.log(res.data.openid);
        }
      })
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

 

php端:

$appid = "your_appid";
$secret = "your_secret";
$url = "https://api.weixin.qq.com/sns/jscode2session?appid=".$appid."&secret=".$secret."&js_code=".$wxCode."&grant_type=authorization_code";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
$resultObj = json_decode($result);
$sessionKey = $resultObj->session_key;
$openid = $resultObj->openid;
echo json_encode(array('session_key'=>$sessionKey, 'openid'=>$openid));

  

示例2:微信小程序登录——验证3rd_session有效性

wx.request({
  url: 'https://your_domain.com/api/function',
  header: {
    '3rd_session': wx.getStorageSync('session3rd')
  },
  success: function(res) {
    console.log(res.data)
  }
})

  

session_id($_SERVER["HTTP_3RD_SESSION"]);
session_start();
$sessionKey = isset($_SESSION['session_key'])?$_SESSION['session_key']:'';
$openid = isset($_SESSION['openid'])?$_SESSION['openid']:'';
if($sessionKey && $openid) {
  echo json_encode(array('msg'=>'success'));
} else {
  echo json_encode(array('msg'=>'fail'));
}

  

 

标签:openid,3rd,微信,session,res,服务器,curl,php
From: https://www.cnblogs.com/eminer/p/18390394

相关文章

  • PHP数据类型
    PHP变量存储不同的类型的数据,不同的数据类型可以做不一样的事情。PHP支持以下几种数据类型:String(字符串)Integer(整型)Float(浮点型)Boolean(布尔型)Array(数组)Object(对象)NULL(空值)Resource(资源类型)字符串一个字符串是一串字符的序列,就像"Helloworld!"。你可以将任何文本......
  • PHP条件语句
    咱们在编写代码时,您常常需要为不同的判断执行不同的动作。您可以在代码中使用条件语句来完成此任务。在PHP中,提供了下列条件语句:if语句-在条件成立时执行代码if...else语句-在条件成立时执行一块代码,条件不成立时执行另一块代码if...elseif....else语句-在若干条......
  • PHP运算符
    PHP中,赋值运算符=用于给变量赋值。在PHP中,算术运算符+用于把值加在一起。算术运算符';//换行echo($x-$y);//输出4echo'';//换行echo($x*$y);//输出60echo'';//换行echo($x/$y);//输出1.6666666666667echo'';//换行echo($x%$y);//......
  • PHP循环
    循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块。在PHP中,提供了下列循环语句:while-只要指定的条件成立,则循环执行代码块do...while-首先执行一次代码块,然后在指定的条件成立时重复这个循环for-循环执行代码块指定的次数foreach-根据数组中每个元素......
  • PHP数组
    数组能够在单个变量中存储多个值数组可以在单个变量中存储多个值,并且您可以根据键访问其中的值。创建数组在PHP中,array()函数用于创建数组:在PHP中,有三种类型的数组:数值数组-带有数字ID键的数组关联数组-带有指定的键的数组,每个键关联一个值多维数组-包含一个......
  • PHP类型比较
    虽然PHP是弱类型语言,但也需要明白变量类型及它们的意义,因为我们经常需要对PHP变量进行比较,包含松散和严格比较。松散比较:使用两个等号==比较,只比较值,不比较类型。严格比较:用三个等号===比较,除了比较值,也比较类型。例如,"42"是一个字符串而42是一个整数。FALSE是一......
  • PHP函数
    创建PHP函数函数是通过调用函数来执行的。函数准则:函数的名称应该提示出它的功能函数名称以字母或下划线开头(不能以数字开头)函数-添加参数为了给函数添加更多的功能,我们可以添加参数,参数类似变量。参数就在函数名称后面的一个括号内指定。";}echo"Mynameis";wr......
  • A-计算机毕业设计定制:10508民大校园美食推荐系统的设计与实现(免费领源码)可做计算机毕
    摘要 随着数字化时代的到来,校园美食推荐系统的设计与实现具有重要意义。针对民大校园中商家、普通用户和管理员之间的信息交互和服务需求,开发这样一个系统能够有效促进校园内美食资源的共享和利用,提供美食介绍和美食推荐的渠道,提高校园内美食行业的服务水平,增强校园内外用户......
  • A-计算机毕业设计定制:18099居家养老服务系统(免费领源码)可做计算机毕业设计JAVA、PHP
    摘  要1绪论1.1研究背景1.2研究意义1.3主要研究内容1.4论文章节安排2 相关技术介绍2.1Node.JS编程语言2.2MySQL数据库3 系统分析3.1可行性分析3.1.1技术可行性分析3.1.2经济可行性分析3.1.3操作可行性分析3.2系统流程分析3.2.1 ......
  • 使用脚本向SFTP服务器传输文件
    摘自:https://blog.csdn.net/qq_45882426/article/details/138275975 #!/usr/bin/expect-fsettimeout60setipaddr[lindex$argv0]setusername[lindex$argv1]setpasswd[lindex$argv2]setlcdirname[lindex$argv3]setdirname[lindex$argv4]set......