B2主题优化:添加抖音登录并实现用户中心抖音登录和解绑

1. 需求分析和架构设计

1.1 功能需求

  • 抖音账号登录:允许用户通过抖音账号快速登录网站
  • 自动注册:对于首次使用抖音登录的用户,自动创建网站账号
  • 用户信息同步:同步抖音用户的昵称、头像等信息到网站账号
  • 账号绑定和解绑:允许已登录用户绑定/解绑抖音账号
  • 安全可靠:基于抖音开放平台的OAuth 2.0协议,确保登录过程安全可靠

1.2 技术需求

  • 抖音开放平台集成:对接抖音开放平台的OAuth 2.0接口
  • 现有架构兼容:按照主题现有的QQ和微博登录架构模式实现
  • 错误处理:完善的错误处理机制,提供友好的错误提示
  • 参数配置:在主题设置中提供抖音登录的相关配置项

B2主题优化:添加抖音登录并实现用户中心抖音登录和解绑

1.3 核心文件结构

文件名 路径 功能描述
open-douyin.php Pages/open-douyin.php 抖音登录回调处理页面
OAuth.php Modules/Common/OAuth.php 添加抖音登录核心实现
Normal.php Modules/Settings/Normal.php 添加抖音登录设置参数
functions.php functions.php 添加抖音登录前端配置

2. 抖音开放平台应用创建和配置

2.1 注册抖音开放平台账号

  1. 访问抖音开放平台:打开抖音开放平台官网
  2. 注册账号:点击注册按钮,按照提示完成账号注册
  3. 登录账号:使用注册的账号登录抖音开放平台
  4. 完成开发者认证:进入开发者中心,选择认证类型(个人或企业),填写认证信息并提交审核

2.2 创建网站应用

  1. 进入应用管理:登录后进入开发者控制台,点击左侧菜单 应用管理 → 网站应用
  2. 点击创建应用按钮,填写以下信息:
    • 应用名称:填写您的网站名称
    • 应用描述:简要描述您的网站功能
    • 应用图标:上传网站的图标(建议尺寸:200x200px)
    • 网站域名:填写您的网站域名,如 example.com
    • 回调地址:填写 https://您的域名/open-douyin
    • 应用类型:选择 网站应用
    • 应用分类:选择适合您网站的分类
  3. 点击提交,等待审核

2.3 获取应用参数

  1. 应用审核通过后,进入应用管理页面
  2. 找到您创建的应用,点击 查看详情
  3. 获取Client Key和Client Secret:在应用详情页面找到以下重要参数:
    • Client Key:应用的唯一标识
    • Client Secret:应用的密钥,请注意保密

2.4 配置应用权限

  1. 在应用详情页面,点击 权限管理 标签
  2. 找到用户信息权限:user_info
  3. 点击申请按钮,填写申请理由
  4. 点击提交,等待审核

2.5 配置安全域名

  1. 在应用详情页面,点击 安全设置 标签
  2. 添加安全域名:输入您的网站域名并点击 添加 按钮
  3. 保存设置

3. 创建抖音登录回调处理页面

3.1 创建文件

  1. 打开文件管理器,导航到 b2/Pages/ 目录
  2. 创建新文件,命名为 open-douyin.php
  3. 编辑文件,添加以下代码:

4. 修改OAuth.php添加抖音登录核心实现

4.1 打开文件

文件路径:b2/Modules/Common/OAuth.php

4.2 添加抖音登录初始化方法

添加位置:在微博登录方法之后,微信登录方法之前

参考代码:参考QQ和微博的登录方法

添加代码:

/**抖音登录**/
public static function douyin($type, $code)
{
    $arg = array(
        'url' => "https://open.douyin.com/oauth/access_token",
        'client_key' => b2_get_option('normal_login', 'douyin_key'),
        'client_secret' => b2_get_option('normal_login', 'douyin_secret')
    );

    return self::get_token($arg, $type, $code);
}
/**抖音登录**/

4.3 添加Token处理逻辑

添加位置:在微博Token处理代码之后,微信Token处理代码之前

参考代码:参考微博的Token处理逻辑

添加代码:

case 'douyin':
    $msg = json_decode($res['body'], true);
    if (isset($msg['error_code'])) {
        return array('error' => sprintf(__('错误代码:%s;错误信息:%s;请在百度中搜索相关错误代码进行修正。', 'b2'), $msg['error_code'], $msg['description']));
    }
    $data = array(
        'access_token' => $msg['data']['access_token'],
        'uid' => $msg['data']['open_id'],
        'type' => 'douyin'
    );
    break;

4.4 添加用户信息获取逻辑

添加位置:在微博用户信息获取代码之后,微信用户信息获取代码之前

参考代码:参考QQ和微博的用户信息获取逻辑

添加代码:

case 'douyin':
    $url = 'https://open.douyin.com/oauth/userinfo/?open_id=' . $data['uid'] . '&access_token=' . $data['access_token'];
    $data['nickname'] = 'nickname';
    $data['avatar'] = 'avatar';
    $data['sex'] = 'gender';
    break;

4.5 添加社交登录类型处理

添加位置:在微博处理代码之后,微信处理代码之前

参考代码:参考QQ和微博的类型处理

添加代码:

case 'douyin':
    $name = __('抖音', 'b2');
    break;

5. 修改Normal.php添加抖音登录设置参数

5.1 打开文件

文件路径:b2/Modules/Settings/Normal.php

5.2 添加默认设置参数

添加位置:在微博登录默认参数之后,微信登录默认参数之前

参考代码:参考QQ和微博的默认参数设置

添加代码:

// 抖音登录默认设置
'douyin_open' => 0,
'douyin_key' => '',
'douyin_secret' => '',

5.3 添加设置界面配置

添加位置:在微博登录设置之后,微信登录设置之前

参考代码:参考QQ和微博的设置界面配置

添加代码:

//抖音登录
$login->add_field(array(
    'name' => __('是否启用抖音授权登录', 'b2'),
    'before_row' => '<h2>' . __('抖音登录设置', 'b2') . '</h2><div class="cmb-row">',
    'id' => 'douyin_open',
    'type' => 'select',
    'options' => array(
        1 => __('开启', 'b2'),
        0 => __('关闭', 'b2')
    ),
    'default' => self::$default_settings['douyin_open'],
));

$login->add_field(array(
    'name' => __('Client Key', 'b2'),
    'id' => 'douyin_key',
    'type' => 'text',
    'default' => self::$default_settings['douyin_key'],
));

$login->add_field(array(
    'name' => __('Client Secret', 'b2'),
    'id' => 'douyin_secret',
    'type' => 'text',
    'attributes' => array(
        'type' => 'password',
    ),
    'default' => self::$default_settings['douyin_secret'],
    'after_row' => '<p class="red">' . sprintf(__('抖音登录申请地址:%s;回调地址填写:%s', 'b2'), '<a target="_blank" href="https://open.douyin.com/">https://open.douyin.com/</a>', B2_HOME_URI . '/open-douyin') . '<p></div>'
));

6. 修改functions.php添加抖音登录前端配置

6.1 打开文件

文件路径:b2/functions.php

6.2 添加抖音登录配置

在

'redirect' => array(
'key' => 'redirect',
'name' => __('跳转中...', 'b2')
),

下方添加

'open-douyin' => array(
'key' => 'open-douyin',
'name' => __('抖音登录回调', 'b2')
),

添加位置:在微博登录配置之后,微信登录配置之前

参考代码:参考QQ和微博的前端配置

添加代码:

'douyin' => array(
    'name' => __('抖音', 'b2'),
    'icon' => 'b2-tiktok',
    'color' => '#161823',
    'url' => 'https://open.douyin.com/platform/oauth/connect?client_key=' . b2_get_option('normal_login', 'douyin_key') . '&response_type=code&scope=user_info&redirect_uri=' . urlencode(B2_HOME_URI . '/open-douyin') . '&state=' . urlencode(base64_encode(json_encode(array('callback' => B2_HOME_URI . '/open?type=douyin')))),
    'open' => b2_get_option('normal_login', 'douyin_open') ? true : false
),

7. 代码位置详细说明

7.1 OAuth.php文件详细位置

7.1.1 抖音登录初始化方法位置

具体位置:在 public static function weibo($type, $code) 方法之后,public static function weixin($type, $code) 方法之前

周围代码:

// 微博登录方法结束
    }
/**微博登录**/

// 在这里添加抖音登录方法

// 微信登录方法开始
public static function weixin($type, $code)
{

要添加的代码:

/**抖音登录**/
public static function douyin($type, $code)
{
    $arg = array(
        'url' => "https://open.douyin.com/oauth/access_token",
        'client_key' => b2_get_option('normal_login', 'douyin_key'),
        'client_secret' => b2_get_option('normal_login', 'douyin_secret')
    );

    return self::get_token($arg, $type, $code);
}
/**抖音登录**/

7.1.2 Token处理逻辑位置

具体位置:在 case 'weibo': 代码块之后,case 'weixin': 代码块之前

周围代码:

// 微博Token处理结束
                break;

// 在这里添加抖音Token处理代码

// 微信Token处理开始
            case 'weixin';

要添加的代码:

case 'douyin':
    $msg = json_decode($res['body'], true);
    if (isset($msg['error_code'])) {
        return array('error' => sprintf(__('错误代码:%s;错误信息:%s;请在百度中搜索相关错误代码进行修正。', 'b2'), $msg['error_code'], $msg['description']));
    }
    $data = array(
        'access_token' => $msg['data']['access_token'],
        'uid' => $msg['data']['open_id'],
        'type' => 'douyin'
    );
    break;

7.1.3 用户信息获取逻辑位置

具体位置:在 case 'weibo': 用户信息获取代码块之后,case 'weixin': 用户信息获取代码块之前

周围代码:

// 微博用户信息获取结束
                    break;

// 在这里添加抖音用户信息获取代码

// 微信用户信息获取开始
                case 'weixin':

要添加的代码:

case 'douyin':
    $url = 'https://open.douyin.com/oauth/userinfo/?open_id=' . $data['uid'] . '&access_token=' . $data['access_token'];
    $data['nickname'] = 'nickname';
    $data['avatar'] = 'avatar';
    $data['sex'] = 'gender';
    break;

7.1.4 社交登录类型处理位置

具体位置:在 case 'weibo': 类型处理代码块之后,case 'weixin': 类型处理代码块之前

周围代码:

// 微博类型处理结束
    break;

// 在这里添加抖音类型处理代码

// 微信类型处理开始
    case 'weixin':

要添加的代码:

case 'douyin':
    $name = __('抖音', 'b2');
    break;

7.2 Normal.php文件详细位置

7.2.1 默认设置参数位置

具体位置:在微博登录默认参数之后,微信登录默认参数之前

周围代码:

// 微博默认参数
'weibo_open' => 0,
'weibo_id' => '',
'weibo_secret' => '',

// 在这里添加抖音默认参数

// 微信默认参数
'wx_pc_key' => '',
'wx_pc_secret' => '',

要添加的代码:

// 抖音登录默认设置
'douyin_open' => 0,
'douyin_key' => '',
'douyin_secret' => '',

7.2.2 设置界面配置位置

具体位置:在微博登录设置之后,微信登录设置之前

周围代码:

// 微博登录设置结束
        );

// 在这里添加抖音登录设置

// 微信登录设置开始
//微信登录

要添加的代码:

//抖音登录
$login->add_field(array(
    'name' => __('是否启用抖音授权登录', 'b2'),
    'before_row' => '<h2>' . __('抖音登录设置', 'b2') . '</h2><div class="cmb-row">',
    'id' => 'douyin_open',
    'type' => 'select',
    'options' => array(
        1 => __('开启', 'b2'),
        0 => __('关闭', 'b2')
    ),
    'default' => self::$default_settings['douyin_open'],
));

$login->add_field(array(
    'name' => __('Client Key', 'b2'),
    'id' => 'douyin_key',
    'type' => 'text',
    'default' => self::$default_settings['douyin_key'],
));

$login->add_field(array(
    'name' => __('Client Secret', 'b2'),
    'id' => 'douyin_secret',
    'type' => 'text',
    'attributes' => array(
        'type' => 'password',
    ),
    'default' => self::$default_settings['douyin_secret'],
    'after_row' => '<p class="red">' . sprintf(__('抖音登录申请地址:%s;回调地址填写:%s', 'b2'), '<a target="_blank" href="https://open.douyin.com/">https://open.douyin.com/</a>', B2_HOME_URI . '/open-douyin') . '<p></div>'
));

7.3 functions.php文件详细位置

7.3.1 前端配置位置

具体位置:在微博登录配置之后,微信登录配置之前

周围代码:

// 微博前端配置
    'weibo' => array(
        'name' => __('微博', 'b2'),
        'icon' => 'b2-weibo',
        'color' => '#FF3E3E',
        'url' => 'https://api.weibo.com/oauth2/authorize?client_id=' . b2_get_option('normal_login', 'weibo_id') . '&response_type=code&redirect_uri=' . urlencode(B2_HOME_URI . '/open?type=weibo'),
        'open' => b2_get_option('normal_login', 'weibo_open') ? true : false
    ),

// 在这里添加抖音前端配置

// 微信前端配置
    'weixin' => $wx,

要添加的代码:

'douyin' => array(
    'name' => __('抖音', 'b2'),
    'icon' => 'b2-tiktok',
    'color' => '#161823',
    'url' => 'https://open.douyin.com/platform/oauth/connect?client_key=' . b2_get_option('normal_login', 'douyin_key') . '&response_type=code&scope=user_info&redirect_uri=' . urlencode(B2_HOME_URI . '/open-douyin') . '&state=' . urlencode(base64_encode(json_encode(array('callback' => B2_HOME_URI . '/open?type=douyin')))),
    'open' => b2_get_option('normal_login', 'douyin_open') ? true : false
),

8. 用户中心抖音登录绑定和解绑功能

8.1 功能说明

主题的用户中心已经内置了社交登录绑定和解绑功能,只要在 b2_oauth_types() 函数中添加了抖音登录配置,用户中心就会自动支持抖音登录的绑定和解绑功能。

B2主题优化:添加抖音登录并实现用户中心抖音登录和解绑

8.2 自动支持原理

  1. 前端自动显示:用户中心前端会遍历 b2_oauth_types(true) 返回的所有社交登录类型,自动显示抖音登录的绑定状态和操作按钮
  2. 通用解绑处理:User::un_build() 方法是通用的,会根据传入的 $type 参数删除相应的元数据,所以不需要特别修改
  3. 通用绑定处理:当用户已登录时,点击抖音登录按钮会自动执行绑定操作,而不是登录操作

8.3 操作步骤

8.3.1 绑定抖音账号

  1. 登录网站:使用现有账号登录网站
  2. 进入用户中心:点击用户头像,进入用户中心
  3. 找到社交登录设置:在用户中心找到社交登录设置部分
  4. 点击绑定抖音账号:找到抖音登录选项,点击「添加绑定」按钮
  5. 授权操作:在抖音授权页面点击授权按钮
  6. 绑定成功:授权完成后,会自动跳回用户中心,显示抖音账号已绑定

8.3.2 解绑抖音账号

  1. 登录网站:使用现有账号登录网站
  2. 进入用户中心:点击用户头像,进入用户中心
  3. 找到社交登录设置:在用户中心找到社交登录设置部分
  4. 点击解绑抖音账号:找到抖音登录选项,点击「解除绑定」按钮
  5. 确认解绑:在弹出的确认对话框中点击确认
  6. 解绑成功:解绑完成后,用户中心会显示抖音账号已解绑

8.4 技术实现细节

8.4.1 绑定流程

  1. 用户触发绑定:已登录用户点击抖音登录的「添加绑定」按钮
  2. 跳转授权页:跳转到抖音开放平台授权页面
  3. 用户授权:用户在抖音授权页面点击授权按钮
  4. 回调处理:抖音开放平台回调到网站的回调处理页面
  5. 登录状态检查:OAuth::social_check() 方法检查用户是否已登录
  6. 执行绑定:如果用户已登录,执行 OAuth::binding() 方法绑定抖音账号
  7. 绑定成功:绑定完成后,更新用户元数据并返回成功信息

8.4.2 解绑流程

  1. 用户触发解绑:用户点击抖音登录的「解除绑定」按钮
  2. API调用:前端通过 REST API 调用 unBuild 方法
  3. 权限检查:User::un_build() 方法检查用户权限
  4. 删除元数据:删除用户的抖音相关元数据
  5. 更新头像设置:将用户头像设置重置为默认值
  6. 返回结果:返回更新后的用户设置信息

9. 抖音登录功能测试和调试

9.1 测试前准备

  • 环境准备:确保WordPress站点正常运行,抖音开放平台应用已创建并配置完成
  • 测试账号:准备用于测试的抖音账号和WordPress账号
  • 测试工具:浏览器开发者工具、PHP错误日志

9.2 测试步骤

  1. 登录按钮显示测试:
    • 访问站点,点击登录按钮
    • 检查登录弹窗中是否显示抖音登录按钮
    • 验证条件:抖音登录开关已开启,已填写抖音开放平台应用信息
  2. 抖音登录流程测试:
    • 在登录弹窗中点击抖音登录按钮
    • 检查是否正确跳转到抖音开放平台授权页面
    • 在抖音授权页面点击授权按钮
    • 检查是否正确回调到您的站点
    • 检查是否成功登录到WordPress站点
  3. 账号绑定测试:
    • 确保您已登录到WordPress站点
    • 进入用户个人设置页面
    • 找到抖音账号绑定选项并点击
    • 在抖音授权页面点击授权按钮
    • 检查是否成功绑定抖音账号
  4. 账号解绑测试:
    • 确保您已登录到WordPress站点
    • 进入用户个人设置页面
    • 找到已绑定的抖音账号选项并点击解除绑定
    • 检查是否成功解绑抖音账号
  5. 异常情况测试:
    • 测试未配置应用信息的情况(不应显示抖音登录按钮)
    • 测试授权失败的情况(点击取消授权)
    • 测试网络异常的情况

9.3 常见问题和解决方案

9.3.1 登录按钮不显示

可能原因:

  • 抖音登录开关未开启
  • 抖音开放平台应用信息未填写
  • b2_oauth_types 函数中未添加抖音配置

解决方案:

  1. 检查主题设置中的抖音登录开关是否开启
  2. 检查抖音开放平台应用信息是否正确填写
  3. 检查 functions.php 文件中是否正确添加了抖音登录配置

9.3.2 授权页面无法打开

可能原因:

  • 抖音开放平台应用信息错误
  • 回调地址配置错误
  • 网络连接问题

解决方案:

  1. 检查抖音开放平台应用的 client_key 是否正确
  2. 检查抖音开放平台应用的回调地址是否正确配置为 https://您的域名/open-douyin
  3. 检查服务器网络连接是否正常

9.3.3 授权后无法登录

可能原因:

  • 回调处理页面错误
  • Token获取失败
  • 用户信息获取失败
  • 账号创建/绑定失败

解决方案:

  1. 检查 Pages/open-douyin.php 文件是否正确创建
  2. 检查 Modules/Common/OAuth.php 文件中的抖音登录实现是否正确
  3. 查看服务器错误日志,了解具体错误信息
  4. 使用浏览器开发者工具查看网络请求,了解具体错误

9.3.4 绑定/解绑失败

可能原因:

  • 用户未登录
  • 权限不足
  • 网络连接问题
  • 抖音账号已绑定到其他用户

解决方案:

  1. 确保用户已登录
  2. 确保用户有足够的权限
  3. 检查网络连接
  4. 检查抖音账号是否已绑定到其他用户

9.4 调试方法

9.4.1 前端调试

  • 网络面板:使用浏览器开发者工具查看网络请求,特别是与抖音登录相关的请求
  • 控制台:查看JavaScript错误和控制台日志
  • 元素面板:检查登录弹窗的HTML结构,确认抖音登录按钮是否正确渲染

9.4.2 后端调试

  • PHP错误日志:在wp-config.php中添加以下代码启用错误日志
    define('WP_DEBUG', true);
    define('WP_DEBUG_LOG', true);
    define('WP_DEBUG_DISPLAY', false);
    

    错误日志位置:wp-content/debug.log

  • 自定义日志:在关键位置添加自定义日志,例如:
    error_log('抖音登录:开始处理token');
    error_log('抖音登录:获取到的token数据:' . print_r($msg, true));
    

10. 安全注意事项

10.1 应用信息安全

  • Client Secret保护:不要在前端代码中暴露Client Secret
  • 配置信息加密:确保配置信息安全存储

10.2 授权流程安全

  • HTTPS协议:确保站点使用HTTPS协议
  • State参数:使用State参数防止CSRF攻击
  • 授权码验证:验证授权码的有效性

10.3 用户信息安全

  • 数据脱敏:对用户敏感信息进行脱敏处理
  • 数据存储:安全存储用户信息,不存储不必要的数据

10.4 绑定/解绑安全

  • 权限检查:确保用户只能绑定/解绑自己的账号
  • 操作验证:解绑操作需要用户确认
  • 日志记录:记录重要的绑定/解绑操作

11. 性能优化

11.1 登录速度优化

  • API请求优化:减少不必要的API请求
  • 缓存机制:合理使用缓存,减少重复请求
  • 异步处理:对非关键操作使用异步处理

11.2 代码优化

  • 代码结构:保持代码结构清晰,易于维护
  • 错误处理:完善错误处理机制,提高代码健壮性
  • 注释文档:添加必要的注释和文档

12. 总结

通过本教程的步骤,您已经成功在B2主题中接入了抖音登录功能,参考了QQ和微博的实现模式。以下是完成的工作:

  1. 创建了回调处理页面:Pages/open-douyin.php
  2. 添加了抖音登录核心实现:在 Modules/Common/OAuth.php 中添加了抖音登录的初始化方法、Token处理逻辑和用户信息获取逻辑
  3. 添加了设置参数:在 Modules/Settings/Normal.php 中添加了抖音登录的默认设置参数和设置界面配置
  4. 添加了前端配置:在 functions.php 中添加了抖音登录的前端配置,实现了登录按钮的显示
  5. 自动支持用户中心绑定/解绑:由于系统的通用性,用户中心自动支持抖音登录的绑定和解绑功能

抖音登录功能的接入不仅为用户提供了更加便捷的登录方式,也丰富了网站的社交登录选项。在实施过程中,请注意安全事项和性能优化,确保登录功能的安全可靠和高效运行。

如果您在实施过程中遇到任何问题,请参考本教程的常见问题和解决方案部分,或查看抖音开放平台的官方文档。祝您实施顺利!

给TA赏糖
共{{data.count}}人
人已赏糖
技术分享

B2主题 BUG 修复:移动设备输入指定分页数字后下移(分页错位)问题

2026-1-30 15:15:24

技术分享

浏览器如何删除指定网站的缓存?

2026-2-3 12:08:09

9 条回复 A文章作者 M管理员
技术宅评论
  1. 技术宅铁粉

    太厉害啦啊!!!!!

  2. Image

    技术软件守法人使用了功德圆满!
    让心术不正人用到就是害人害己!晚年牢笼等

  3. 不吃香菜男

    为啥我打开/open-douyin 404错位,打开你的正常

  4. 老灰60

    哇,这篇文章写得真详细!我刚看完,觉得添加抖音登录的功能太实用了,现在抖音用户这么多,能一键登录网站简直方便死了。自动注册和信息同步的设计也超贴心,不用再手动填资料,省时省力。用户中心还能解绑抖音账号,这点考虑得很周全,万一有人想换绑定也不麻烦。文章中提到的添加位置功能,我猜是让用户分享地理位置?这挺创新的,可能适合本地服务类的网站。参考代码部分对开发者来说简直是宝藏,能直接拿来用,省去不少折腾。整体架构设计清晰,需求分析也到位,看得出作者花了不少心思。希望以后能多分享这种实战经验,对我们这些搞网站优化的帮助很大!

    • smart4587

      谢谢你的肯定!抖音登录确实能大幅提升用户转化率,尤其适合移动端引流。位置功能不只是分享,还能结合LBS做精准推送,潜力很大。参考代码的实用性我也深有体会,开发者能快速落地项目。期待更多实战干货分享!

    • 狐4589

      不客气!我也深有体会,抖音登录在移动端引流效果超棒,位置功能结合LBS推送精准度很高,我试过小项目里提升了不少转化。参考代码确实帮开发者省时省力,期待你多分享实战案例,一起学习!

    • brave6769

      是啊,这篇文章确实超实用!抖音登录现在这么火,一键注册省心死了。解绑功能我也觉得是必须的,万一账号被盗还能及时处理。位置功能如果用来推荐本地服务,那真的挺创新的。参考代码部分帮大忙了,开发者直接抄作业就行。希望作者多分享这种干货,咱们搞网站的少走弯路!

    • 大快乐86

      老灰60说得太对了!抖音登录确实超实用,一键登录省时又省力,尤其现在抖音用户这么多。自动注册和解绑设计得很人性化,用户体验直线上升。添加位置功能我也觉得创新,可能适合本地服务类网站。参考代码部分对开发者来说简直是及时雨,能快速落地。希望作者多分享这类干货,实战经验太宝贵了!

❯
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
Image