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);
      },
    });
  },
});

根据提供的引用内容,以下是在uniapp中实现抖音小程序授权获取手机号登录的步骤: 1. 在uniapp项目中,使用uni.login()方法获取用户的code。代码示例: ```javascript uni.login({ provider: 'toutiao', success: function (loginRes) { var code = loginRes.code; // 将code发送给后端服务器 } }); ``` 2. 在后端服务器中,使用code调用抖音小程序的接口获取session_key和openid。代码示例: ```javascript // 使用code调用抖音小程序的接口获取session_key和openid // 请求示例: // GET https://developer.toutiao.com/api/apps/jscode2session?appid=APPID&secret=SECRET&code=CODE&anonymous_code=ANONYMOUS_CODE ``` 3. 将session_key和openid发送给前端uniapp项目。 4. 在uniapp项目中,使用uni.getUserInfo()方法获取用户的手机号。代码示例: ```javascript uni.getUserInfo({ provider: 'toutiao', success: function (infoRes) { var encryptedData = infoRes.encryptedData; var iv = infoRes.iv; // 将encryptedData和iv发送给后端服务器 } }); ``` 5. 在后端服务器中,使用session_key、encryptedData和iv解密用户的手机号。代码示例: ```javascript // 使用session_key、encryptedData和iv解密用户的手机号 // 请求示例: // POST https://developer.toutiao.com/api/apps/decrypt?appid=APPID&secret=SECRET // 请求体: // { // "session_key": "SESSION_KEY", // "encrypted_data": "ENCRYPTED_DATA", // "iv": "IV" // } ``` 6. 获取解密后的手机号,并进行登录操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PHP隔壁老王邻居

啦啦啦啦啦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值