
uni-app x 跨端支付接入实战uni.requestPayment 全平台详解与自定义支付 Provider 扩展指南【免费下载链接】uni-appA cross-platform framework using Vue.js项目地址: https://gitcode.com/gh_mirrors/un/uni-appuni-app x 的uni.requestPayment是一个统一 AppAndroid/iOS/HarmonyOS与微信小程序的客户端支付 API开发者只需一套参数即可唤起支付宝、微信的原生支付能力。本文以该 API 为核心完整覆盖参数体系、orderInfo 构造、统一错误码与 SDK 错误码对照、manifest.json 模块配置、基于 Provider 机制的自定义支付插件接入四步法并结合当前仓库中 uni-payment 模块 的三端源码说明其底层调用链帮助开发者在 uni-app x 工程中快速、正确地落地支付功能。uni.requestPayment 是什么uni.requestPayment(options)是 uni-app x 统一各平台客户端支付行为的入口。文档docs/api/request-payment.md明确指出uni.requestPayment 是一个统一各平台的客户端支付 API客户端均使用本 API 调用支付。本 API 运行在各端时会自动转换为各端的原生支付调用 API。也就是说App 端调用微信/支付宝 SDK、微信小程序端调用wx.requestPayment这些原生差异全部由框架内部屏蔽。但必须强调支付不仅仅是客户端开发。各平台的支付申请开通、配置回填如微信 App 支付的商户号、支付宝开放平台的应用仍需按各平台官方流程完成——例如在 App 端使用微信支付必须先申请微信的 App 支付能力。若服务端使用 uniCloud官方还提供了云端统一支付服务 uniPay把 App、微信小程序、支付宝小程序的服务端支付开发统一封装。前端统一的uni.requestPayment与云端统一的uniPay搭配使用可显著降低支付业务的整体开发成本。兼容性矩阵| Web | 微信小程序 | Android | iOS | HarmonyOS | | :- | :- | :- | :- | :- | | x | 4.41 | 4.02 | 4.18 | 4.61 |表格中的数字为支持该 API 的 uni-app x 最低版本x表示不支持。该 API 不支持 Web 端运行。各平台的具体版本要求来自原文档及 interface.uts 中的uniPlatform注释Androiduni.requestPayment自 4.02 起可用其中700607/700608两个错误码需要 4.31微信支付 App 端要求 4.11 及以上版本。iOSAPI 自 4.18 起可用微信支付需要 4.18 及以上版本。HarmonyOSAPI 自 4.61 起可用引擎 uniVer 4.25Vapor 版本 5.0。微信小程序API 自 4.41 起可用且小程序的nonceStr/package/paySign/timeStamp/signType等参数仅在微信小程序端生效。Web不支持。参数详解调用形式uni.requestPayment(options: RequestPaymentOptions): void| 名称 | 类型 | 必填 | 兼容性 | | :- | :- | :- | :-: | | options |RequestPaymentOptions| 是 | Web: x |options 的属性描述| 名称 | 类型 | 必填 | 兼容性 | 描述 | | :- | :- | :- | :-: | :- | | provider | string | 是 | Web: x; Android: 4.02; iOS: 4.18; HarmonyOS: 4.61 | 支付服务提供商通过 uni.getProvider 获取目前支持支付宝支付(alipay)、微信支付(wxpay) | | orderInfo | string | 是 | Web: x; 微信小程序: x; Android: 4.02; iOS: 4.18; HarmonyOS: 4.61 | 订单数据 | | success | (result: RequestPaymentSuccess) void | 否 | 各端同 API | 接口调用成功的回调函数 | | fail | (result: RequestPaymentFail) void | 否 | 各端同 API | 接口调用失败的回调函数 | | complete | (result: any) void | 否 | 各端同 API | 接口调用结束的回调函数调用成功、失败都会执行 | | nonceStr | string | 否 | Web: x; 微信小程序: 4.41 | 随机字符串长度为 32 个字符以下 | | package | string | 否 | Web: x; 微信小程序: 4.41 | 统一下单接口返回的 prepay_id 参数值提交格式如prepay_id*** | | paySign | string | 否 | Web: x; 微信小程序: 4.41 | 签名具体见微信支付文档 | | timeStamp | string | 否 | Web: x; 微信小程序: 4.41 | 时间戳从 1970 年 1 月 1 日 00:00:00 至今的秒数即当前的时间 | | signType | string | 否 | Web: x; 微信小程序: 4.41 | 签名算法应与后台下单时的值一致 |说明nonceStr、package、paySign、timeStamp、signType是微信小程序端专用的微信支付参数App 端Android/iOS/HarmonyOS只需provider orderInfo两个必填参数orderInfo 由服务端下单后返回。signType 的合法值| 合法值 | 说明 | 兼容性 | | :- | :- | :- | | MD5 | 仅在微信支付 v2 版本接口适用 | Web: x | | HMAC-SHA256 | 仅在微信支付 v2 版本接口适用 | Web: x | | RSA | 仅在微信支付 v3 版本接口适用 | Web: x |signType的值必须与后台统一下单时使用的签名算法一致否则验签会失败。成功回调 RequestPaymentSuccess| 名称 | 类型 | 必填 | 描述 | | :- | :- | :- | :- | | data | object | 否 | 返回数据 |失败回调 RequestPaymentFail| 名称 | 类型 | 必填 | 描述 | | :- | :- | :- | :- | | errCode | number | 是 | 错误码 | | errSubject | string | 是 | 统一错误主题模块名称 | | data | any | 否 | 错误信息中包含的数据 | | cause | Error | 否 | 源错误信息可以包含多个错误详见 SourceError | | errMsg | string | 是 | 错误信息 |在源码 unierror.uts 中可以确认失败回调的错误对象继承自UniErrorerrSubject固定为uni-requestPaymenterrMsg由errCode在RequestPaymentUniErrors映射表中查得cause属性则承载了支付 SDK 的原始错误详见下文支付 SDK 错误码一节。orderInfo 参数说明orderInfo是服务端下单后返回的支付请求参数串不同平台格式不同。支付宝支付App 端App 支付请求参数字符串主要包含商家的订单信息以keyvalue形式、连接app_id2015052600090779biz_content%7B%22timeout_express%22%3A%2230m%22%2C%22seller_id%22%3A%22%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.02%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22314VYGIAGG7ZOYY%22%7Dcharsetutf-8methodalipay.trade.app.paysign_typeRSA2timestamp2016-08-15%2012%3A12%3A15version1.0signMsbylYkCzlfYLy9PeRwUUIg9nZPeN9SfXPNavUCroGKR5Kqvx0nEnd3eRmKxJuthNUx4ERCXe552EV9PfwexqW%2B1wbKOdYtDIb4%2B7PL3Pc94RZL0zKaWcaY3tSL89%2FuAVUsQuFqEJdhIukuKygrXucvejOUgTCfoUdwTi7z%2BZzQ%3D其中biz_content为 URL 编码后的 JSON 字符串典型字段包括timeout_express超时时间、total_amount金额、subject标题、body描述、out_trade_no商户订单号等。微信支付App 端微信 App 支付请求参数字符串为 JSON 格式且需要打自定义基座才能真机运行调试{ appid: wxd569c7238830733b, noncestr: 6N47VnR42bqIm4xq, package: SignWXPay, partnerid: 1230636401, prepayid: wx26174750316675ac54b89c224eb3250000, timestamp: 1711446470, sign: EE987459B9CFF6462462147130110D31 }微信小程序端微信小程序端不使用orderInfo字符串而是直接展开统一下单返回的字段nonceStr、package、paySign、timeStamp、signType示例代码中通过...JSON.parse(options.orderInfo)展开传入见下文完整示例。统一错误码 errCodeerrCode是 uni 层面的统一错误码在各端保持一致便于业务侧做跨端统一的错误处理。支付失败时还可通过fail回调参数中的cause属性获取支付 SDK 的源错误码。| errCode | 兼容性 | 描述 | | :- | :- | :- | | 700600 | Android: 4.02; iOS: 4.18; HarmonyOS: 4.61 | 正在处理中支付结果未知有可能已经支付成功请查询商家订单列表中订单的支付状态 | | 701100 | 同上 | 订单支付失败 | | 701110 | 同上 | 重复请求 | | 700601 | 同上 | 用户中途取消 | | 700602 | 同上 | 网络连接出错 | | 700603 | 同上 | 支付结果未知有可能已经支付成功请查询商家订单列表中订单的支付状态 | | 700000 | 同上 | 其它支付错误 | | 700604 | 同上 | 微信没有安装 | | 700605 | 同上 | 服务供应商获取失败 | | 700607 | Android: 4.31; iOS: 4.31; HarmonyOS: 4.61 | 支付未完成 | | 700608 | Android: 4.31; iOS: 4.31; HarmonyOS: 4.61 | 服务商返回参数错误 | | 700800 | iOS: 4.18Android/HarmonyOS: x | 没有配置对应的 URL Scheme | | 700801 | iOS: 4.18Android/HarmonyOS: x | 没有配置对应的 Universal Link |对应的错误码英文描述可在源码 unierror.uts 中查到例如700601对应The user canceled midway.700604对应Wechat is not installed.。支付 SDK 错误码cause 中的源错误当支付失败时fail回调参数IRequestPaymentFail的cause属性携带支付 SDK 的原始错误SourceError其code属性存储了 SDK 原始错误码可用于排查具体失败原因。支付宝支付错误码支付宝错误码错误信息9000订单支付成功8000正在处理中支付结果未知有可能已经支付成功请查询商家订单列表中订单的支付状态4000订单支付失败5000重复请求6001用户中途取消6002网络连接出错6004支付结果未知有可能已经支付成功请查询商家订单列表中订单的支付状态其它其它支付错误从源码注释看统一错误码700607支付未完成对应支付宝6007错误700608参数错误对应支付宝4001错误是支付宝侧新增的细分错误码映射。微信支付错误码微信支付错误码错误信息0成功-1可能的原因签名错误、未注册 APPID、项目设置 APPID 不正确、注册的 APPID 与设置的不匹配、其他异常原因等-2无需处理。发生场景用户不支付了点击取消返回 APP-3发送失败-4授权被拒绝-5不支持-6禁止其它其它支付错误支付 Provider 对象uni.getProvider({ service: payment })可获取当前设备支持的支付服务商列表返回的 provider 对象定义如下UniPaymentAlipayProvider支付宝支付继承自 UniProvider接口定义见 uni-payment-alipay/utssdk/interface.uts。UniPaymentWxpayProvider微信支付继承自 UniProvider特有字段说明见 uni-payment-wxpay/utssdk/interface.uts名称类型必备默认值描述isWeChatInstalledboolean是-判断微信是否安装判断微信是否安装App 端在唤起微信支付前建议先判断微信是否已安装。原文档给出了各平台的条件编译示例uni.getProvider({ service: payment, success: (e) { const provider e.providers.find((item): boolean { return item.id wxpay }) // #ifdef APP-ANDROID if (provider ! null provider instanceof UniPaymentWxpayProvider !((provider as UniPaymentWxpayProvider).isWeChatInstalled)) { console.log(WeChat 没有安装) } else { console.log(WeChat 已安装) } // #endif // #ifdef APP-IOS if (provider ! null ((provider as UniPaymentWxpayProvider).isWeChatInstalled undefined || ((provider as UniPaymentWxpayProvider).isWeChatInstalled ! null (provider as UniPaymentWxpayProvider).isWeChatInstalled false))) { console.log(WeChat 没有安装) } else { console.log(WeChat 已安装) } // #endif }, fail: (e) { console.log(获取支付通道失败, e); } })注意 Android 与 iOS 的判断逻辑不同Android 上isWeChatInstalled为false表示未安装iOS 上该字段可能为undefined需要同时兼容未定义与false两种情况。若未安装微信调用支付会得到700604微信没有安装错误码。manifest.json 模块配置App 端需要在项目根目录的manifest.json中配置uni-payment节点否则无法打包支付能力。相关说明见 manifest-modules.mduni-payment模块基于 provider 机制实现需要手动配置三方支付服务供应商不支持摇树自动引入标准基座已包含微信支付、支付宝支付自定义基座需在 HBuilderX 中勾选支付模块并提交云端打包后才能生效app 端在HBuilderX 4.71支持可视化界面配置各平台配置分别参考 manifest-ios.md、manifest-android.md、manifest-harmony.md。如果未配置模块或未打自定义基座App 端调用支付会因 provider 获取失败而回调700605服务供应商获取失败。完整示例hello uni-app x 的支付页面以下示例来自 hello uni-app x 的pages/API/request-payment/request-payment.uvue本文仓库中对应页面为 src/pages/API/request-payment/request-payment.uvue 所在目录的支付示例展示了从获取 provider、向服务端请求 orderInfo、到唤起支付的完整流程。该 API 不支持 Web需运行到 App 平台体验。template page-head title发起支付/page-head view classuni-common-mt payment-content text如对当前页面的支付示例功能有任何疑问通过电子邮件servicedcloud.io 联系我们/text /view view classpayment-content template v-ifproviderList.length 0 button classpayment-button typeprimary v-for(item, index) in providerList :keyindex clickrequestPaymentByItem(item){{ item.name }}/button /template template v-else button classpayment-button typeprimary请先在 manifest.json 配置勾选微信支付、支付宝/button /template /view /template script setup languts export type PayItem { id: string; name: string; provider?: UniProvider }; type DataType { btnText: string; btnType: string; orderInfo: string; errorCode: number; errorMsg: string; complete: boolean; fail: boolean; outTradeNo: string; openid: string; }; type PaymentOptions { provider: string; orderInfo: string; errorTitle?: string; }; // 支付订单请求地址 const UNI_PAY_API_URL https://env-00jxt67zj8kj.dev-hz.cloudbasefunction.cn/uni-pay-api; const providerList ref([] as PayItem[]); const defaultData: DataType { btnText: 支付宝支付, btnType: primary, orderInfo: , errorCode: 0, errorMsg: , complete: false, fail: false, outTradeNo: , openid: , }; const data reactive(defaultData); const bundleId ref(); const getPaymentBundleId (): string { let bundleId: string | null ; // #ifdef APP-ANDROID bundleId uni.getAppBaseInfo().packageName; // #endif // #ifdef APP-IOS bundleId uni.getAppBaseInfo().bundleId; // #endif // #ifdef APP-HARMONY bundleId uni.getAppBaseInfo().bundleName; // #endif // #ifdef MP-WEIXIN bundleId uni.getAccountInfoSync().miniProgram.appId; // #endif return bundleId ?? ; }; const requestPaymentByOrderInfo (options: PaymentOptions) { uni.requestPayment({ provider: options.provider, orderInfo: options.orderInfo, // #ifdef MP-WEIXIN // 微信小程序需使用...结构参数 ...JSON.parse(options.orderInfo), // #endif success: (res) { console.log(JSON.stringify(res)); uni.showToast({ icon: success, title: 支付成功 }); }, fail: (res) { console.log(JSON.stringify(res)); data.errorCode res.errCode; const title options.errorTitle null ? errorCode: data.errorCode : options.errorTitle; uni.showToast({ icon: error, title }); }, }); }; // #ifdef MP-WEIXIN // 获取微信小程序openid用于发起支付 const getOpenId async (): Promisevoid { let code ; await new Promisevoid((resolve, reject) { uni.login({ provider: weixin, success: (res) { code res.code; resolve(); }, fail: (err) { reject(err); }, }); }); await new Promisevoid((resolve, reject) { uni.request({ url: ${UNI_PAY_API_URL}/getOpenId, method: GET, data: { code, bundleId: bundleId.value, }, success: (res) { const responseData res.data as UTSJSONObject; data.openid responseData[openid] as string; console.log(openid: , data.openid); resolve(); }, fail: (err) { console.error(request-err, err); reject(err); }, }); }); }; // #endif const requestPaymentByItem async (e: PayItem): Promisevoid { const provider e.id; const appProvider e.provider; const supportCheckWeChat appProvider ! null || provider alipay; let requestData {} as UTSJSONObject; let paymentProvider provider; if (supportCheckWeChat provider wxpay appProvider ! null) { const wxProvider appProvider as UniPaymentWxpayProvider; if (wxProvider.isWeChatInstalled false) { uni.showToast({ title: 本设备中未找到微信, icon: error }); return; } } uni.showLoading({ title: 请求中..., mask: true }); const random Math.floor(Math.random() * 9000) 1000; data.outTradeNo test${Date.now()}${random}; requestData { provider: paymentProvider, outTradeNo: data.outTradeNo, bundleId: bundleId.value, totalFee: 1, } as UTSJSONObject; // #ifdef MP-WEIXIN try { if (data.openid ) { await getOpenId(); } requestData.openid data.openid; } catch (err) { uni.showToast({ title: 获取微信openid失败, icon: error }); uni.hideLoading(); return; } // #endif uni.request({ url: ${UNI_PAY_API_URL}/getOrderInfo, method: GET, data: requestData, timeout: 6000, success: (res) { uni.hideLoading(); const responseData res.data as UTSJSONObject; const errCode responseData[errCode] as number; if (errCode ! 0) { uni.showModal({ title: 提示, content: responseData[errMsg] as string, showCancel: false }); return; } const orderInfo responseData[orderInfo] as string; console.log(orderInfo: , orderInfo); data.orderInfo orderInfo; requestPaymentByOrderInfo({ provider: paymentProvider, orderInfo, errorTitle: 支付失败, }); }, fail: (err) { uni.hideLoading(); console.error(request-err, err); }, }); }; onLoad(() { // 获取包名或appid bundleId.value getPaymentBundleId(); // #ifdef APP const providerOptions: GetProviderSyncOptions { service: payment, }; let provider uni.getProviderSync(providerOptions); provider.providerObjects.forEach((value: UniProvider) { if (value.id alipay || value.id wxpay) { const payItem: PayItem { name: value.description, id: value.id, provider: value, }; providerList.value.push(payItem); } }); // #endif // #ifdef MP-WEIXIN const payItem: PayItem { name: 微信支付, id: wxpay, }; providerList.value.push(payItem); // #endif }); // 自动化测试使用 const jest_pay () { uni.requestPayment({ provider: alipay, orderInfo: data.orderInfo, fail: (res: RequestPaymentFail) { data.errorCode res.errCode; data.complete true; data.fail true; }, success: (res: RequestPaymentSuccess) { console.log(JSON.stringify(res)); data.complete true; data.fail false; }, } as RequestPaymentOptions); }; defineExpose({ data, jest_pay, }); /script style .payment-content { padding: 0 10px; } .payment-button { margin-top: 20px; } /style这个示例的核心流程可以概括为四步获取支付渠道onLoad中通过uni.getProviderSync({ service: payment })获取 provider 列表App 端微信小程序端直接固定wxpay获取 bundleId/appid按平台分别取包名、BundleId、BundleName 或小程序 AppId随下单请求一起提交请求服务端下单调用UNI_PAY_API_URL/getOrderInfo获取orderInfo微信小程序端还需先用uni.login 服务端换取 openid唤起支付uni.requestPayment({ provider, orderInfo })发起支付在success/fail回调中处理结果。源码视角uni.requestPayment 的三端实现当前仓库的 uni-payment 模块 以 UTS 实现了该 API 的跨端封装其结构为utssdk/interface.uts定义UniPaymentProvider接口、RequestPaymentOptions/RequestPaymentSuccess/RequestPaymentFail类型、RequestPaymentErrorCode错误码枚举utssdk/protocol.uts注册 API 名称常量API_REQUEST_PAYMENT requestPaymentutssdk/unierror.utsRequestPaymentFailImpl错误实现类与错误码→错误信息的映射表utssdk/app-android/index.uts、utssdk/app-ios/index.uts、utssdk/app-harmony/index.uts三端平台实现。从源码结构可以清晰地看出该 API 的调用链入口函数 → 通过 getProvider 获取支付服务商实例 → 调用 provider.requestPayment(options) → 失败时构造 RequestPaymentFailImpl 错误并回调 fail/complete。例如 Android 端实现app-android/index.utsexport const requestPayment : RequestPayment function (options : RequestPaymentOptions) { //获取provider实例hx自动生成其中UniPaymentProvider为在interface中定义的接口 const provider UTSAndroid.getProviderUniPaymentProvider(payment, options.provider) if (provider ! null) { provider.requestPayment(options) } else { let err new RequestPaymentFailImpl(700605); options.fail?.(err) options.complete?.(err) } };iOS 端app-ios/index.uts与 Android 端逻辑一致区别仅在于通过UTSiOS.getProvider获取 providerHarmonyOS 端app-harmony/index.uts则使用defineAsyncApigetUniProvider的异步 API 范式。当 provider 获取失败时三端统一返回700605服务供应商获取失败——这通常意味着 manifest.json 中未正确配置支付模块或未打自定义基座。而alipay、wxpay这两个具体的支付服务商是作为独立的 provider 插件实现的支付宝插件接口见 uni-payment-alipay/utssdk/interface.uts微信插件接口见 uni-payment-wxpay/utssdk/interface.uts。这正是下方自定义支付 Provider机制的官方范例。使用 UTS 调用支付 SDK 的其他能力App 平台上微信和支付宝的 SDK 除了requestPayment封装的功能外还有其他 API。如果需要调用这些 SDK 的扩展能力可以直接使用 UTS 调用原生 SDK注意打包时勾选相应模块。官方实现本身也是通过 UTS 调用这两个原生 SDK可参考支付宝插件uni-payment-alipay与微信插件uni-payment-wxpay的源码。自定义支付 Provider 接入uni-app x 4.25背景目前 uni-app x 引擎内置了支付宝支付、微信支付但支付 SDK 还有很多例如银联 SDK。以往这些 SDK 只能以独立插件方式集成且需要提供单独的 API 给开发者使用。uni-app x 从 4.25 起开放了 provider 自接入机制让三方 SDK 可以以 provider 方式被开发者集成开发一个 UTS 插件对接 uni 规范化的 API、错误信息描述等实现自己的支付插件插件使用者即可通过 uni 的标准 APIuni.requestPayment()使用三方 SDK。例如开发者想用uni.requestPayment()的方式调用 XX 支付但内置支付 API 不支持只需按以下四步实现第一步定义接口新建一个 UTS 插件在interface.uts中定义接口继承UniPaymentProviderexport interface UniPaymentAlipayProvider extends UniPaymentProvider{}第二步实现接口在 app-android 或 app-ios 的index.uts中实现接口import { UniPaymentAlipayProvider } from ../interface.uts export class UniPaymentAlipayProviderImpl implements UniPaymentAlipayProvider{ override id : String XX // id必须有插件作者前缀避免冲突避免不同插件作者的插件id重名 override description : String XX的描述 override isAppExist : boolean | null null constructor(){} override requestPayment(options : RequestPaymentOptions) { //todo 具体逻辑接收uni规范的入参进行业务处理返回uni规范的返回值。如遇到错误按uni的规范返回错误码 } }关键点在于id必须有插件作者前缀以避免与其他插件重名requestPayment方法内需要接收 uni 规范的入参RequestPaymentOptions、执行业务逻辑、返回 uni 规范的返回值出错时按 uni 规范返回错误码。第三步在 manifest.json 中配置{ app: { distribute: { modules: { uni-payment: { XX: {} } } } } }第四步打包自定义基座并运行由于 uni-app x 内置的支付 API 也是基于这套规范实现的推荐参考支付宝支付插件的实现源码uni-payment-alipay进行开发其UniPaymentAlipayProvider接口定义、三端实现结构均可直接对照。注意事项与踩坑清单综合原文档与源码以下事项直接影响支付功能是否可用App 平台开发支付宝支付无需自定义基座真机运行可直接开发但微信支付App 端需要打自定义基座。App 端判断微信是否安装可通过uni.getProvider结合UniPaymentWxpayProvider.isWeChatInstalled实现示例见上文。4.25 版本之前Android 端使用微信支付需要在隐私协议弹框后再调用微信 SDK4.25 起 SDK 内部已处理无需额外等待。manifest.json 必须配置uni-payment模块节点否则 provider 获取失败700605标准基座自带微信/支付宝支付自定义基座需云端打包后生效。版本门槛app-android 平台微信支付需 4.11app-ios 平台微信支付需 4.18。支付宝 iOS 崩溃/卡顿排查当传入 orderInfo 后app-android 可正常调用支付宝但 app-ios 有时会出现崩溃或卡顿此时需检查服务端out_trade_no参数是否设置为 string 类型支付宝文档业务请求参数中该字段要求为字符串。支付结果以服务端查询为准700600、700603等错误码表示支付结果未知有可能已经支付成功必须引导用户或由服务端主动查询商家订单列表中订单的支付状态不能直接判定为失败。该 API 不支持 Web 端运行示例请选择 App 平台微信小程序端需额外传nonceStr/package/paySign/timeStamp/signType并保证与统一下单一致。参考与延伸关联文档原文docs/api/request-payment.md支付模块源码src/uni_modules/uni-payment支付宝支付插件src/uni_modules/uni-payment-alipay微信支付插件src/uni_modules/uni-payment-wxpayProvider 机制说明docs/api/provider.mdmanifest 模块配置docs/collocation/manifest-modules.md错误规范UniError/SourceErrordocs/err-spec.md支付示例页面src/pages/API/request-payment/request-payment.uvue【免费下载链接】uni-appA cross-platform framework using Vue.js项目地址: https://gitcode.com/gh_mirrors/un/uni-app创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考