开发 uniapp App支付宝当面付 uniapp如何集成扫码支付|Duuu笔记
前端进阶技巧:本文深入解析
不能。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
中显式声明:
和
app-plus → distribute → alipay → urls
不只要填
alipays://*
,还得加
https://qr.alipay.com/*
(用于跳转到支付宝确认页)
包名(
android-package-name
)必须和支付宝开放平台「应用信息」里填写的完全一致,包括大小写和点号位置;签名证书指纹也必须提前录入沙箱/正式环境
服务端返回的二维码怎么安全展示?
支付宝返回的是类似
https://qr.alipay.com/fkx01234abcde567890
这样的短链,不能直接
img src
加载——部分安卓 WebView 会拦截跳转,iOS 可能因 ATS 限制加载失败:
推荐用
加载一个本地 HTML 页面,在其中用 JS 创建
img
标签并设置
src
,避免跨域或协议限制
更稳妥的做法是服务端将二维码 base64 数据直接返回(字段如
qr_code_base64
),前端用
渲染 轮询支付结果时,别用 setInterval 直接轮,应配合服务端幂等接口 + 指数退避(比如首次 2s,失败后 4s、8s…最大 30s),避免触发支付宝风控限流 当面付不是“前端调个 API 就完事”的功能,它本质是「软硬结合」:前端要控制扫码硬件、展示动态码、处理中断;服务端要扛住并发轮询、做幂等校验、及时关单;支付宝侧还要对应用类型、密钥、回调地址做严格校验——任一环节松动,扫码就卡在“正在处理”或直接报错 INVALID_PARAMETER 。
