Skip to content

showPay

调起微信支付,支持小程序、H5、App端。

前置依赖

依赖参数

参数名类型说明
deps.requestPaymentUniApp['requestPayment']支付 API
deps.getProviderUniApp['getProvider']获取服务提供商 API(可选,用于检查支持)
deps.detectEnvironment() => 'h5' | 'miniapp' | 'app' | 'unknown'检测环境函数(可选)
deps.isInWechatBrowser() => boolean检测是否在微信浏览器(H5端必需)
deps.ensureBridgeReady(callback: () => void) => void等待 WeixinJSBridge 就绪(H5端必需)
deps.invokeBridge(method: string, payload: Record<string, unknown>, callback: (res: { err_msg?: string; [key: string]: unknown }) => void) => void调用 WeixinJSBridge(H5端必需)
deps.logConsole['log']日志输出
deps.errorConsole['error']错误输出

环境要求

  • UniApp环境: 使用UniApp API,支持小程序、H5、App端
  • H5端: 需要在微信内置浏览器中,并提前完成 JSSDK 注入与签名

函数签名

typescript
function showPay(
  options: PayRequest,
  deps: ShowPayDeps
): Promise<PayResult>

interface ShowPayDeps {
  requestPayment: UniApp['requestPayment']
  getProvider?: UniApp['getProvider']
  detectEnvironment?: () => 'h5' | 'miniapp' | 'app' | 'unknown'
  isInWechatBrowser?: () => boolean
  ensureBridgeReady?: (callback: () => void) => void
  invokeBridge?: (method: string, payload: Record<string, unknown>, callback: (res: { err_msg?: string; [key: string]: unknown }) => void) => void
  log: Console['log']
  error: Console['error']
}

interface PayRequest {
  appId?: string
  timeStamp?: string
  nonceStr?: string
  package?: string
  signType?: string
  paySign?: string
  orderInfo?: string | Record<string, unknown>
  extraData?: Record<string, unknown>
  success?: (res: { errMsg: string; transactionId?: string }) => void
  fail?: (err: { errMsg: string }) => void
  complete?: (res: { errMsg?: string }) => void
}

interface PayResult {
  errMsg?: string
  transactionId?: string
  raw?: unknown
}

参数

参数名类型必填默认值说明
optionsPayRequest-支付请求参数
options.timeStampstring是(小程序/H5)-时间戳
options.nonceStrstring是(小程序/H5)-随机字符串
options.packagestring是(小程序/H5)-统一下单接口返回的 prepay_id
options.paySignstring是(小程序/H5)-签名
options.orderInfostring | Record<string, unknown>是(App)-订单信息(App端)
depsShowPayDeps-依赖注入对象

返回值

类型说明
Promise<PayResult>Promise,成功时返回支付结果,包含交易ID

工作原理

  1. 环境检测:根据 detectEnvironment 函数检测当前运行环境
  2. 平台适配
    • 小程序端:使用 uni.requestPayment,需要 timeStamp、nonceStr、package、paySign
    • H5端:使用 WeixinJSBridge,需要 appId、timeStamp、nonceStr、package、paySign
    • App端:使用 uni.requestPayment,需要 orderInfo
  3. 参数验证:检查必需参数是否完整
  4. 调起支付:调用对应平台的支付接口
  5. 返回结果:返回支付结果,包含交易ID

支付参数需要从后端获取,前端不应直接生成签名。