Files
zyt/MINIPROGRAM_BACKEND_SETUP.md
T
2026-03-04 15:32:30 +08:00

7.6 KiB
Raw Blame History

小程序后端接口配置完成

已创建的文件

1. 控制器

server/app/api/controller/TcmController.php

<?php
namespace app\api\controller;

use app\adminapi\logic\tcm\DiagnosisLogic;

class TcmController extends BaseApiController
{
    public function getPatientSignature()
    {
        $patientId = $this->request->get('patient_id');
        
        if (!$patientId) {
            return $this->fail('患者ID不能为空');
        }
        
        $result = DiagnosisLogic::getPatientSignature($patientId);
        
        if ($result === false) {
            return $this->fail(DiagnosisLogic::getError());
        }
        
        return $this->data($result);
    }
}

2. 逻辑层方法

已在 server/app/adminapi/logic/tcm/DiagnosisLogic.php 中添加:

public static function getPatientSignature(int $patientId)
{
    // 生成患者的 UserSig
    // 返回 sdkAppId, userId, userSig
}

API 接口信息

接口地址

GET /api/tcm/getPatientSignature

请求参数

参数名 类型 必填 说明
patient_id int 患者ID

请求示例

GET http://your-domain.com/api/tcm/getPatientSignature?patient_id=2

响应示例

成功响应:

{
  "code": 1,
  "msg": "success",
  "data": {
    "sdkAppId": 1400123456,
    "userId": "patient_2",
    "userSig": "eJwtzMsKgj...",
    "expireTime": 86400
  }
}

失败响应:

{
  "code": 0,
  "msg": "患者ID不能为空",
  "data": []
}

小程序端配置

修改 API 地址

wx/TUICallKit/pages/call.vue 中,修改第47行:

// 开发环境
url: 'http://localhost:8000/api/tcm/getPatientSignature',

// 或生产环境
url: 'https://your-domain.com/api/tcm/getPatientSignature',

完整的小程序端代码

// 从后端获取签名
const getSignatureFromServer = async (patientId) => {
  return new Promise((resolve, reject) => {
    uni.request({
      url: 'http://your-domain.com/api/tcm/getPatientSignature',
      method: 'GET',
      data: {
        patient_id: patientId
      },
      success: (res) => {
        if (res.data && res.data.code === 1) {
          resolve(res.data.data);
        } else {
          reject(new Error(res.data.msg || '获取签名失败'));
        }
      },
      fail: (err) => {
        reject(err);
      }
    });
  });
};

测试步骤

1. 测试后端接口

使用浏览器或 Postman 测试:

http://localhost:8000/api/tcm/getPatientSignature?patient_id=2

预期响应:

{
  "code": 1,
  "msg": "success",
  "data": {
    "sdkAppId": 1400xxx,
    "userId": "patient_2",
    "userSig": "xxx...",
    "expireTime": 86400
  }
}

2. 测试小程序端登录

  1. 打开微信开发者工具
  2. 打开小程序项目
  3. 进入通话页面
  4. 输入患者ID: 2
  5. 点击"登录"按钮
  6. 查看控制台日志

预期日志:

获取签名成功: { sdkAppId: xxx, userId: 'patient_2', userSig: 'xxx' }
TUICallKit 初始化成功, userId: patient_2

3. 测试 Web 端呼叫小程序

  1. 确保小程序端已登录(患者ID: 2
  2. 在 Web 端医生后台,找到患者ID为2的诊单
  3. 点击"视频通话"按钮
  4. 小程序端应该收到来电通知

常见问题

问题1: 接口404

症状:

GET http://localhost:8000/api/tcm/getPatientSignature?patient_id=2
404 Not Found

解决方案:

  1. 检查控制器文件是否存在:server/app/api/controller/TcmController.php
  2. 检查命名空间是否正确:namespace app\api\controller;
  3. 清除缓存:php think clear
  4. 重启服务器

问题2: 获取签名失败

症状:

{
  "code": 0,
  "msg": "请先配置腾讯云TRTC参数",
  "data": []
}

解决方案: 在后台配置腾讯云 TRTC 参数(SDKAppID 和 SecretKey

问题3: 跨域问题

症状:

Access to XMLHttpRequest at 'http://localhost:8000/api/tcm/getPatientSignature' 
from origin 'http://localhost:5173' has been blocked by CORS policy

解决方案: 在后端配置 CORS 允许跨域访问

问题4: 小程序请求失败

症状:

request:fail url not in domain list

解决方案:

  1. 在微信公众平台配置服务器域名
  2. 或在微信开发者工具中勾选"不校验合法域名"

完整流程图

小程序端                    后端服务器                    Web端
   |                           |                           |
   |-- 1. 输入患者ID: 2         |                           |
   |                           |                           |
   |-- 2. 请求签名 ------------>|                           |
   |   GET /api/tcm/           |                           |
   |   getPatientSignature     |                           |
   |   ?patient_id=2           |                           |
   |                           |                           |
   |                           |-- 3. 生成 UserSig         |
   |                           |   userId: patient_2       |
   |                           |                           |
   |<-- 4. 返回签名 ------------|                           |
   |   { userId: patient_2,    |                           |
   |     userSig: xxx }        |                           |
   |                           |                           |
   |-- 5. 初始化 TUICallKit     |                           |
   |   登录 IM                  |                           |
   |                           |                           |
   |-- 6. 保持在线              |                           |
   |                           |                           |
   |                           |                           |-- 7. 医生点击"视频通话"
   |                           |                           |
   |                           |<-- 8. 请求签名 -----------|
   |                           |   POST /adminapi/tcm.     |
   |                           |   diagnosis/              |
   |                           |   getCallSignature        |
   |                           |                           |
   |                           |-- 9. 返回签名 ----------->|
   |                           |   { patientUserId:        |
   |                           |     patient_2 }           |
   |                           |                           |
   |                           |                           |-- 10. 发起通话
   |                           |                           |    目标: patient_2
   |                           |                           |
   |<-- 11. 收到来电 ------------------------------------ IM服务器
   |                           |                           |
   |-- 12. 接听/拒绝            |                           |
   |                           |                           |

下一步

  1. 后端接口已创建
  2. 逻辑层方法已添加
  3. 修改小程序端 API 地址
  4. 测试后端接口
  5. 测试小程序端登录
  6. 测试 Web 端呼叫小程序

注意事项

  1. API 地址:根据实际部署环境修改
  2. 跨域配置:如果小程序和后端不在同一域名,需要配置 CORS
  3. HTTPS:生产环境必须使用 HTTPS
  4. 域名白名单:小程序需要在微信公众平台配置服务器域名
  5. 日志记录:已添加详细日志,方便调试

相关文件

  • 控制器:server/app/api/controller/TcmController.php
  • 逻辑层:server/app/adminapi/logic/tcm/DiagnosisLogic.php
  • 小程序端:wx/TUICallKit/pages/call.vue
  • 配置指南:MINIPROGRAM_SETUP_GUIDE.md