不能。uni.requestPayment仅支持主扫(用户扫商户码),当面付需商户扫用户付款码,必须通过原生插件集成支付宝SDK,并由服务端生成二维码、前端展示及轮询结果。
uni.requestPayment 能不能直接调起当面付?
不能。当面付(扫码支付)和 uni.requestpayment 完全是两套逻辑:uni.requestpayment 是用于唤起用户手机上的支付宝 app 完成「主扫」(用户扫商户码),而当面付是「被扫」——商户用设备扫用户的付款码,必须由服务端生成支付二维码,前端只负责展示和轮询结果。
当面付集成必须走原生插件吗?
是的,纯 H5 或 uni.requestPayment 无法完成「扫码枪/摄像头扫用户付款码」这个动作。uni-app 官方不提供当面付 SDK 封装,必须使用原生能力:
- 安卓端需集成支付宝官方
alipaysdk-*.aar,并编写native.js模块桥接扫码识别与支付初始化 - iOS 端需引入
AlipaySDK.framework,配置URL Scheme(如alipay{appid}),并实现APAuthV2Info序列化支持 - 插件市场里搜“支付宝原生扫码”,购买后务必在 HBuilderX 中「关联到当前项目」,否则
nativeplugins/下不会生成任何文件
manifest.json 配置最容易漏哪几项?
当面付依赖原生能力,但很多开发者只配了支付白名单,却忘了基础权限和 URL 规则:
- 安卓必须在
manifest.json → app-plus → permissions中显式声明:<uses-permission android:name="android.permission.CAMERA"></uses-permission>和<uses-permission android:name="android.permission.FLASHLIGHT"></uses-permission> -
app-plus → distribute → alipay → urls不只要填alipays://*,还得加https://qr.alipay.com/*(用于跳转到支付宝确认页) - 包名(
android-package-name)必须和支付宝开放平台「应用信息」里填写的完全一致,包括大小写和点号位置;签名证书指纹也必须提前录入沙箱/正式环境
服务端返回的二维码怎么安全展示?
支付宝返回的是类似 https://qr.alipay.com/fkx01234abcde567890 这样的短链,不能直接 img src 加载——部分安卓 WebView 会拦截跳转,iOS 可能因 ATS 限制加载失败:
- 推荐用
<web-view></web-view>加载一个本地 HTML 页面,在其中用 JS 创建img标签并设置src,避免跨域或协议限制 - 更稳妥的做法是服务端将二维码 base64 数据直接返回(字段如
qr_code_base64),前端用<image :src="'data:image/png;base64,' + qr"> 渲染</image> - 轮询支付结果时,别用
setInterval直接轮,应配合服务端幂等接口 + 指数退避(比如首次 2s,失败后 4s、8s…最大 30s),避免触发支付宝风控限流
INVALID_PARAMETER。










