微信支付二维码规范
更新时间:2023.04.28# 1. 范围
本规范规定了微信支付二维码的质量要求,包括二维码生成、展示、验收和安全要求。
本规范适用于微信支付组织内部、商户、服务商使用二维码实现收款、绑定设备或营销等功能的产品中二维码设计、展示和维护。
# 2. 规范性引用文件
QRCode 国家标准(GB/T 18284-2000)
# 3. 术语和定义
微信支付二维码:微信支付提供给用户或商户产品中包含的二维码,或商户和服务商自行生成提供微信支付相关功能的二维码。例如收款二维码、付款二维码、绑定设备码或营销功能二维码等。
容错等级: 二维码设计有容错功能,当二维码局部区域被遮挡或污损时仍可以正常识别解码。二维码容错等级分为4等(L、M、Q、H),等级越高对应可恢复的码字比例越高。
# 4. 二维码介绍
# 4.1.二维码码制介绍
常用的二维码码制有:QR Code、汉信码、PDF417二维条码、Datamatrix二维条码、Code 49、Code 16K、Code one等。样例如图1所示:
QR码 | 汉信码 | PDF417码 | Datamatrix码 |
---|---|---|---|
图1 二维码样例
QR二维码的相关背景知识可参考:https://www.qrcode.com/zh/index.html (opens new window)
# 4.2.微信支付码制标准
微信支付收款二维码采用码制为快速响应矩阵码(简称QR Code),下文说的二维码特指QR码。商户可通过引用符合QR码国家标准(GB/T 18284-2000)的第三方库生成收款二维码(注意:不支持Micro QR和IQR码标准)。
此外,如使用微信小程序提供对外服务,可将微信支付二维码更换为小程序码(如图3所示),在小程序内实现微信支付相关功能。
图2:QR码样例 | 图3:小程序码样例 |
# 5. 二维码使用场景
# 5.1.微信支付提供给商户的二维码
微信支付提供给商户二维码链接或图片,例如生活缴费提供给商户打印在缴费单上的缴费二维码,如图4所示:
微信支付提供模版下载二维码图片,如微信面对面收款(如图5所示)和付款二维码(如图6所示)。
图5:面对面收款二维码 | 图6:付款二维码 |
微信支付对外提供实体物料上的二维码,如微信买单码牌的二维码,如图7所示:
微信支付营销宣传物料或海报中使用的二维码,如海报中心加好友二维码,如图8所示:
微信支付对外提供设备上做绑定的二维码,如收款机具绑定码,收款音箱等,如图9所示:
# 5.2.商户自行生成二维码场景
订单小票二维码:商户将二维码打印在订单小票(如图10所示)或缴费单(如图11所示)上,用户扫描后可完成支付:
图10:超市订单小票 | 图11:医院就诊缴费单 |
WEB网页收款二维码:用户在商户WEB页面下单后,直接扫描网页上显示的订单二维码完成付款,如图12所示:
自助点餐二维码:用户扫描带有桌号的二维码后打开H5或小程序,选择商品确认下单,最后直接完成支付,如图13所示:
收银台收款二维码:商户提供收银台码牌上的二维码, 用户扫描后可输入金额完成支付,如图14所示:
自助设备上的收款二维码:展示在设备上,用户扫描后付款,如图15所示:
停车场缴费牌收款二维码:展示停车场的墙壁上,在用户扫描二维码打开H5页面,输入车牌信息完成付款,如图16所示:
# 6. 二维码技术要求
二维码能否扫描会受到图案完整度、图案复杂度、颜色对比度、扫描距离、环境光线、扫描设备分辨率等因素的影响。编码信息越多,二维码图案越复杂。超长内容的二维码图案会非常复杂,需要足够清晰的大图才能完整展示。
# 6.1.二维码生成标准
# 6.1.1.设置内容格式
微信支付API返回给商户的二维码内容
统一使用“weixin://wxpay/自定义数据”格式协议,Native支付的二维码内容样例:
weixin://wxpay/bizpayurl/up?pr=NwY5Mz9
商户自定义H5链接二维码
H5链接符合URL格式规范
https://域名/自定义数据
,自定义数据可由商户根据场景需要设置对应的内容。
# 6.1.2.设置内容长度
随内容长度增加二维码密度会增大,当二维码显示尺寸被限制时,点阵太密会导致二维码难识别,甚至无法识别,二维码识别效果对比如表1所示:
表1:同尺寸下不同内容长度的二维码
二维码 | 字符数 | 可识别程度 |
---|---|---|
30个字符 | 可识别 | |
50个字符 | 可识别 | |
100个字符 | 较难识别 | |
200个字符 | 较难识别 | |
1000个字符 | 无法识别 |
生成二维码时,应根据二维码显示区域边长设置合理的内容长度,内容长度标准见表2所示:
二维码边长 | 内容长度 |
---|---|
2 ~ 3cm | 小于等于30个字符 |
3 ~ 4cm | 小于等于50个字符 |
4 ~ 6cm | 小于等于80个字符 |
6cm以上 | 小于等于100个字符 |
如果实际内容长度超过以上要求,请按以下措施减少字符长度:
URL域名:建议不超过15个字符,使用简短的三级域名,不使用复杂的多级域名;
URL路径:使用简短的路径名,不使用多级目录;
如果以上措施仍无法满足实际场景要求,可将链接转为较短的链接,方法见附录7.2节短链接最佳实践。
# 6.1.3.设置容错等级
二维码容错等级分为4等(L、M、Q、H),等级越高对应可恢复的码字比例越高,具体每个等级可恢复的字符比例为L:7%,M:15%,Q:25%,H:30%。相同长度的内容,容错等级越高,二维码密度越大。
1、二维码展示在屏幕、质量较好的纸上或者有保护的码牌,使用低容错等级(建议使用L等级)。
2、二维码打印在普通纸张展示,建议使用中容错等级(建议使用M等级)。
3、放置在有遮挡场景展示时,建议使用高容错等级(Q或H等级)。
# 6.1.4.设置分辨率
二维码展示在不同媒介上,对分辨率有不同的要求,为保证二维码能够清晰呈现并被扫描识别;作为屏幕使用时,建议二维码图像分辨率不小于72dpi,如图17所示。印刷使用时建议二维码图像分辨率为300dpi或以上,如图18所示。
# 6.2.二维码展示标准
# 6.2.1.对比度
对比度、进光量影响摄像头的成像速度及扫码效率,当二维码在不同媒介使用时,显示效果可能不一样,如图19所示。为兼顾各种场景展示实现可扫描,建议二维码点阵为黑色,背景为白色,不推荐使用灰色或彩色二维码。
正确样例 | 错误样例 | 错误样例 |
# 6.2.2.二维码尺寸
不同场景的使用,建议商户按规范生成二维码,如表3所示。商户也可根据实际情况来调整二维码尺寸,具体尺寸对应内容长度参见6.1.2节设置内容长度。
表3:按场景选择二维码边长
使用场景 | 扫描距离 | 建议二维码边长 |
---|---|---|
订单小票 | 0.1~0.2米 | 不小于2cm |
WEB收款 | 0.2~0.6米 | 不小于2.5cm |
自助点餐 | 0.1~0.3米 | 不小于3cm |
收银台收款 | 0.2~1米 | 不小于4cm |
缴费牌收款 | 0.3-2米 | 不小于10cm |
缴费牌收款 | 1.5~5米 | 不小于30cm |
# 6.2.3.点阵遮挡
二维码有容错率限制,不建议覆盖图形元素。二维码识别中存在三个关键定位点,如果这三个部位被遮挡,将无法识别到二维码,如图20所示。二维码如果需要添加LOGO标识,需使用居中覆盖,如图21所示,建议使用容错等级为M的二维码并保证覆盖面积不超过10%,或者容错等级为H的二维码覆盖面积不超过25%。进行设备识别测试,通过后方可对外发布二维码。
图20:定位点不可遮挡 | 图21:LOGO居中覆盖 |
# 6.3.二维码验收要求
为满足用户微信支付扫描体验要求,要做好收款二维码的质量检查,收款二维码上线前,需要在实际环境下测试和体验,验收完成再上线。上线后,要对收款二维码做好日常维护。具体检查项目和解决方案见表4
表4:二维码验收检查项
质量项目 | 检查项 | 解决方案 |
---|---|---|
二维码展示 | 二维码打印不清晰或打印区域残缺 | 重新打印清晰的二维码 |
二维码展示 | 二维码颜色变淡、污渍遮挡或损毁,无法识别 | 定期检查和更新二维码 |
二维码访问 | 内容链接不可访问 | 建立发现网站服务异常机制,能实时修复 |
二维码访问 | 扫描显示空白页 | 1、使用HTTPS协议时域名证书异常,建议做检查并及时修复 2、链接使用域名,不用IP地址的URL |
二维码访问 | 扫描显示不安全网页 | 在公众号后台设置正确的业务域名 (opens new window) |
二维码访问 | 页面提示其他错误 | 根据具体错误进行处理, 定期检查二维码的正确性 |
# 6.4.二维码安全要求
防止二维码被非法替换:对二维码做好保护措施,可使用码牌保护,放置到用户不能接触到的地方;
防伪要求:二维码物料上可添加公司logo;
二维码链接使用HTTPS协议,避免被注入脚本攻击;
网站做好安全维护,防止用户扫码后下载病毒;
# 7. 附录
# 7.1.参考文献
商品二维码标准: 国家商品二维码标准 (opens new window)
名片二维码: 名片二维码通用技术规范 (opens new window)
QR码官方介绍: QR码官方 (opens new window)
# 7.2.长链转短链最佳实践
二维码内容对应链接参数较多的情况,可以通过key-value机制实现长链接转短链接。短链接中定义唯一ID(唯一ID可由字母+数组组合),链接访问时,后台通过ID映射跳转到带有参数的链接。
长链接URL示例:URL带有多个参数,长度超过本规范建议长度样例:
http://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/.shtml?param1=1&code=aaa&id=12345
短链接示例:URL相对路径短,只带有一个参数,该参数可以作为唯一标识对应后台的记录(标识生成规则:固定位数,如7位,通过大写字母+小写字母+数字组合)样例:
https://qq.com?p=NwY5Mz9
# 7.3.收款二维码参考样例
微信支付常用二维码的参数情况:
表5:微信支付二维码参考样例参数对比
场景 | 二维码内容 | 尺寸 | 字符长度 | 容错等级 | 遮挡 |
---|---|---|---|---|---|
付款码 | 13000340462411586 | 2.9cm | 18个 | L(7%) | 无 |
面对面付款 | wxp://f2f0Np0YBB7lPJdp-F-kZUmIMCP3OCY2C3tWzSG60KPtjNM= | 3.2cm | 54个 | Q(25%) | 有 |
微信买单二维码 | https://payapp.weixin.qq.com/materialqr/entry/home?id=00134545384 | 5cm | 68个 | M(15%) | 无 |