更新记录

1.1.1(2026-04-07)

优化问题

1.1.0(2026-04-07)

新增 HarmonyOS NEXT 平台支持,三端统一 API

  • 新增 HarmonyOS 端完整支付实现(startPay、isUnionPayInstalled)
  • 通过 onNewWant 监听支付结果回跳,自动处理回调
  • 通过 bundleManager.canOpenLink 检测云闪付安装状态
  • 内置 libuppayment.har SDK(v3.1.2)
  • 支持 HarmonyOS NEXT API 12+

1.0.0(2026-01-19)

新增安卓,ios端云闪付,内置sdk集成自动处理回调

查看更多

平台兼容性

uni-app(4.81)

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

uni-app x(4.81)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × 5.0 12 12 ×

jwh-pay 云闪付支付插件

简介

uni-app / uni-app-x 云闪付支付插件,支持 Android、iOS、HarmonyOS NEXT 三端,已内置云闪付 SDK,开箱即用。

功能

  • 拉起云闪付完成支付
  • 检测云闪付 App 是否安装
  • 支付结果自动回调,返回状态码、中文描述和签名
  • 正式环境 / 测试环境一键切换
  • 支持 scheme、seType 等参数
  • result / callback 两种回调写法都支持

平台兼容

平台 支持 最低版本
Android 5.0
iOS 12.0
HarmonyOS NEXT API 12
小程序 -
H5 -

安装

HBuilderX 插件市场搜索 jwh-pay 导入,或者把插件目录丢到 uni_modules 下就行。

注意: 这是原生插件,标准基座跑不了。需要先在 HBuilderX 里「制作自定义调试基座」,再用自定义基座运行。正式打包不受影响。

各平台配置

Android

不需要额外配置,权限和 SDK 都已经内置好了。

iOS

  1. manifest.jsonapp-plusdistributeiosurlschemewhitelist 加上:

    uppaysdk,uppaywallet,uppayx1,uppayx2,uppayx3
  2. manifest.jsonapp-plusdistributeiosurltypes 加上你的自定义 scheme,支付完成后云闪付会跳回来:

    myapp

HarmonyOS

  1. 项目的 module.json5 里,abilitiesskills 加一组配置,用于支付完成后跳回你的应用:

    {
     "entities": ["entity.system.browsable"],
     "actions": ["ohos.want.action.viewData"],
     "uris": [{ "scheme": "myapp", "host": "uppayresult" }]
    }

    myapp 换成你自己的 scheme,要和调用 startPay 时传的 scheme 一样。

  2. 如果要用 isUnionPayInstalled() 检测云闪付是否安装,module.json5 里还需要加:

    {
     "module": {
       "querySchemes": ["uppaysdk"]
     }
    }
  3. 鸿蒙项目要先导入插件再打包,具体看:https://uniapp.dcloud.net.cn/tutorial/harmony/runbuild.html

用法

import { startPay, isUnionPayInstalled } from "@/uni_modules/jwh-pay";

// 检查是否安装了云闪付
const installed = isUnionPayInstalled();
console.log('云闪付已安装:', installed);

// 发起支付
function pay(tn) {
  startPay({
    tn: tn,            // 交易流水号,找后端要
    mode: "00",         // 00 正式,01 测试
    scheme: "myapp",    // 你的 scheme,iOS 和鸿蒙需要
    result: (res) => {
      if (res.status === "00") {
        uni.showToast({ title: '支付成功', icon: 'success' });
        // res.sign 可以拿去给后端验签
      } else if (res.status === "69") {
        uni.showToast({ title: '取消了', icon: 'none' });
      } else {
        uni.showToast({ title: res.message || '支付失败', icon: 'none' });
      }
    }
  });
}

API

startPay(options)

拉起云闪付支付。

参数 类型 必填 说明
tn string 交易流水号,后端下单后返回的
mode string "00" 正式环境,"01" 测试环境
scheme string 自定义 scheme,支付完后跳回来用的,iOS 和鸿蒙需要填
seType string 手机 Pay 类别,比如华为支付填 "04",Android 和鸿蒙有效
result function 二选一 支付结果回调
callback function 二选一 同上,兼容其他插件的写法

resultcallback 传一个就行,都传的话用 result

isUnionPayInstalled()

检测手机上有没有装云闪付,返回 true / false

鸿蒙端需要在 module.json5 里配好 querySchemes,不然一直返回 false

回调参数

字段 类型 说明
status string 状态码,"00" 成功,"69" 取消,其他是失败
message string 中文描述,可以直接拿来提示用户
sign string 签名,成功的时候才有,给后端验证用

常见状态码

意思
00 成功
69 用户取消
01 失败,咨询 95516
02 系统关闭,稍后再试
03 通讯超时
04 处理中,稍后查询
06 系统繁忙
30 未通过,换张卡试试
33 金额超限
64 余额不足
65 密码或 CVN2 错误
67 密码输错太多次

完整状态码看银联文档:https://open.unionpay.com/

注意

  1. tn 必须从后端拿,不能前端自己编
  2. 测试用 mode: "01",上线记得改成 "00"
  3. 客户端拿到的支付结果只能做展示,最终结果以后端回调为准
  4. 支付成功返回的 sign 要传给后端做验签
  5. 鸿蒙模拟器上装不了云闪付,要在真机上测

报错排查

报错 原因 怎么办
交易流水号不能为空 tn 没传 检查后端接口有没有正常返回 tn
模式参数错误 mode 不对 只能传 "00""01"
必须提供 result 或 callback 没传回调 result 和 callback 至少传一个
无法获取当前 Activity Android 环境问题 确认页面没被销毁
支付调用失败 SDK 出错了 看看参数对不对,tn 是不是过期了
处理支付结果异常 鸿蒙回跳失败 检查 module.json5 里的 scheme 配对了没

seType 对照表

品牌
Samsung Pay 02
华为 Pay 04
小米 Pay 25
魅族 Pay 27
OPPO Pay 29
乐视 Pay 30
锤子 Pay 32
vivo Pay 33
realme Pay 35

更新记录

v1.1.0 (2026-04-07)

  • 新增 HarmonyOS NEXT 支持
  • 鸿蒙端支付结果通过 onNewWant 回跳处理
  • 鸿蒙端可检测云闪付安装状态
  • 内置 libuppayment.har v3.1.2

v1.0.1 (2026-04-03)

  • 回调新增 message 字段
  • result / callback 双回调兼容
  • Android sign 解析不再依赖字段顺序
  • Android ActivityResult 加了 requestCode 过滤
  • iOS 用 connectedScenes 替代废弃的 keyWindow
  • 三端 sign 处理统一
  • 清理多余日志

v1.0.0 (2026-01-19)

  • 首版,支持 Android + iOS 云闪付支付

隐私、权限声明

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

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />

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

插件不采集任何数据,银联SDK可能采集设备信息用于风控,详见银联隐私政策

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