更新记录
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. 接入前必读
- 服务端必须用 Secret Key 创建 PaymentIntent,再把
client_secret和 Publishable Key 下发给 App。 client_secret和 Publishable Key 必须属于同一 Stripe 账号和同一环境(test / live)。- 含 Stripe 原生依赖时,请使用自定义基座或正式包测试;不要用未集成本插件的标准基座。
success只表示当前客户端支付流程完成;最终支付状态必须以服务端查询 PaymentIntent 或 Webhook 为准。- Apple Pay / Google Pay 默认关闭;不传
applePay/googlePay就是普通 PaymentSheet。 - Alipay 提供独立
presentAlipayAPI;Android 已集成支付宝 SDK,iOS 需配置myapp://safepay/形式的回跳。 - Pay 不受 Stripe PaymentSheet 支持,插件通过独立 `presentPay` API 调起;完整 app-to-app 验证必须使用 live mode。
- 同一时间只允许发起一个支付流程。收到
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:
- 在应用最终生成的
Info.plist中配置CFBundleURLSchemes;uni-app 项目应通过manifest.json的 iOS URL Scheme 配置或对应原生配置完成,不要只修改示例值。 - 调用时传入完整
returnURL,如myapp://stripe-redirect。 - 插件已提供导出的
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
启用前需要:
- 在 Apple Developer 创建 Merchant ID,如
merchant.com.example.app。 - 为 App ID 启用 Apple Pay,并关联该 Merchant ID。
- 在 Stripe Dashboard 配置 Apple Pay iOS certificate。
- 复制
utssdk/app-ios/UTS.entitlements.example为utssdk/app-ios/UTS.entitlements,把merchant.com.example.app改为你的 Merchant ID。 - 调用
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。
接入前需要:
- 在 Stripe Dashboard 启用 Alipay。
- 服务端创建支持
alipay的 PaymentIntent,例如启用automatic_payment_methods[enabled]=true,或显式设置payment_method_types: ['alipay']。 - Android 已在插件中依赖支付宝 SDK:
com.alipay.sdk:alipaysdk-android:15.8.42,用于 Stripe Android 的 app-to-app Alipay flow。 - iOS 需要注册 URL Scheme,并传入形如
myapp://safepay/的returnURL;Alipay iOS 回跳要求 host 为safepay。 - 支付宝 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`。
接入前需要:
- 在 Stripe Dashboard 启用 Pay,服务端创建支持 `_pay` 的 PaymentIntent。
- 在微信开放平台创建移动应用,取得
wx...格式 AppID;Android 的应用包名与签名、iOS 的 Bundle ID 等信息必须和开放平台配置一致。 - Android 已在
app-android/libs内置 Stripe Pay23.6.0AAR,并依赖 `com.tencent.mm.opensdk:-sdk-android-without-mta:6.7.0。使用本地 AAR 是为了兼容仅配置阿里云 Maven 镜像的 HBuilder 云端打包环境;Stripe 模块负责微信回调,不需要业务方另建WXPayEntryActivity`。 - iOS 使用插件内置的 Stripe iOS SDK 打开微信,不需要额外引入腾讯微信 SDK;但必须把实际的微信 AppID(如
wx1234567890abcdef)注册为应用 URL Scheme。插件已声明查询微信所需的 URL schemes,并由TTStripePayHookProxy把回跳交给 Stripe。 - Stripe 测试模式只返回模拟参数,微信 App 无法识别。app-to-app 流程须用
pk_live_和 live PaymentIntent 在安装并登录微信的真机上测试。 - *** 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 官方示例后端:
POSThttps://stripe-mobile-payment-sheet.stripedemos.com/checkout- 响应含
publishableKey、paymentIntent、customer、ephemeralKey。 - 演示
returnURL为payments-example://stripe-redirect,iOS 需保留或追加payments-examplescheme。 - 该接口不下发 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 为准。 |

收藏人数:
购买源码授权版(
试用
使用 HBuilder 导入示例项目
赞赏(1)
下载 1041
赞赏 4
下载 12710922
赞赏 1957
赞赏
京公网安备:11010802035340号