更新记录

1.0.8(2026-09-24)

新增 Android/iOS 微信支付与支付宝支付支持

1.0.6(2026-09-20)

更新 插件信息

1.0.4(2026-06-03)

支持可选启用 Apple Pay / Google Pay

查看更多

平台兼容性

uni-app(4.87)

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 6.0 1.0.0 13 1.0.0 ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

uni-app x(4.87)

Chrome Safari Android Android插件版本 iOS iOS插件版本 鸿蒙 微信小程序
× × 6.0 1.0.0 13 1.0.0 × ×

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
× × × √

tt-stripe-pay

uni-app / uni-app x 的 Stripe 支付插件:在 iOS、Android App 内调起 PaymentSheet、Alipay 或 * Pay。需服务端创建 PaymentIntent 并下发 client_secret**。


1. 接入前必读

  1. 服务端必须用 Secret Key 创建 PaymentIntent,再把 client_secret 和 Publishable Key 下发给 App。
  2. client_secret 和 Publishable Key 必须属于同一 Stripe 账号和同一环境(test / live)。
  3. 含 Stripe 原生依赖时,请使用自定义基座或正式包测试;不要用未集成本插件的标准基座。
  4. success 只表示当前客户端支付流程完成;最终支付状态必须以服务端查询 PaymentIntent 或 Webhook 为准。
  5. Apple Pay / Google Pay 默认关闭;不传 applePay / googlePay 就是普通 PaymentSheet。
  6. Alipay 提供独立 presentAlipay API;Android 已集成支付宝 SDK,iOS 需配置 myapp://safepay/ 形式的回跳。
  7. Pay 不受 Stripe PaymentSheet 支持,插件通过独立 `presentPay` API 调起;完整 app-to-app 验证必须使用 live mode。
  8. 同一时间只允许发起一个支付流程。收到 complete 回调前,请禁用所有支付按钮,避免重复确认 PaymentIntent 或覆盖原生回调。

内置 SDK 与最低系统版本

平台 最低版本 内置 SDK
Android API 23 Stripe Android 23.6.0、本地内置 Stripe *** Pay 23.6.0 AAR、微信 OpenSDK 6.7.0、支付宝 SDK 15.8.42
iOS iOS 13 Stripe iOS 25.11.0(插件内置 frameworks)

更新插件、修改 URL Scheme 或原生配置后,必须重新制作自定义基座或重新打正式包。

服务端创建 PaymentIntent

Secret Key 只能保存在服务端,严禁放入 App。下面是最小化 curl 示例;每笔新订单应创建或取得自己对应的 PaymentIntent,已成功的 PaymentIntent 不能拿给另一个支付按钮重复使用。

支付宝:

curl https://api.stripe.com/v1/payment_intents \
  -u 'sk_live_xxx:' \
  -d amount=1099 \
  -d currency=cny \
  -d 'payment_method_types[]=alipay'

微信支付:

curl https://api.stripe.com/v1/payment_intents \
  -u 'sk_live_xxx:' \
  -d amount=1099 \
  -d currency=cny \
  -d 'payment_method_types[]=***_pay'

服务端只向 App 返回 Publishable Key 和 client_secret,例如:

{
  "publishableKey": "pk_live_xxx",
  "paymentIntentClientSecret": "pi_xxx_secret_xxx"
}

生产环境至少监听 payment_intent.succeeded、payment_intent.payment_failed 和 payment_intent.canceled,并在服务端按 PaymentIntent ID 幂等更新订单。


2. iOS:外跳回 App(returnURL)

启用会跳出 App 的支付方式时,建议配置自定义 URL Scheme,并传入同 scheme 的 returnURL:

  1. 在应用最终生成的 Info.plist 中配置 CFBundleURLSchemes;uni-app 项目应通过 manifest.json 的 iOS URL Scheme 配置或对应原生配置完成,不要只修改示例值。
  2. 调用时传入完整 returnURL,如 myapp://stripe-redirect。
  3. 插件已提供导出的 TTStripePayHookProxy,用于把 iOS open URL 回调交给 Stripe;业务代码不需要主动调用它,但更新插件后必须重新打包含该插件的自定义基座/正式包。

不同用途可以放在同一个 CFBundleURLTypes 数组中:PaymentSheet 使用业务自定义 scheme;Alipay 的 URL host 必须是 safepay;*** Pay 的 scheme 必须是微信 AppID(wx...)。

只测不外跳的卡支付时,returnURL 可不传。


3. Apple Pay / Google Pay(可选)

iOS:启用 Apple Pay

启用前需要:

  1. 在 Apple Developer 创建 Merchant ID,如 merchant.com.example.app。
  2. 为 App ID 启用 Apple Pay,并关联该 Merchant ID。
  3. 在 Stripe Dashboard 配置 Apple Pay iOS certificate。
  4. 复制 utssdk/app-ios/UTS.entitlements.example 为 utssdk/app-ios/UTS.entitlements,把 merchant.com.example.app 改为你的 Merchant ID。
  5. 调用 presentPaymentSheet 时传入同一个 merchantId。

applePay.merchantCountryCode 是商户业务国家/地区代码,不是用户所在地。

UTS.entitlements 示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.developer.in-app-payments</key>
    <array>
        <string>merchant.com.example.app</string>
    </array>
</dict>
</plist>

不需要 Apple Pay 时,不要创建 UTS.entitlements,或不要包含 com.apple.developer.in-app-payments。可以保留有效的空 plist,但不要保留零字节空文件。

Android:启用 Google Pay

插件已声明 Google Pay API:

<meta-data
    android:name="com.google.android.gms.wallet.api.enabled"
    android:value="true" />

调用时传入 googlePay 即可启用。测试环境设置 testEnv: true。不使用 Google Pay 时不需要删除上面的 meta-data;只要不传 googlePay,插件不会启用 Google Pay。

googlePay.merchantCountryCode 是商户业务国家/地区代码。currencyCode 对 PaymentIntent 可选但建议传,对 SetupIntent 必填。Google Pay 需在支持地区用 Android 真机测试,并登录已配置 Google Wallet 的账号。


4. Alipay(支付宝,可选)

插件提供独立的 presentAlipay API,不走 PaymentSheet 列表选择,直接确认服务端创建的 Alipay PaymentIntent。

接入前需要:

  1. 在 Stripe Dashboard 启用 Alipay。
  2. 服务端创建支持 alipay 的 PaymentIntent,例如启用 automatic_payment_methods[enabled]=true,或显式设置 payment_method_types: ['alipay']。
  3. Android 已在插件中依赖支付宝 SDK:com.alipay.sdk:alipaysdk-android:15.8.42,用于 Stripe Android 的 app-to-app Alipay flow。
  4. iOS 需要注册 URL Scheme,并传入形如 myapp://safepay/ 的 returnURL;Alipay iOS 回跳要求 host 为 safepay。
  5. 支付宝 Android SDK 不支持 Stripe 测试支付的完整链路,完整验证需使用 live mode;最终支付状态仍以服务端查询 PaymentIntent 或 Webhook 为准。

支付宝不要求开发者另外引入原生 SDK。Android 依赖已随插件打包;iOS 由 Stripe SDK 打开支付宝 App,未安装支付宝时可进入 WebView 流程。

调用示例:

stripePay.presentAlipay({
    publishableKey: 'pk_live_xxx',
    paymentIntentClientSecret: 'pi_xxx_secret_xxx',
    // #ifdef APP-IOS
    returnURL: 'myapp://safepay/',
    // #endif
    success: () => {
        /* 建议服务端再查 PaymentIntent */
    },
    fail: (err) => {
        console.error(err.errCode, err.errMsg);
    },
});

不需要支付宝的用户,只要服务端/Stripe Dashboard 不启用 alipay,并且不调用 presentAlipay 即可;但 Android 依赖会随插件一起参与打包。


5. *** Pay(微信支付,可选)

Stripe 的移动端 PaymentSheet 不展示 Pay,因此插件提供独立的 `presentPayAPI。服务端创建的 PaymentIntent 必须支持***_pay,客户端传入微信开放平台移动应用的appId`。

接入前需要:

  1. 在 Stripe Dashboard 启用 Pay,服务端创建支持 `_pay` 的 PaymentIntent。
  2. 在微信开放平台创建移动应用,取得 wx... 格式 AppID;Android 的应用包名与签名、iOS 的 Bundle ID 等信息必须和开放平台配置一致。
  3. Android 已在 app-android/libs 内置 Stripe Pay 23.6.0 AAR,并依赖 `com.tencent.mm.opensdk:-sdk-android-without-mta:6.7.0。使用本地 AAR 是为了兼容仅配置阿里云 Maven 镜像的 HBuilder 云端打包环境;Stripe 模块负责微信回调,不需要业务方另建WXPayEntryActivity`。
  4. iOS 使用插件内置的 Stripe iOS SDK 打开微信,不需要额外引入腾讯微信 SDK;但必须把实际的微信 AppID(如 wx1234567890abcdef)注册为应用 URL Scheme。插件已声明查询微信所需的 URL schemes,并由 TTStripePayHookProxy 把回跳交给 Stripe。
  5. Stripe 测试模式只返回模拟参数,微信 App 无法识别。app-to-app 流程须用 pk_live_ 和 live PaymentIntent 在安装并登录微信的真机上测试。
  6. *** Pay 属于异步支付方式。客户端 success 后仍必须以服务端查询 PaymentIntent 或 Stripe Webhook 为最终依据。

微信支付不要求开发者另外引入原生 SDK。Android 不要自行创建 WXPayEntryActivity,避免与 Stripe *** Pay 模块的回调 Activity 冲突。

iOS 的 URL Scheme 配置示例(把占位值替换为自己的 AppID,可与现有 Stripe/Alipay scheme 并存):

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

调用示例:

stripePay.present***Pay({
    publishableKey: 'pk_live_xxx',
    paymentIntentClientSecret: 'pi_xxx_secret_xxx',
    appId: 'wx1234567890abcdef',
    success: () => {
        /* 建议服务端再查 PaymentIntent */
    },
    fail: (err) => {
        console.error(err.errCode, err.errMsg);
    },
});

支付方式测试矩阵

支付方式 Android 测试模式 iOS 测试模式 真实 App-to-App 验证
PaymentSheet 卡支付 支持 支持 按 Stripe 测试卡/正式卡规则
Alipay 支付宝 Android SDK 不支持完整测试支付 可按 Stripe 返回的测试流程联调回跳 Android 完整流程使用 live mode
*** Pay 微信无法识别 Stripe 测试参数 微信无法识别 Stripe 测试参数 两端均需 live mode、真机和已登录微信

6. PaymentSheet 代码示例

// #ifdef APP-ANDROID || APP-IOS
import { getTTStripePay } from '@/uni_modules/tt-stripe-pay';
// #endif

const stripePay = getTTStripePay();

stripePay.presentPaymentSheet({
    publishableKey: 'pk_test_xxx',
    paymentIntentClientSecret: 'pi_xxx_secret_xxx',
    merchantDisplayName: '我的商户',
    returnURL: 'myapp://stripe-redirect',
    customerId: 'cus_xxx',
    customerEphemeralKeySecret: 'ek_test_xxx',
    // #ifdef APP-IOS
    applePay: {
        merchantId: 'merchant.com.example.app',
        merchantCountryCode: 'US',
    },
    // #endif
    // #ifdef APP-ANDROID
    googlePay: {
        merchantCountryCode: 'US',
        currencyCode: 'USD',
        testEnv: true,
    },
    // #endif
    success: () => {
        /* 建议服务端再查 PaymentIntent */
    },
    fail: (err) => {
        console.error(err.errCode, err.errMsg);
    },
    complete: null,
});

类型见 utssdk/interface.uts。


7. API:presentPaymentSheet

参数 必填 说明
publishableKey 是 Stripe Publishable Key,pk_test_ / pk_live_
paymentIntentClientSecret 二选一 PaymentIntent 的 client_secret
setupIntentClientSecret 二选一 SetupIntent 的 client_secret
merchantDisplayName 否 收银台标题,默认 App
allowsDelayedPaymentMethods 否 是否允许延迟支付方式,默认 true
primaryButtonLabel 否 主按钮文案
paymentMethodLayout 否 automatic / horizontal / vertical
linkDisplay 否 automatic / never
defaultBillingDetails 否 预填账单姓名、邮箱、电话、地址
billingDetailsCollectionConfiguration 否 控制账单信息采集策略
returnURL 否 iOS 外跳回 App 的 URL
customerId 否 与 customerEphemeralKeySecret 成对传入
customerEphemeralKeySecret 否 Customer 的 Ephemeral Key secret
applePay 否 iOS Apple Pay 配置;不传则不启用
googlePay 否 Android Google Pay 配置;不传则不启用
success / fail / complete 否 回调;取消走 fail,errCode 为 102

applePay

参数 必填 说明
merchantId 是 Apple Merchant ID;须与 UTS.entitlements 一致
merchantCountryCode 是 商户业务国家/地区代码,如 US、SG
buttonType 否 Apple Pay 按钮类型,如 plain、buy、checkout,默认 plain
paymentSummaryItems 否 Apple Pay 授权页摘要项,包含 label、amount、type

googlePay

参数 必填 说明
merchantCountryCode 是 商户业务国家/地区代码,如 US、SG
currencyCode 否 币种代码,如 USD、SGD;PaymentIntent 可选,SetupIntent 必填
testEnv 否 true 使用 Test 环境;默认 false 使用 Production

presentAlipay

参数 必填 说明
publishableKey 是 Stripe Publishable Key,须与 PaymentIntent 同环境
paymentIntentClientSecret 是 支持 alipay 的 PaymentIntent client_secret
returnURL iOS 必填 形如 myapp://safepay/,并注册同 scheme
success / fail / complete 否 回调;取消/未完成走 fail,errCode 为 102

present***Pay

参数 必填 说明
publishableKey 是 Stripe live Publishable Key,须与 PaymentIntent 同环境
paymentIntentClientSecret 是 支持 ***_pay 的 live PaymentIntent client_secret
appId 是 微信开放平台移动应用 AppID,如 wx1234567890abcdef
success / fail / complete 否 回调;取消/未完成走 fail,errCode 为 102

8. 演示联调(可选)

Stripe 官方示例后端:

  • POST https://stripe-mobile-payment-sheet.stripedemos.com/checkout
  • 响应含 publishableKey、paymentIntent、customer、ephemeralKey。
  • 演示 returnURL 为 payments-example://stripe-redirect,iOS 需保留或追加 payments-example scheme。
  • 该接口不下发 Apple Pay / Google Pay 配置;钱包测试需手动填写参数。
  • 该官方演示接口创建的是 PaymentSheet 测试 PaymentIntent,不能直接用于支付宝或微信支付;这两种支付请使用自有服务端创建对应 PaymentIntent。
  • 示例页在支付完成前会禁用全部支付按钮,业务项目也应采用相同方式防止重复提交。

tt-stripe-demo 内「拉取官方演示数据」可一键填入。

发布前检查清单

  • [ ] Stripe Dashboard 已启用计划使用的支付方式,账户国家和结算币种满足要求。
  • [ ] App 使用自有服务端创建 PaymentIntent,客户端未包含 Secret Key。
  • [ ] 服务端已处理 Stripe Webhook,并按 PaymentIntent ID 幂等更新订单。
  • [ ] 已重新制作包含当前插件版本的自定义基座或正式包。
  • [ ] Android 微信开放平台中的包名、正式签名和 AppID 与安装包一致。
  • [ ] iOS 微信开放平台 Bundle ID 正确,并把 wx... AppID 注册为 URL Scheme。
  • [ ] iOS Alipay 的业务 URL Scheme 已注册,传入值符合 scheme://safepay/。
  • [ ] 已在真机分别验证成功、取消、支付失败、未安装目标 App 和网络异常。
  • [ ] 已根据 Stripe、支付宝、微信 SDK 的实际行为核对应用商店隐私披露、第三方 SDK 清单和数据安全表单。

9. 错误码(errSubject: TTStripePay)

errCode 说明
100 参数无效
102 用户取消 / 关闭收银台
103 iOS 无法取得 UIViewController
104 Android 无法取得 Activity
105 Android 无法取得 Application Context
106 Android PaymentSheet 未就绪
999 Stripe 或其它错误(见 errMsg)
1000 平台不支持

10. 常见问题

问题 处理
iOS 一点支付就崩 检查 PI 是否关联 Customer 但未传 customerId + customerEphemeralKeySecret;再检查是否用了未集成插件的标准基座。
Apple Pay 不显示 检查 applePay、UTS.entitlements、Merchant ID、provisioning profile、设备和银行卡。
Google Pay 不显示 检查 googlePay、国家/币种、Android 真机、Google Wallet;生产环境还需完成 Google Pay 发布配置。
PaymentSheet 不显示微信支付 Stripe 移动端 PaymentSheet 不支持 Pay,请调用独立的 `presentPay`。
微信无法拉起或返回失败 使用 live PaymentIntent;检查 Stripe 是否启用 *** Pay、AppID、Android 包名/签名或 iOS Bundle ID、真机微信登录状态。
Android 微信提示签名不一致 微信开放平台登记的签名必须与当前安装包一致;debug 和 release 签名通常不同。
iOS 微信提示 scheme 未注册 在打包前把本次调用的 appId(wx...)加入应用 URL Scheme,然后重新制作基座/正式包。
支付宝无法回到 iOS App 检查 URL Scheme 是否注册、returnURL 是否为同一 scheme 且 host 为 safepay。
提示 PaymentIntent 不支持当前支付方式 服务端为该订单重新创建包含 alipay 或 ***_pay 的 PaymentIntent,不要使用 PaymentSheet 官方演示 PI。
点击两次后回调异常 支付开始后禁用所有支付按钮,收到 complete 前不要发起第二个支付流程。
能否只在客户端收款 不能,PaymentIntent 必须由服务端创建。
客户端 success 是否等于到账 不一定,以服务端状态与 Webhook 为准。

隐私、权限声明

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

无

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

无

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

无