更新记录
1.0.2(2026-08-09)
新增
- 小程序支付支持:微信/支付宝小程序走
uni.requestPayment(平台内置支付,无需原生 SDK),云函数支持 JSAPI 下单 + openid - 抖音小程序支持:客户端已封装(走
uni.requestPayment),云函数端需自行接入抖音开放平台支付 API - Vue2 项目支持:uni-app Vue2 编译器可调用插件,覆盖更多存量老项目
已知限制
- 抖音支付云函数端暂未接入
- HarmonyOS 规划中
- 百度 / 快手 / 京东 / QQ 小程序、快应用暂不支持
1.0.1(2026-08-09)
新增
- 原生密码学桥接(NativeCrypto):Android RSA 签名/验签 + AES-GCM 加解密;iOS 提供 CryptoKit/Security 接入示例
- 原生支付唤起桥接:Android/iOS 微信 PayReq、支付宝 PayTask/payOrder 完整调用逻辑(集成官方 SDK 后启用)
- uniCloud 服务端云函数
uni-pay-server:pay/h5pay/query/refund/close 五接口,基于官方 uni-pay,支持支付宝沙箱环境 - 商户配置模板:
uni-config-center/uni-pay/config.js - 接入清单文档:
docs/INTEGRATION.md(SDK 集成、云函数部署、商户配置、真机验证)
修复
- 移除未经验证的手写 AES(上一版标注的已知限制),改由原生 AES-GCM 提供,商户配置加密不再存在伪安全风险
- 修复云函数入口
module.exports覆盖exports.main导致部署后报错问题 - 修复云函数 npm 依赖版本号错误(@dcloudio/unipay 实际最新为 1.0.25)
已知限制
- 原生唤起需集成微信/支付宝官方 SDK 后启用(见 docs/INTEGRATION.md)
- iOS 端原生验签/AES/SDK 唤起为占位实现,需按接入文档启用
- 小程序 / HarmonyOS 平台暂不支持
1.0.0(2026-08-09)
新增
- 统一封装微信 / 支付宝 APP 支付 + H5 降级 + 退款全能力
- 后台保活回调层:Android 前台服务 + MQTT/推送长连接接收支付结果
- 离线联网自动补单(本地订单状态机 + pending 队列)
- 订单幂等锁:杜绝重复发起、重复扣款
- UniRisk 风控前置拦截(批量小号、异地高频)
- 动态多商户运行时切换,无需重新打包
- 双层签名验签(服务端签名 / 本地加签双模式)
- 本地日志留痕 + 生产环境脱敏开关
修复
- 修复 UTS 合规性问题:数据模型由
interface统一调整为type(对象字面量仅支持 type) - 修复无类型未初始化变量、函数提升、
any裸引用等编译阻断问题 - 修复支付推送可伪造问题:推送签名校验失败时改走服务端补单确认
- 修复 H5 降级在 App 端
window.open崩溃问题
已知限制
- iOS 端原生验签 / SDK 唤起为占位实现,需接入 WechatOpenSDK / AlipaySDK 后启用
- 手写 AES 未验证,生产建议改用原生 AES
- 小程序 / HarmonyOS 平台暂不支持
平台兼容性
uni-app(3.8.1)
| Vue2 | Vue3 | Vue3插件版本 | Chrome | Chrome插件版本 | Safari | Safari插件版本 | app-vue | app-vue插件版本 | app-nvue | app-nvue插件版本 | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | √ | 1.0.0 | 66 | 1.0.2 | 12.2 | 1.0.2 | √ | 1.0.0 | √ | 1.0.0 | √ | 1.0.2 | √ | 1.0.2 | × |
| 微信小程序 | 微信小程序插件版本 | 支付宝小程序 | 支付宝小程序插件版本 | 抖音小程序 | 抖音小程序插件版本 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.2.0 | 1.0.2 | √ | 1.0.2 | √ | 1.0.2 | × | × | × | × | × | × | - | × | × |
uni-app x(3.8.1)
| Chrome | Safari | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|---|---|
| 66 | 12.2 | √ | 1.0.0 | √ | 1.0.0 | × | √ |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| √ | × | √ |
# paypro-pay 高阶聚合支付插件
企业级稳定聚合支付 UTS 插件:微信 APP 支付、支付宝 APP 支付、H5 降级、退款全能力,内置后台保活回调、风控拦截、动态多商户。
特性
- 统一封装微信 / 支付宝 APP 支付 + H5 降级 + 退款
- 独立保活回调层:前台服务 + MQTT 长连接接收支付结果推送
- 离线联网自动补单(本地订单状态机 + pending 队列)
- 订单幂等锁:杜绝重复发起 / 重复扣款
- UniRisk 风控前置拦截(批量小号、异地高频)
- 动态多商户切换,无需重新打包
- 全 UTS 实现,无原生碎片化兼容问题
环境要求
| 项目 | 要求 |
|---|---|
| HBuilderX | 4.71+(与 uts-compiler 版本匹配,禁止错位) |
| Android | SDK 34+,适配 Android 10~15 |
| iOS | Xcode 最新稳定版,适配 iOS 14+ |
| 微信支付 SDK / 支付宝 SDK | 官方最新稳定版 |
平台兼容性
| 平台 | 兼容性 | 说明 |
|---|---|---|
| uni-app x · App-Android | ✅ 完整支持 | 主目标平台,原生支付/保活/验签已接入 |
| uni-app x · App-iOS | ✅ 支持 | 桥接层已就绪,需集成 WechatOpenSDK / AlipaySDK framework |
| uni-app · App(vue2/vue3/nvue) | ✅ 支持 | UTS 插件可被 uni-app JS 调用,API 全量可用 |
| 微信小程序(uni-app / uni-app x) | ✅ 支持 | 走 uni.requestPayment,云函数 JSAPI 下单 |
| 支付宝小程序(uni-app) | ✅ 支持 | 走 uni.requestPayment,云函数 JSAPI 下单 |
| 抖音小程序(uni-app) | ⚠️ 部分 | 客户端已封装,云函数需自行接入抖音支付 API |
| H5 / Web | ⚠️ 部分(仅降级) | 无原生 SDK,仅提供 H5 支付跳转与查询/退款接口 |
| 百度/快手/京东/QQ 小程序 | ❌ 暂不支持 | 未实现 |
| HarmonyOS | ⏳ 规划中 | 需接入华为支付 SDK,后续版本支持 |
| 快应用 | ❌ 暂不支持 | 生态萎缩,未适配 |
说明:
√/x/-兼容性矩阵见package.json → uni_modules.platforms.client。
快速接入
1. 安装
将 paypro-pay 复制到项目 uni_modules/ 目录。
2. 初始化(App.vue onLaunch)
import { UniPay } from '@/uni_modules/paypro-pay'
UniPay.init({
risk: { apiUrl: 'https://your-server.com/risk', enabled: true },
autoKeepAlive: true
})
3. 注册商户(动态多商户)
UniPay.setMerchantConfig({
merchantId: 'm1',
name: '测试门店',
serverSign: true, // 推荐:服务端签名模式
signServerUrl: 'https://your-server.com/pay',
wx: { appId: 'wx...', mchId: '...', apiV3Key: '...', serialNo: '...', privateKey: '...' },
ali: { appId: '...', pid: '...', privateKey: '...', alipayPublicKey: '...' }
})
// 运行时切换商户,无需重新打包
UniPay.switchMerchant('m2')
4. 发起支付
try {
const res = await UniPay.pay({
payType: 'wx', // wx | ali
merchantId: 'm1',
orderNo: 'ORDER_NO_20240101_001', // 业务唯一订单号(幂等主键)
totalFee: 100, // 金额,单位:分
subject: '会员充值',
body: '黄金会员月卡',
notifyUrl: 'https://your-server.com/notify',
extra: { channel: 'home' }
})
console.log('唤起成功:', res.payMode) // app | h5
} catch (e) {
console.error('支付失败:', e.code, e.message)
}
5. 查询订单
const info = await UniPay.queryOrder('ORDER_NO_20240101_001', 'm1')
// info.status: unpaid | paid | refunded | closed
6. 退款
const res = await UniPay.refund({
orderNo: 'ORDER_NO_20240101_001',
refundNo: 'REFUND_001', // 退款单号(幂等)
refundFee: 100,
merchantId: 'm1',
reason: '用户申请退款'
})
// res.status: processing | success | failed
7. 保活 + 补单(可选)
// 启动保活(前台服务 + MQTT 订阅支付结果)
UniPay.startKeepAlive({ url: 'wss://mqtt.your-server.com', topic: 'uni-pay/notify' })
// 订阅支付结果通知
UniPay.onPayNotify((orderNo, status) => {
console.log('订单', orderNo, '状态:', status)
})
// 联网后手动触发补单
UniPay.syncPendingOrders()
// 导出日志排查
console.log(UniPay.exportLogs())
8. 小程序支付(微信 / 支付宝 / 抖音)
小程序端无需原生 SDK,插件自动走 uni.requestPayment(平台内置支付)。
微信小程序:发起支付前需先登录换取 openid 并存入本地:
// 1. 小程序登录(业务层调用 uni.login + 服务端 code2Session)
uni.login({
success: (res) => {
// 将 code 发给服务端换取 openid,成功后存储:
uni.setStorageSync('paypro_pay_openid', '用户openid')
}
})
// 2. 发起支付(payType 仍传 'wx')
const res = await UniPay.pay({ payType: 'wx', merchantId: 'm1', orderNo: 'NO1', totalFee: 100, subject: '商品', body: '', notifyUrl: '', extra: {} })
支付宝 / 抖音小程序:直接调用 UniPay.pay() 即可(payType 传 'ali' / 'toutiao')。
注意:小程序支付必须在
manifest.json配置对应小程序 appid,且云函数uni-pay-server需配置对应商户资质。抖音支付云函数端暂未接入,需自行实现抖音开放平台支付 API。
目录结构
paypro-pay/
├── common/ # 类型、错误码、日志、加解密工具
├── merchant/ # 动态多商户管理 + 加密存储
├── order/ # 订单幂等 + 本地状态机 + 补单队列
├── service/ # 渠道实现(wx/ali/h5)+ 支付调度 + 网络层
├── keepalive/ # 前台保活 + MQTT + 厂商电池优化引导
├── risk/ # UniRisk 风控对接
└── utssdk/ # 原生桥接层(Android/iOS SDK 适配)+ 统一出口
服务端接口约定
serverSign=true 时插件会调用以下接口(signServerUrl 为基底):
| 接口 | 用途 | 请求 | 响应 data |
|---|---|---|---|
POST {base}/pay |
预下单 | orderNo/totalFee/subject/body/merchantId/payType/notifyUrl/extra + tradeType(APP|JSAPI) + openid(小程序) | 唤起参数 |
POST {base}/query |
查询 | orderNo/merchantId/payType | { status, payTime, paidFee, tradeNo, refundStatus } |
POST {base}/refund |
退款 | orderNo/refundNo/refundFee/merchantId/payType/reason | { refundTradeNo, status } |
POST {base}/h5pay |
H5 降级 | 同 /pay | H5 跳转 URL |
统一返回结构:{ code: 0, message: 'ok', data: ... },code=0 表示成功。
tradeType=APP用于 App 支付;tradeType=JSAPI用于小程序/公众号支付(需传 openid)。
原生 SDK 集成
Android
- 微信支付:manifest.json App 模块配置微信支付,将
WXPayEntryActivity指向桥接回调;SDK jar/aar 放入utssdk/app-android/libs/ - 支付宝:集成 alipaySdk aar 放入
utssdk/app-android/libs/ - 保活:AndroidManifest 声明前台服务(带
foregroundServiceType)
iOS
- 微信:配置 appid + URL Scheme(weixin+appid)+ universal link
- 支付宝:集成 AlipaySDK framework + URL Scheme
签名模式说明
| 模式 | 说明 | 适用 |
|---|---|---|
| 服务端签名(推荐) | 客户端只负责唤起,私钥/证书不落客户端 | 有后端团队 |
| 本地加签 | 客户端持有私钥签名 | 无后端的简易场景(有泄露风险) |
错误码
见 docs/error-codes.md 或代码 common/errors.uts 中 PayErrorCode。
License
Apache-2.0

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 13
赞赏 0
下载 12492918
赞赏 1939
赞赏
京公网安备:11010802035340号