支付宝是否提供“扫一扫”功能接口?
结论
支付宝的「扫一扫」主要用于支付宝 App 和支付宝小程序。就公开能力而言,目前没有一种通用 SDK 或接口,能嵌入普通第三方原生 App,并完整复用支付宝扫一扫的识别效果。
支付宝小程序可以通过 my.scan 调起支付宝客户端的扫码页面,但这个 API 只能在支付宝小程序环境中运行,独立的 Android 或 iOS App 无法直接调用。支付场景中的扫码接口也仅用于完成支付流程,不具备通用的运单号或订单号识别能力。
推荐实现方案
物流 App 应根据号码在面单上的呈现方式选择识别方案:
- 运单号或订单号位于一维码、二维码中:使用条码识别 SDK。
- 号码只有印刷文字:使用 OCR,并结合号码规则进行校验。
- 同一面单既有条码又有文字:先识别条码,失败后再启用 OCR。
- 业务必须依赖支付宝扫一扫:可以把相关功能做成支付宝小程序,并通过
my.scan实现,但用户需要进入支付宝环境。
原生 App 常用的识别方案有 ZXing、Google ML Kit、Apple Vision,以及云厂商提供的 OCR 服务。选型时需要重点测试弱光、污损、倾斜、反光、低端设备和连续扫描等场景。
支付宝小程序中的调用方式
如果产品运行在支付宝小程序中,可以调用 my.scan:
my.scan({
type: 'bar',
success: (result) => {
console.log('扫码结果:', result.code);
},
fail: (error) => {
console.error('扫码失败:', error);
}
});
type、返回字段和支持的码制应以当前支付宝小程序官方文档为准。这段代码不能直接复制到普通 Web 页面、Android App 或 iOS App 中使用。
原生 Android App 的实现示例
下面的示例使用 ML Kit 处理相机画面中的条码。具体依赖版本应根据项目当前的 Android、CameraX 和 ML Kit 环境确定,不建议直接使用未经核对的版本号。
private val scanner = BarcodeScanning.getClient()
private fun analyzeImage(imageProxy: ImageProxy) {
val mediaImage = imageProxy.image
if (mediaImage == null) {
imageProxy.close()
return
}
val inputImage = InputImage.fromMediaImage(
mediaImage,
imageProxy.imageInfo.rotationDegrees
)
scanner.process(inputImage)
.addOnSuccessListener { barcodes ->
val value = barcodes
.asSequence()
.mapNotNull { it.rawValue }
.firstOrNull { isValidLogisticsNumber(it) }
if (value != null) {
onLogisticsNumberRecognized(value)
}
}
.addOnFailureListener { error ->
Log.e("Scanner", "Barcode recognition failed", error)
}
.addOnCompleteListener {
imageProxy.close()
}
}
private fun isValidLogisticsNumber(value: String): Boolean {
val normalized = value.trim()
return normalized.matches(Regex("[A-Za-z0-9-]{6,40}"))
}
这里的正则表达式只是一个宽松示例。实际项目应根据承运商、订单系统和号码长度设置白名单规则,避免将商品码、设备编号或面单上的其他条码误判为运单号。
落地步骤
- 收集真实面单样本,确认目标号码位于一维码、二维码还是纯文字中。
- 确定需要支持的条码类型,如 Code 128、Code 39、EAN 或 QR Code。
- 在相机预览中限定识别区域,优先扫描面单上号码所在的位置。
- 对识别结果进行去空格、大小写归一化、长度检查和业务规则校验。
- 如果画面中同时出现多个条码,可按码制、长度、前缀或承运商规则筛选。
- 条码识别失败后再启用 OCR,以免持续运行 OCR 影响速度和功耗。
- 在真实仓库环境中测试低照度、运动模糊、折痕、覆膜反光和标签破损等情况。
注意事项
不要把「调起支付宝 App 扫码」作为正式的集成方案。某些客户端跳转方式或许能够打开支付宝,但这不代表支付宝提供了稳定、公开且允许第三方依赖的扫码结果回传协议。这类方式也可能在客户端升级后失效。
支付宝支付相关的扫码产品用于处理付款码、收款码或支付订单,并不提供通用的物流号码识别服务。接入前应先确认需要的是通用扫码、OCR 还是支付能力,以免选错接口。
如果号码涉及订单信息或个人信息,还需要妥善处理相机权限、隐私政策、图片留存和服务端上传。能够在端侧完成识别时,应尽量避免上传完整的面单图片。确实需要上传时,应明确说明用途,并采取必要的脱敏和访问控制措施。
备注:内容仅供参考。
