更新记录

1.0.1(2026-09-18)

更新插件信息

1.0.0(2026-09-18)

支持 抖音支付


平台兼容性

uni-app(5.24)

Vue2 Vue2插件版本 Vue3 Vue3插件版本 Chrome Safari app-vue app-vue插件版本 app-nvue app-nvue插件版本 Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本
1.0.0 1.0.0 × × 1.0.0 1.0.0 5.0 1.0.0 12 1.0.0 20 1.0.0
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

uni-app x(5.24)

Chrome Safari Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本 微信小程序
× × 5.0 1.0.0 12 1.0.0 20 1.0.0 -

【Android+iOS+Harmony】抖音支付

抖音支付 UTS 插件,为 uni-app 和 uni-app x 提供 Android、iOS、HarmonyOS 三端统一支付接口。

支持服务端预下单结果透传、抖音客户端拉起和支付结果回调。插件不在客户端生成签名,不保存商户私钥。

目录

接入前准备

  1. 在抖音支付商家平台开通 App 支付产品。
  2. 在抖音开放平台创建或配置移动应用,获取支付使用的 appid
  3. 按平台配置应用包名、签名、Bundle ID、HarmonyOS 包名和签名信息。
  4. 服务端调用抖音支付预下单接口,取得以下客户端支付参数:
    • appid
    • partnerid
    • prepayid
    • package
    • noncestr
    • timestamp
    • sign
  5. 客户端不要自行生成 sign,也不要把商户私钥放在客户端。

官方文档请以项目提供的本地抖音支付文档为准,重点参考 iOS、Android、HarmonyOS SDK 接入,以及预下单、签名、支付结果通知和订单查询接口。

项目配置

插件内部的 utssdk/*/config.json 只负责声明对应平台的原生 SDK 依赖。HarmonyOS 的 OHPM 仓储属于项目级配置,必须放在项目根目录的 harmony-configs/.ohpmrc,不能只修改插件目录中的配置。

HarmonyOS OHPM 仓储

项目必须配置 harmony-configs/.ohpmrc。推荐内容如下:

publish_registry=http://artifact.bytedance.com/repository/byted-ohpm/
registry=https://ohpm.openharmony.cn/ohpm/,http://artifact.bytedance.com/repository/byted-ohpm/

不要把 https://ohpm.byted.org/repos/ohpm/ 放在 registry 中。该地址连接不稳定时会导致 @douyin/dypay_open_sdk 及其间接依赖下载失败,并出现:

ECONNRESET Client network socket disconnected before secure TLS connection was established

如使用命令行安装依赖,可以执行:

ohpm config set registry https://ohpm.openharmony.cn/ohpm/,http://artifact.bytedance.com/repository/byted-ohpm/

云打包时请确认项目中的 harmony-configs/.ohpmrc 已随项目提交。

云打包前检查以下内容:

  1. harmony-configs/.ohpmrc 位于项目根目录,而不是 uni_modules/tt-douyin-pay/ 目录。
  2. registry 至少包含 https://ohpm.openharmony.cn/ohpm/http://artifact.bytedance.com/repository/byted-ohpm/
  3. 工程依赖版本与插件 app-harmony/config.json 中的 1.1.3 一致。
  4. 修改仓储后重新生成或重新上传 HarmonyOS 云打包工程,避免继续使用旧的依赖缓存。

HarmonyOS module.json5

如果项目存在 harmony-configs/entry/src/main/module.json5,该文件会覆盖默认配置,必须保留项目原有的完整配置,只补充抖音支付需要的内容:

{
  "module": {
    "querySchemes": [
      "snssdk1128",
      "douyinopensdk"
    ],
    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }
    ]
  }
}

上面是需要合并的字段示例,不是完整的 module.json5。使用时请保留项目生成的完整 moduleabilitiespagesskills 配置,并确认:

  • querySchemes 同时包含 snssdk1128douyinopensdk
  • 需要通过 App Link 回调时,在对应 skills.uris 中配置实际 HTTPS 域名和路径。
  • 保留 ohos.permission.INTERNET

示例工程中的 www.example.compath1 只是占位值,发布前必须替换成实际配置。

iOS Info.plist

编辑 app-ios/Info.plist,将 your_client_key 替换为抖音开放平台配置的实际回调 Scheme:

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleTypeRole</key>
    <string>Editor</string>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>your_client_key</string>
    </array>
  </dict>
</array>

同时,registerscheme 必须传同一个值。插件已保留 snssdk1128 查询白名单,用于检测抖音客户端是否可用。

Android

Android 依赖和 Maven 仓库由插件配置自动处理。请确保抖音开放平台登记的包名和签名与最终 App 完全一致,并使用自定义基座或云打包 App 真机测试。

快速开始

import { getTTDouyinPaySDK } from '@/uni_modules/tt-douyin-pay'

const sdk = getTTDouyinPaySDK()

sdk.register({
  appid: '你的抖音支付 AppID',
  scheme: 'iOS 回调 Scheme,Android/Harmony 传空字符串',
  universalLink: '未配置时传空字符串',
  success: () => {
    console.log('抖音支付 SDK 初始化成功')
  },
  fail: (error) => {
    console.error('抖音支付 SDK 初始化失败', error)
  },
  complete: () => {}
})

sdk.pay({
  appid: '你的抖音支付 AppID',
  partnerid: '服务端预下单返回的 partnerid',
  prepayid: '服务端预下单返回的 prepayid',
  package: 'DYPay',
  noncestr: '服务端签名使用的随机字符串',
  timestamp: '服务端签名使用的时间戳',
  sign: '服务端计算的签名',
  success: (result) => {
    console.log('支付客户端回调', result)
  },
  fail: (error) => {
    console.error('支付失败、取消或结果未知', error)
  },
  complete: (result) => {
    console.log('支付流程结束', result)
  }
})

interface.uts 的公开 API 不使用 Promise,统一通过 successfailcomplete 回调返回结果。

API

getTTDouyinPaySDK

getTTDouyinPaySDK(): TTDouyinPaySDK

返回支付 SDK 单例。

isInstall

sdk.isInstall(): boolean

检查当前平台的抖音支付客户端是否可用。

  • Android:调用官方 SDK 的可用性判断。
  • iOS:检查 snssdk1128:// 是否可以打开。
  • HarmonyOS:官方 SDK 不提供同步检测接口,返回 true,最终以 openDypay 结果为准。

register

sdk.register(options: TTDouyinPayRegisterOptions): void
参数 类型 说明
appid string 抖音支付 AppID,必填。
scheme string iOS 回调 Scheme,iOS 必填;Android/Harmony 传空字符串。
universalLink string 预留的 iOS Universal Link,未配置时传空字符串。
success callback/null 初始化成功回调。
fail callback/null 初始化失败回调。
complete callback/null 初始化结束回调。

pay

sdk.pay(options: TTDouyinPayOptions): void

支付参数必须来自服务端预下单接口,详见下方支付参数

支付参数

参数 类型 说明
appid string 抖音支付 AppID,必须与 register 的值一致。
partnerid string 抖音支付商户号。
prepayid string 预下单返回的支付交易会话 ID,官方文档说明有效期通常为 2 小时。
package string 支付产品类型,通常使用服务端返回值,常见值为 DYPay
noncestr string 参与签名的随机字符串。
timestamp string 参与签名的时间戳字符串。
sign string 服务端使用签名规则计算出的签名值。
success callback/null 客户端成功回调。
fail callback/null 客户端失败、取消或未知结果回调。
complete callback/null 支付流程结束回调。

回调和支付状态

插件会将官方 SDK 的 resultCode 归一化为 status

resultCode status 说明
0 success 客户端支付调用成功。
1 cancel 用户取消支付。
2 failed 其他错误。
3 unknown 抖音未返回明确结果。
100 unavailable 支付客户端不可用或未安装。
103 duplicate 重复支付被拦截。

成功回调中的 status == 'success' 只表示客户端 SDK 返回成功,不等于服务端订单最终支付成功。

商户必须以后端的支付结果通知或订单查询结果作为最终依据。对于 unknown、网络中断、App 被杀死、用户返回超时等情况,不要直接关闭订单或重复创建订单,应使用原订单号查询支付状态。

回调对象可能包含:

  • resultCode:官方 SDK 返回的字符串错误码。
  • status:插件归一化后的状态。
  • errorMsg:错误描述,可能为空。
  • extraParams:官方 SDK 扩展参数,可能为空。
  • rawData:插件保留的原始回调字段。

错误码

errCode 说明
101 未安装抖音支付可用客户端。
102 SDK 未初始化或初始化失败。
201 appid 为空。
202 iOS scheme 为空。
203 无法获取当前 Activity 或 ViewController。
301 prepayid 为空。
302 package 为空。
303 noncestr 为空。
304 timestamp 为空。
305 sign 为空。
306 partnerid 为空。
307 支付参数中的 appid 与初始化时不一致。
308 已有支付正在进行。
601 官方 SDK 返回支付失败、取消或未知结果。
999 其他异常。

错误对象同时可能包含 resultCodeerrorMsgextraParamsrawData,用于排查原生 SDK 返回信息。

常见问题

iOS 报 Unable to find module dependency: 'DypaySDK'

确认 app-ios/config.json 同时包含:

  • dependencies-pod-sources
  • DypaySDK
  • version: 1.1.0.4

并清理旧的 unpackage 产物后重新云打包。

iOS 报 has been renamed to

插件当前已适配 DypaySDK 1.1.0.4 的 Swift 方法映射:

openDypay(withInfo:from:resultCallback:)
processDypayResult(with:callback:)

不要根据旧 Objective-C 方法名自行修改插件源码。

HarmonyOS 报 ECONNRESET 或 OHPM 安装失败

检查项目根目录的 harmony-configs/.ohpmrc

registry=https://ohpm.openharmony.cn/ohpm/,http://artifact.bytedance.com/repository/byted-ohpm/

确保日志不再优先访问 https://ohpm.byted.org/repos/ohpm/,并重新生成 Harmony 工程后安装依赖。

Android 报 onResultMap 类型错误

请使用插件当前版本的纯 UTS 实现,不要自行增加 Java/Kotlin 回调辅助类。官方回调签名是:

override fun onResult(map: Map<String, String>)

云打包前清理旧的 unpackage/dist 产物,避免使用历史生成代码。

为什么客户端成功后还要查订单

客户端回调只表示抖音客户端完成了当前 SDK 流程。最终支付状态以服务端支付结果通知和订单查询为准,这是抖音支付官方接入要求。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: