showPay
调起微信支付,支持小程序、H5、App端。
前置依赖
依赖参数
| 参数名 | 类型 | 说明 |
|---|---|---|
deps.requestPayment | UniApp['requestPayment'] | 支付 API |
deps.getProvider | UniApp['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.log | Console['log'] | 日志输出 |
deps.error | Console['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
}参数
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
options | PayRequest | 是 | - | 支付请求参数 |
options.timeStamp | string | 是(小程序/H5) | - | 时间戳 |
options.nonceStr | string | 是(小程序/H5) | - | 随机字符串 |
options.package | string | 是(小程序/H5) | - | 统一下单接口返回的 prepay_id |
options.paySign | string | 是(小程序/H5) | - | 签名 |
options.orderInfo | string | Record<string, unknown> | 是(App) | - | 订单信息(App端) |
deps | ShowPayDeps | 是 | - | 依赖注入对象 |
返回值
| 类型 | 说明 |
|---|---|
Promise<PayResult> | Promise,成功时返回支付结果,包含交易ID |
工作原理
- 环境检测:根据
detectEnvironment函数检测当前运行环境 - 平台适配:
- 小程序端:使用
uni.requestPayment,需要 timeStamp、nonceStr、package、paySign - H5端:使用 WeixinJSBridge,需要 appId、timeStamp、nonceStr、package、paySign
- App端:使用
uni.requestPayment,需要 orderInfo
- 小程序端:使用
- 参数验证:检查必需参数是否完整
- 调起支付:调用对应平台的支付接口
- 返回结果:返回支付结果,包含交易ID
支付参数需要从后端获取,前端不应直接生成签名。