PHP实现抖音小程序用户登录获取openid

 

目录

第一步、抖音小程序前端使用tt.login获取code

第二步、前端拿到code传给后端

第三步、方法1 后端获取用户信息

第四步、方法2  抖音小程序拿到用户信息把用户信息传给后端




code2Session抖音小程序用户登录后端文档

第一步、抖音小程序前端使用tt.login获取code

 前端 使用tt.login方法  force是否强制唤起窗口

请求示列子

login: function () {
    let that = this;
    tt.login({
      force: true,
      success(res) {
        const { code, errMsg, anonymousCode, isLogin } = res;
        console.log(`tt-login success`, errMsg);
        console.log(`code(临时登录凭证, 有效期 3 分钟) : `, code);
        console.log(`anonymousCode(用于标识当前设备, 无论登录与否都会返回, 有效期 3 分钟) : `, anonymousCode);
        console.log(`isLogin(判断在当前 APP(头条、抖音等)是否处于登录状态) : `, isLogin);
        that.setData({
          hasLogin: true
        });
        tt.showToast({
          title: "登录成功"
        })
      },
      fail(err) {
        tt.showModal({
          title: '登录失败',
          content: JSON.stringify(err),
          showCancel: false
        });
        console.log(`tt-login failed`, err.errMsg);
      },
      complete(res) {
        console.log(`tt-login completed`);
      }
    });
  }

第二步、前端拿到code传给后端

php通过code获取openid

<?php

// 初始化CURL
$ch = curl_init();

// 设置CURL选项
$url = "https://minigame.zijieapi.com/mgplatform/api/apps/jscode2session";
$params = array(
    'appid' => 'tt**********5',
    'secret' => '988**************92',
    'code' => '1********3'
);

// 将参数附加到URL
$url .= '?' . http_build_query($params);

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 将返回结果直接输出而不是直接输出
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); // 设置请求方法
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "content-type: application/json"
));

// 执行请求并获取响应
$response = curl_exec($ch);

// 检查是否有错误发生
if(curl_errno($ch)){
    echo 'Curl error: ' . curl_error($ch);
}

// 关闭CURL资源
curl_close($ch);

// 输出响应
echo $response;

?>

这里有个问题只是获取到openid没有具体用户信息,需要通过前端获取传给后端

记得保存session_key到后端,不能返回给前端

{
  "error": 0,
  "session_key": "ffaaed37bb05d096***",
  "openid": "36d4bd3c8****",
  "anonymous_openid": "",
  "unionid": "f7510d9ab***********"
}

第三步、方法1 后端获取用户信息

获取用户公开信息_移动/网站应用_抖音开放平台

<?php

$url = 'https://open.douyin.com/oauth/userinfo/';

$data = [
    'open_id' => 'ba253642-0590-40bc-9bdf-9a1334******',
    'access_token' => 'act.1d1021d2aee3d41fee2d2add43456badMFZnrhFhfWotu3Ecuiuka2******',
];

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/x-www-form-urlencoded',
]);

$response = curl_exec($ch);

if ($response === false) {
    echo 'Curl error: ' . curl_error($ch);
} else {
    echo $response;
}

curl_close($ch);

返回参数

{
  "data": {
    "avatar": "https://example.com/x.jpeg",
    "avatar_larger": "https://example.com/x.jpeg",
    "client_key": "ExampleClientKey",
    "e_account_role": "",
    "error_code": 0,
    "log_id": "202212011600080101351682282501F9E7",
    "nickname": "TestAccount",
    "open_id": "0da22181-d833-447f-995f-1beefe******",
    "union_id": "1ad4e099-4a0c-47d1-a410-bffb4f******"
  },
  "message": "success"
}

 

第四步、方法2  抖音小程序拿到用户信息把用户信息传给后端

tt.getUserInfo_抖音开放平台用户信息

tt.login({
  success(_res) {
    console.log("登录成功");
    // 调用 getUserInfo 前, 请确保登录成功

    // 获取用户信息
    tt.getUserInfo({
      // withCredentials: true,
      // withRealNameAuthenticationInfo: true,
      success(res) {
        console.log(`getUserInfo 调用成功`, res.userInfo);
      },
      fail(res) {
        console.log(`getUserInfo 调用失败`, res.errMsg);
      },
    });
  },
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/683078.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何解决chatgpt出现503 bad gateway的问题

昨日&#xff0c;ChatGPT官网挂了&#xff0c;也就是使用web网页端访问的用户&#xff0c;会出现 bad gateway 情况。我们去ChatGPT官方的监控查看&#xff0c;已经展示相关错误。 影响的范围有&#xff1a; 影响了 ChatGPT 所有计划的所有用户。影响包括所有与 ChatGPT 相关…

Ubuntu22.04之解决:emacs无法输入中文问题(二百四十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

js 选择一个音频文件,绘制音频的波形,从右向左逐渐前进。

选择一个音频文件&#xff0c;绘制波形&#xff0c;从右向左逐渐前进。 完整代码&#xff1a; <template><div><input type"file" change"handleFileChange" accept"audio/*" /><button click"stopPlayback" :…

实战:Zig 编写高性能 Web 服务(2)

1.1 编写 HTTP server 我们从python -m http.server 8000启动得到灵感&#xff0c;先确定好目标&#xff1a; 编写一个HTTP/1.1 http serverzig version 0.12.0 使用zig init搭建项目的前置工作你先自行搭建好&#xff0c;不会的翻看前面铺垫的章节熟悉zig的项目结构。 关键…

大型语言模型智能体(LLM Agent)在实际使用的五大问题

在这篇文章中&#xff0c;我将讨论人们在将代理系统投入生产过程中经常遇到的五个主要问题。我将尽量保持框架中立&#xff0c;尽管某些问题在特定框架中更加常见。 1. 可靠性问题 可靠性是所有代理系统面临的最大问题。很多公司对代理系统的复杂任务持谨慎态度&#xff0c;因…

从入门到精通:Java三目运算符详细教程!

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

操作系统教材第6版——个人笔记3

2.1 处理器 2.1.1 处理器与寄存器 处理器部件的简单示意 用户程序可见寄存器 可以使程序员减少访问主存储器的次数&#xff0c;提高指令执行的效率所有程序可使用&#xff0c;包括应用程序和系统程序数据寄存器&#xff1a;又称通用寄存器地址寄存器&#xff1a;索引、栈指针…

表达式求值中的“整型提升”概念

一.基本原理和概念 如&#xff1a;代码 char a&#xff0c;b&#xff0c;c &#xff1b; a b c &#xff1b; 该代码在计算的时候就会先将 b 和 c 提升为 int 类型进行加法后&#xff0c;再将数据进行截断存放在内存存放变量 a 的空间中。 &#xff08;1&#xff09;提升和截…

【quarkus系列】实战自定义注解实现策略模式分发

目录 序言自定义注解业务接口渠道消息实现策略分发测试知识扩展AnyAnnotationLiteral 应用场景和语法 序言 策略模式大家都应该了解或者使用过&#xff0c;此篇文章中就不再阐述&#xff0c;之前springboot项目中小编也真正的实战应用过。现在换Quarkus框架开发项目&#xff0…

Java面试题:Redis双写一致性问题

Redis双写一致性 缓存和数据库数据同步 正常流程: 读操作: 查询缓存,查询命中直接返回,没命中查询数据库将查询到的数据写入缓存,并设定超时时间 写操作: 删除缓存,修改数据库,在延时一段时间后再删除缓存 (延迟双删)延迟:等待数据库的主节点同步到从节点 因为如果先删…

C++实现,简单的命令行交互框架

目录 背景背景 在实际开发中,经常需要有对端测试程序,配合自己的程序,验证功能、逻辑等。面对繁杂、多变的需求,如果对端程序设计得不够灵活,则无法提升工作效率,如果能够与对端程序交互,通过命令行输入命令的方式完成测试验证,将大大提升工作效率,下面的示例程序是一…

【C语言】一节课拿捏---动态内存分配

谢谢观看&#xff01;希望以下内容帮助到了你&#xff0c;对你起到作用的话&#xff0c;可以一键三连加关注&#xff01;你们的支持是我更新地动力。 因作者水平有限&#xff0c;有错误还请指出&#xff0c;多多包涵&#xff0c;谢谢&#xff01; 目录 一、 为什么要有动态内存…

winscp无法上传,删除,修改文件并提示权限不够的分析

使用winscp删除文件,报了个错如下 根据这个错就去百度,网上大部分都是通过下面这种方法解决: 在winscp端进行设置 输入主机名(即IP地址)、用户名和密码,然后点击高级 在箭头所指位置输入sudo + sftp应用程序的路径 先查询 sudo find / -name sftp-server -print点击Sh…

springboot项目中第三方jar包打包进jar包

springboot项目中&#xff0c;如果手动引入了jar包&#xff0c;打包时不会将手动引入的第三方jar包打包进价包里&#xff0c;如何处理&#xff1f; 若第三方的jar包的lib和src同级&#xff0c;则maven打包时默认不会将lib下的jar包打包进jar包&#xff0c;处理方式有两种&#…

neo4j入门并使用案例说明

1、neo4j是什么 Neo4j是一个高性能的NoSQL图形数据库&#xff0c;它将结构化数据存储在网络&#xff08;在数学角度称为图&#xff09;上&#xff0c;而不是传统的表中。Neo4j是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎。它因其高性能、轻量级、易嵌入和…

c++(内存分配,构造,析构)

#include <iostream>using namespace std; class Per { private:string name;int age;double *height;double *weigh; public://无参构造Per(){cout << "Per::无参构造" << endl;}//有参构造Per(string name,int age,double height,double weigh):…

私募状告基金经理,七千月薪被索赔上百万

一个私募机构的基金经理&#xff0c;月薪七千元&#xff0c;但是却被公司诉讼追索100多万元赔偿。 这样“奇葩”的事情&#xff0c;不仅发生在视频网剧里&#xff0c;也发生在现实生活中。 根据日前相披露的一则案件文书&#xff0c;一家江浙一带的私募机构日前把自己的“基金…

docker create rm export exec命令详解

容器生命周期管理命令教程-3 1. 创建容器 docker create&#xff1a;创建一个新的容器但不启动它。 docker create -it --name mycontainer ubuntu bash通常使用 docker run(详细可看上一篇关于run命令的详细介绍) 2. 删除容器 docker rm&#xff1a;删除一个或多个容器。 d…

计算机网络9——无线网络和移动网络1 无线局域网 WLAN2

文章目录 一、802.11局域网的 MAC 层协议1、CSMA/CA协议2、时间间隔 DIFS 的重要性3、争用信道的过程4、对信道进行预约 二、802.11局域网的 MAC 帧1&#xff09;关于 802.11 数据帧的地址2&#xff09;序号控制字段、持续期字段和帧控制字段 一、802.11局域网的 MAC 层协议 1…

Spring boot+vue前后端分离

目录 1、前端vue的搭建 2、后端项目的构建 pom文件中引入的jar包 yml文件用来配置连接数据库和端口的设置 application.property进行一些整合 service层 imp层 mapper 实体类 额外写一个类、解决跨域问题 3、测试 1、前端vue的搭建 建立项目的过程略 开启一个建立好…