小程序开放平台

文档中心
操作指南
准备
申请专业号
创建小程序
添加项目成员
创建服务商
绑定开发小程序
授权
开发
发布
代商家调用接口说明
消息加解密
事件回调
商品笔记半层适配
查看咨询用户信息

创建服务商

开发
>
指南
>
操作指南
>
准备
>
创建服务商
>
更新时间:2024-11-29 16:55:09

小程序开放平台创建服务商。

开通服务商

注意

  • 只有具备企业资质的专业号能开通服务商功能,个人资质的专业号暂不开放开通服务商功能。
  • 服务商功能尚在内测中,暂不支持申请。

创建服务商

创建服务商

基础信息

服务商的基本信息取自用户账号的基本信息,不能修改。

服务商基础信息

开发资料

  1. 授权发起页域名
    • 用于商家小程序授权服务商的流程。
    • 授权完成后小红书会回调的服务商 URI,必须保证 URI 所属域名与该域名一致,不支持子域名。
    • 域名不需要带有 http:// 等协议前缀,必须是类似 www.xiaohongshu.com 的域名写法,不能配置路径与参数。
    • 域名不能填写 IP,不能是小红书的域名。
  2. 授权事件接收 URL
    • 用于接收小红书推送给服务商的事件,如授权变更(授予、解除)、验证票据 ticket
    • 在保存时小红书会发送请求进行消息校验,校验规则见下文,请保证配置时 URL 是可连通的。
  3. 消息验证 TOKEN
    • 用于在收到消息后进行验证,详见消息加解密
    • 最长为 32 位,只能是大小写字母和数字。
  4. 消息加密解密 KEY
    • 用于在收到消息后进行解密,详见消息加解密
    • 必须是 43 位字符串,只能是大小写字母和数字。
  5. 消息与事件接收 URL
    • 用于接收小红书推送的授权小程序相关的消息和事件。
    • 格式为 www.abc.com/aaa/$APPID$/bbb,其中 $APPID$ 会在实际推送过程中替换成真实的授权小程序 appid。
    • 在保存时小红书会发送请求进行消息校验,校验规则见下文,请保证配置时 URL 是可连通的。
  6. 小程序服务器域名
    • 内测阶段小程序的服务器域名不做限制,暂不需要配置。
  7. 小程序业务域名
    • 小程序 web-view 组件,只能打开已配置的业务域名下的页面,支持子域名。
    • 授权小程序在运行过程中,只有小程序配置的业务域名才能生效,服务商的业务域名不生效,所以服务商需要通过修改业务域名去设置授权小程序的业务域名。
    • 服务商最多可以添加 200 个业务域名,用;分割。
    • 在保存时会进行域名校验,校验规则见下文,请配置的时候保证域名根目录校验文件已存在且可以访问。
  8. IP白名单
    • 只有配置的 IP 才能进行请求小红书。
    • 必须是 IPv4,不支持 IPv6,不支持通配符,必须是公网。
    • 最多可以添加 100 个 IP,用;分割。

注意

  • 授权发起页域名授权事件接收 URL消息与事件接收 URL 的一级域名需一致。

开发资料

校验规则

  • 请确保每一个 URL 都支持 echo 校验。
    • 配置的 授权事件接收 URL消息与事件接收 URL 是否能正常访问。
    • 是否都支持了 echo 校验,具体校验见下文。
  • 请确保每一个域名下都放置了校验文件,并能正确访问。
    • 配置的每一个业务域名都能正常访问,并且每个服务根路径下面都放置了校验文件,校验时小红书会访问配置域名下面的校验文件,如果合法,则校验通过。(比如配置的是 xhs.cn;xhs.com ,校验时会向 xhs.cn/$filename.txt, xhs.com/$filename.txt 发起请求校验)
    • 小红书现只会发送 https 协议请求去验证,所以必须支持 https。
    • 重新下载校验文件,并确认一下放置在根服务器下的 txt 文件是否发生改变(这种情况一般不会发生)。

URL echo 校验

服务商配置提交后,小红书会向接入方填写的所有 url 发起一次 get 请求,请求参数包含 signature, echostr, nonce, timestamp,接入方需要通过 sha1 算法确认这次请求是否合法,如果确认本次请求合法,需要返回 echostr,小红书侧会根据返回的 echostr 跟发送时做比较,如果一致,则认为本次校验通过。( path 中存在 $APPID$ 的情况,echo 校验的时候并不会替换 $APPID$

javascript
  /**
   * @desc 下面会有一段伪代码片段展示接入方需要做哪些支持
   * @funcion echo
   * @param { signature } 加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
   * @param { echostr } 随机字符串
   * @param { nonce } 随机字符串
   * @param { timestamp } 时间戳
   * @return { echostr }
   */
  function echo () {
    // 获取请求的参数
    const { signature, echostr, nonce, timestamp } = query
    const token = '创建时配置的验证 token'

    // 将 token、timestamp、nonce 三个参数进行字典序排序 
    const str = sort([token, nonce, timestamp])
    // 将三个参数字符串拼接成一个字符串进行 sha1 加密 
    const localSign = sha1(str)

    // 开发者获得加密后的字符串可与 signature 对比,确认是小红书发起的正确请求,返回 echo 串,
    if (signature === localSign) {
      // 注意:返回时,请返回文本类型的 echostr
      return echostr
    }

    return ''
  }