钉钉小程序接入若依(只做增删改查,先不管工作台免登)

场景:钉钉小程序调用若依后端接口做业务增删改查;后端部署在这台轻量服务器,Nginx 代理/api,阿里云防火墙已经关闭 8080 公网。

网络层面

  1. 钉钉小程序不能直接访问 公网 IP:8080,8080 已经被防火墙封禁。
  2. 小程序请求域名填:http://你的公网IP/api(后续换成域名 HTTPS)
  • 链路:钉钉小程序 → 80 端口 (Nginx) → 127.0.0.1:8080若依后端。
  • 阿里云防火墙只需要开放 80、443,其余后端端口全部对内。

⚠️钉钉小程序生产环境强制要求 HTTPS 域名,裸 IP http 只能开发调试,上线必须域名 + SSL 证书。

两种鉴权方案(钉钉小程序)

方案 A:钉钉小程序 code2session(推荐,钉钉官方)

流程:

  1. 钉钉小程序前端调用 dd.getAuthCode() 获取 authCode
  2. 小程序把 authCode 传给你的若依后端接口
  3. 后端拿appKey + appSecret + authCode调用钉钉 openapi 接口 dingtalk.oapi.miniapp.userinfo.get 获取用户钉钉 userId
  4. 后端拿到钉钉 userId,匹配系统用户,返回 token 给小程序;
  5. 小程序后续所有增删改查请求头部带上 token,走若依原有Authorization鉴权。

这样复用若依完整权限体系(角色、菜单、数据权限),直接做业务增删改查。

方案 B:简单模式(仅内部使用,开发调试)

内部 5 人小程序,小程序请求 header 带上自定义标识,后端拦截器识别钉钉小程序请求,直接绑定固定内部账号 token。不建议上公网对外。

Nginx 关键配置(适配钉钉小程序,和你现有若依 Web 共用一套后端)

复制代码
server {
    listen 80;
    server_name 你的公网IP;

    # 若依web前端页面
    location / {
        root  /www/wwwroot/ruoyi-web;
        index index.html;
        try_files $uri $uri/ /index.html;
    }

    # 【钉钉小程序、web共用后端接口】全部转发本机8080
    location /api/ {
        proxy_pass http://127.0.0.1:8080/;
        proxy_set_header Host $host;
        proxy_set_header X‑Real‑IP $remote_addr;
        proxy_set_header X‑Forwarded‑For $proxy_add_x_forwarded_for;
    }
}

SpringBoot application.yml,tomcat 监听地址写127.0.0.1:8080不要 0.0.0.0,只允许本机 Nginx 访问后端。

yaml

复制代码
server:
  port: 8080
  address: 127.0.0.1

后端依赖 & 接口要点(若依 springboot)

  1. pom.xml 引入钉钉 SDK(或者直接 http 调用 openapi)

    com.aliyun dingtalk 2.0.25
  2. 配置文件填入钉钉小程序的 ding.app-keyding.app-secret

  3. 写一个 /api/ding/miniapp/login 接口:接收小程序传过来 authCode,换取钉钉 userId,匹配系统用户,返回若依 token。

  4. 小程序拿到 token,后续所有增删改查请求请求头:Authorization: Bearer xxxxxx,直接复用若依已写好的 controller,不用重写增删改查代码

钉钉小程序侧 request 请求示例

复制代码
//钉钉小程序 js
dd.request({
  url:"http://你的公网IP/api/ding/miniapp/login",
  method:"POST",
  data:{ authCode: res.authCode },
  success:(res)=>{
      //拿到token,存storage
      dd.setStorageSync('token',res.data.token)
  }
})

//后续业务查询
dd.request({
  url:"http://你的公网IP/api/xxx/list", //若依原有业务接口
  headers:{
    "Authorization":"Bearer "+dd.getStorageSync('token')
  }
})

留意的地方

  1. 不要小程序直接请求 :8080;防火墙已经封死,必须走/api经过 Nginx 代理。
  2. 钉钉小程序开发调试时,开发工具打开【不校验合法域名】;正式发布必须配置 HTTPS 域名。
  3. 小程序调用钉钉 openapi 的authCode一次性,只能使用一次,不能重复调用。
  4. 若依跨域:Nginx 或者后端配置跨域,允许钉钉小程序域名来源。
  5. 数据库用户表,增加字段 ding_user_id,保存钉钉小程序用户 ID,用于账号绑定。

重要提醒(这里是互联网对外服务)

  • 钉钉小程序鉴权不要前端硬编码 appSecret,appSecret 只能保存在后端,绝对不能暴露小程序前端
  • 所有增删改查全部复用若依的 token、角色权限控制,不要单独写一套无校验接口。
相关推荐
SelectDB技术团队1 天前
阶跃星辰 Agent 可观测:Apache Doris / SelectDB 的技术能力与实践
django·apache·知识图谱
万岳科技系统开发1 天前
医疗诊所小程序如何实现患者管理和会员运营?
java·小程序·apache
行业研究员6 天前
腾讯位置服务核心功能与应用场景解析
apache·lbs·腾讯位置服务
SeaTunnel7 天前
Apache SeaTunnel 提交一个任务都经过了什么?
java·大数据·服务器·apache·etl·seatunnel
SelectDB10 天前
基于 Apache Doris 搭建 RAG 系统:从基础 RAG 到知识图谱增强的完整实现与选型指南
apache
SelectDB10 天前
SelectDB Enterprise 4.0.5:企业级实时分析与 AI 数据底座怎么选?安全合规配置指南
apache
隔窗听雨眠10 天前
80TB电商数据迁移实录:从PostgreSQL分析困境到Apache Doris架构突围
postgresql·架构·apache
lsh曙光11 天前
Apache服务
apache
Norris Huang12 天前
Icevue:为 Apache Iceberg REST Catalog 打造一个轻量、只读的可视化入口
apache