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


     

    目录

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

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

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

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




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

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

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

    请求示列子

    1. login: function () {
    2. let that = this;
    3. tt.login({
    4. force: true,
    5. success(res) {
    6. const { code, errMsg, anonymousCode, isLogin } = res;
    7. console.log(`tt-login success`, errMsg);
    8. console.log(`code(临时登录凭证, 有效期 3 分钟) : `, code);
    9. console.log(`anonymousCode(用于标识当前设备, 无论登录与否都会返回, 有效期 3 分钟) : `, anonymousCode);
    10. console.log(`isLogin(判断在当前 APP(头条、抖音等)是否处于登录状态) : `, isLogin);
    11. that.setData({
    12. hasLogin: true
    13. });
    14. tt.showToast({
    15. title: "登录成功"
    16. })
    17. },
    18. fail(err) {
    19. tt.showModal({
    20. title: '登录失败',
    21. content: JSON.stringify(err),
    22. showCancel: false
    23. });
    24. console.log(`tt-login failed`, err.errMsg);
    25. },
    26. complete(res) {
    27. console.log(`tt-login completed`);
    28. }
    29. });
    30. }

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

    php通过code获取openid

    1. // 初始化CURL
    2. $ch = curl_init();
    3. // 设置CURL选项
    4. $url = "https://minigame.zijieapi.com/mgplatform/api/apps/jscode2session";
    5. $params = array(
    6. 'appid' => 'tt**********5',
    7. 'secret' => '988**************92',
    8. 'code' => '1********3'
    9. );
    10. // 将参数附加到URL
    11. $url .= '?' . http_build_query($params);
    12. curl_setopt($ch, CURLOPT_URL, $url);
    13. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 将返回结果直接输出而不是直接输出
    14. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); // 设置请求方法
    15. curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    16. "content-type: application/json"
    17. ));
    18. // 执行请求并获取响应
    19. $response = curl_exec($ch);
    20. // 检查是否有错误发生
    21. if(curl_errno($ch)){
    22. echo 'Curl error: ' . curl_error($ch);
    23. }
    24. // 关闭CURL资源
    25. curl_close($ch);
    26. // 输出响应
    27. echo $response;
    28. ?>

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

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

    1. {
    2. "error": 0,
    3. "session_key": "ffaaed37bb05d096***",
    4. "openid": "36d4bd3c8****",
    5. "anonymous_openid": "",
    6. "unionid": "f7510d9ab***********"
    7. }

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

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

    1. $url = 'https://open.douyin.com/oauth/userinfo/';
    2. $data = [
    3. 'open_id' => 'ba253642-0590-40bc-9bdf-9a1334******',
    4. 'access_token' => 'act.1d1021d2aee3d41fee2d2add43456badMFZnrhFhfWotu3Ecuiuka2******',
    5. ];
    6. $ch = curl_init($url);
    7. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    8. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    9. curl_setopt($ch, CURLOPT_POST, true);
    10. curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    11. curl_setopt($ch, CURLOPT_HTTPHEADER, [
    12. 'Content-Type: application/x-www-form-urlencoded',
    13. ]);
    14. $response = curl_exec($ch);
    15. if ($response === false) {
    16. echo 'Curl error: ' . curl_error($ch);
    17. } else {
    18. echo $response;
    19. }
    20. curl_close($ch);

    返回参数

    1. {
    2. "data": {
    3. "avatar": "https://example.com/x.jpeg",
    4. "avatar_larger": "https://example.com/x.jpeg",
    5. "client_key": "ExampleClientKey",
    6. "e_account_role": "",
    7. "error_code": 0,
    8. "log_id": "202212011600080101351682282501F9E7",
    9. "nickname": "TestAccount",
    10. "open_id": "0da22181-d833-447f-995f-1beefe******",
    11. "union_id": "1ad4e099-4a0c-47d1-a410-bffb4f******"
    12. },
    13. "message": "success"
    14. }

     

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

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

    1. tt.login({
    2. success(_res) {
    3. console.log("登录成功");
    4. // 调用 getUserInfo 前, 请确保登录成功
    5. // 获取用户信息
    6. tt.getUserInfo({
    7. // withCredentials: true,
    8. // withRealNameAuthenticationInfo: true,
    9. success(res) {
    10. console.log(`getUserInfo 调用成功`, res.userInfo);
    11. },
    12. fail(res) {
    13. console.log(`getUserInfo 调用失败`, res.errMsg);
    14. },
    15. });
    16. },
    17. });

  • 相关阅读:
    自媒体视频剪辑中的那些素材到哪里找?
    浅谈软件开发中的人,过程与技术
    怎么把PDF加密?这3种方法让你轻松给PDF文件加密
    K8S hostpath配置
    C语言结课实战项目_贪吃蛇小游戏
    题目:2706.购买两块巧克力
    【每日一题Day352】LC1726同积元组 | 哈希表+排列组合
    智能指针小记
    建材批发小程序微信上线开发
    Vue3 Composition 组合式API+TypeScript使用Vuex
  • 原文地址:https://blog.csdn.net/weixin_39934453/article/details/139474607