更新记录

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.utsPayErrorCode

License

Apache-2.0

隐私、权限声明

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

网络访问;Android 前台服务(保活);系统电池优化白名单跳转(跳转系统设置)

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

插件会采集设备标识(deviceId)用于风控与密钥派生,数据仅本地使用;支付请求会发送至商户配置的服务端接口

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

暂无用户评论。