微信支付二维码规范

更新时间: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所示:

图示
图4:生活缴费二维码生成工具

微信支付提供模版下载二维码图片,如微信面对面收款(如图5所示)和付款二维码(如图6所示)。

图示 图示
图5:面对面收款二维码 图6:付款二维码

微信支付对外提供实体物料上的二维码,如微信买单码牌的二维码,如图7所示:

图示
图7:微信买单二维码码牌

微信支付营销宣传物料或海报中使用的二维码,如海报中心加好友二维码,如图8所示:

图示
图8:微信海报中的二维码

微信支付对外提供设备上做绑定的二维码,如收款机具绑定码,收款音箱等,如图9所示:

图示
图示
图9:收款机具绑定二维码

# 5.2.商户自行生成二维码场景

订单小票二维码:商户将二维码打印在订单小票(如图10所示)或缴费单(如图11所示)上,用户扫描后可完成支付:

图示 图示
图10:超市订单小票 图11:医院就诊缴费单

WEB网页收款二维码:用户在商户WEB页面下单后,直接扫描网页上显示的订单二维码完成付款,如图12所示:

图示
图12:WEB页面收款二维码

自助点餐二维码:用户扫描带有桌号的二维码后打开H5或小程序,选择商品确认下单,最后直接完成支付,如图13所示:

图示
图13:自助点餐二维码

收银台收款二维码:商户提供收银台码牌上的二维码, 用户扫描后可输入金额完成支付,如图14所示:

图示
图示
图14:收银台收款二维码

自助设备上的收款二维码:展示在设备上,用户扫描后付款,如图15所示:

图示
图15:充电宝借还机器收款二维码

停车场缴费牌收款二维码:展示停车场的墙壁上,在用户扫描二维码打开H5页面,输入车牌信息完成付款,如图16所示:

图示
图16:停车场收款二维码

# 6. 二维码技术要求

二维码能否扫描会受到图案完整度、图案复杂度、颜色对比度、扫描距离、环境光线、扫描设备分辨率等因素的影响。编码信息越多,二维码图案越复杂。超长内容的二维码图案会非常复杂,需要足够清晰的大图才能完整展示。

# 6.1.二维码生成标准

# 6.1.1.设置内容格式

  1. 微信支付API返回给商户的二维码内容

    统一使用“weixin://wxpay/自定义数据”格式协议,Native支付的二维码内容样例:

    weixin://wxpay/bizpayurl/up?pr=NwY5Mz9

  2. 商户自定义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所示。

图示
图17:屏幕显示分辨率设置
图示
图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%)