2024年5月3日发(作者:)

“微信刷卡支付系统”概要设计说明书

2、【观察商户自有系统日志】30秒内,商户后台定期(建议每5秒)调微信支付查

询订单API,查询订单API返回订单状态trade_state=USERPAYING;

3、【观察商户自有系统日志】30秒后,调微信撤销订单API,撤销成功

4、登陆微信支付商户系统,确认

1)支付场景为“小额支付”

2)交易总金额为0.05元

3)订单交易状态为“已撤销”

4)商户订单号正确(与商户自有系统中的订单号完全相同)

5、更换订单号后再次发起支付,支付成功。

6、登陆商户自有系统,查看订单详情,应与结果4完全一致(名词可能略有不同)。

3.10 【必选】订单金额0.51元,模拟密码错误,返回FAIL,查单NOTPAY,再撤销

用例编号 3-2-6 【被扫-异常】订单金额0.51元,模拟密码错误,返回FAIL,查单NOTPAY,

再撤销

用例说明 验证对于支付结果异常的情况,商户侧是否做了正确的处理。

测试准备 1. 测试微信号已开通刷卡功能,零钱或银行卡余额充足

测试步骤 1、手机客户端进入“微信-我-我的钱包-刷卡-选择零钱”获取支付条码;

100

“微信刷卡支付系统”概要设计说明书

2、在收银台输入订单金额为0.51元,扫码枪扫描上图条码,完成支付;

3、登陆微信商户系统(),查询该笔订单详情;

4、登陆商户自有系统,查询该笔订单详情。对订单状态、金额等信息进行核对。

预期返回 1、微信被扫支付API返回“SYSTEM ERROR”;

101

“微信刷卡支付系统”概要设计说明书

2、【观察商户自有系统日志】30秒内,商户后台定期(建议每5秒)调微信支付查

询订单API,查询订单API返回订单状态trade_state=NOTPAY;

3、【观察商户自有系统日志】确认订单支付失败后,调微信撤销订单API,撤销成

4、登陆微信支付商户系统,确认

1)支付场景为“小额支付”

2)交易总金额为0.51元

3)订单交易状态为“已撤销”

4)商户订单号正确(与商户自有系统中的订单号完全相同)

5、登陆商户自有系统,查看订单详情,应与结果4完全一致(名词可能略有不同)。

3.11 【必选】订单金额0.52元,模拟余额不足,返回FAIL,查单PAYERROR,再撤销

用例编号 【被扫-异常】订单金额0.52元,模拟余额不足,返回FAIL,查单PAYERROR,再

撤销

用例说明 验证对于支付结果异常的情况,商户侧是否做了正确的处理。

测试准备 1. 测试微信号已开通刷卡功能,零钱或银行卡余额充足

测试步骤 1、手机客户端进入“微信-我-我的钱包-刷卡-选择零钱”获取支付条码;

102

“微信刷卡支付系统”概要设计说明书

2、在收银台输入订单金额为0.52元,扫码枪扫描上图条码,完成支付;

3、登陆微信商户系统(),查询该笔订单详情;

4、登陆商户自有系统,查询该笔订单详情。对订单状态、金额等信息进行核对。

预期返回 1、微信被扫支付API返回“SYSTEM ERROR”;

103

“微信刷卡支付系统”概要设计说明书

2、【观察商户自有系统日志】30秒内,商户后台定期(建议每5秒)调微信支付查

询订单API,查询订单API返回订单状态trade_state=PAYERROR;

3、【观察商户自有系统日志】确认订单支付失败后,调微信撤销订单API,撤销成

4、登陆微信支付商户系统,确认

1)支付场景为“小额支付”

2)交易总金额为0.52元

3)订单交易状态为“已撤销”

4)商户订单号正确(与商户自有系统中的订单号完全相同)

5、登陆商户自有系统,查看订单详情,应与结果4完全一致(名词可能略有不同)。

3.12 【可选】订单金额0.53元,支付成功,返回FAIL,对账不平

用例编号

用例说明

测试准备

测试步骤

3-2-9 【被扫-对账】订单金额0.13元,支付成功,通知失败,对账不平

验证商户对于对账不平的情况做了正确处理。该用例可选。

1. 测试微信号已开通刷卡功能,且银行卡或零钱余额充足。

1、根据用例3-2-1的步骤,支付一笔金额为0.53元的订单,支付失败。微信支付

接口返回system error;

2、登陆商户自有系统,查看该笔订单状态,确认订单状态为:

1)交易总金额为0.53元

2)订单交易状态为“已撤销”

104

“微信刷卡支付系统”概要设计说明书

3、T+1日下载对账单,查看该笔交易,确认订单状态为:

1)交易总金额为0.53元

2)订单交易状态为“支付成功”

预期返回 1、需要测试人员保证,商户自有系统有程序或人工流程,对该笔订单进行退款。

3.13 【可选】订单金额1.01元,零钱+现金券支付,支付成功

用3-2-10 【被扫-支付】订单金额1.01元,零钱+现金券支付,支付成功

用若商户支持企业红包的功能,则该用例为必选。

测1、手机客户端进入“微信-我-我的钱包-刷卡-选择零钱”获取支付条码;

1. 1、测试微信号已开通刷卡功能,且微信零钱余额充足

2. 2、根据商户自助发企业红包指引,已发送1元企业红包到测试微信号卡包中

105

“微信刷卡支付系统”概要设计说明书

2、在收银台输入订单金额为1.01元,扫码枪扫描上图条码,完成支付;

3、登陆微信商户系统(),查询该笔订单详情;

4、登陆商户自有系统,查询该笔订单详情。对订单状态、金额等信息进行核对。

预1、手机客户端提示支付成功,如下图:

106

“微信刷卡支付系统”概要设计说明书

2、登陆微信支付商户系统(),确认:

1)支付场景为“小额支付”

2)交易总金额为1.01元

3)交易为1.00元

4)交易状态为“买家已支付”

5)商户订单号正确(与商户自有系统中的订单号完全相同)

107

“微信刷卡支付系统”概要设计说明书

3、登陆商户自有系统,查看订单详情,应与结果4完全一致(名词可能略有不同)。

3.14 【必选】订单金额1.02元,零钱+现金券支付,模拟支付网络超时,再撤销

用3-2-11 【被扫-支付】订单金额1.02元,零钱+现金券支付,支付成功

用验证正常的支付流程

108

“微信刷卡支付系统”概要设计说明书

测1、手机客户端进入“微信-我-我的钱包-刷卡-选择零钱”获取支付条码;

1. 1、测试微信号已开通刷卡功能,且微信零钱余额充足

2. 2、根据商户自助发企业红包指引,已发送1元企业红包到测试微信号卡包中

109

“微信刷卡支付系统”概要设计说明书

2、在被扫调试工具页面手动输入条码(如上图120xxxxx这串数字)和金额,提交支付;

3、登陆微信商户系统(),查询该笔订单详情;

4、登陆商户自有系统,查询该笔订单详情。对订单状态、金额等信息进行核对。

预1、手机客户端提示支付成功,如下图:

110

“微信刷卡支付系统”概要设计说明书

2、登陆微信支付商户系统(),确认:

1)支付场景为“小额支付”

2)交易总金额为1.01元

3)交易状态为“买家已支付”

4)商户订单号正确(与商户自有系统中的订单号完全相同)

111

“微信刷卡支付系统”概要设计说明书

3、登陆商户自有系统,查看订单详情,应与结果4完全一致(名词可能略有不同)。

3.15 【可选】订单金额1.68元,性能压测,支付总是返回成功,平均响应时间800ms

用例编号 3-2-12 【被扫-支付】订单金额1.68元,性能压测,支付总是返回成功,平均响

应时间800ms

用例说明

测试准备

验证商户自有系统压力下的性能表现。

1. 测试微信号已开通刷卡功能

112

“微信刷卡支付系统”概要设计说明书

测试步骤 1、商户接入沙箱环境,签名密钥修改为” ABCDEFGHIJKLMNOPQRSTUVWXY

Z123456”

2、商户使用POS机生成一笔1.68元金额的订单(随机被扫码,订单号)

3、用手机进行支付,检查支付结果是否可以成功

4、使用压力工具生成大量1.68元金额的订单(随机被扫码,订单号,无需有效)

5、检查压力下这些订单是否都可以100%成功支付,平均响应时间是否为800ms,

每秒性能吞吐是否符合需求

预期返回 检查压力下这些订单是否都可以100%成功支付,平均响应时间是否约为800ms,

每秒吞吐是否符合业务需求。

3.16 注意:如果支付报授权码已过期,请刷新客户端的条码,重新发起支付。

113

“微信刷卡支付系统”概要设计说明书

第九章 最佳安全实践

1. 阅读对象

本文阅读对象为:商户平台日常使用者,以及商户自有系统(包括但不限于:在线购物平台、

人工收银系统、自动化智能收银系统、APP应用等)负责微信支付功能研发流程的人员(包括产品、

研发、运维等技术人员)。

2. 商务平台安全使用

对于接入了微信支付的商户们来说,请仔细阅读和遵守该最佳安全实践,将极大的提升贵公司在使

用微信支付时的安全性。我们也会持续关注商户安全性,将最新最好的实践更新于此。

对于商户平台的安全使用,我们从 申请入驻、收到开户邮件、登录商户平台、商户平台日常使用

四个方面来展开。

2.1申请入驻

a、申请入驻微信支付不会收取任何费用,谨防上当受骗。

b、提交申请资料后,需注意申请资料的保管,防止泄漏或丢失。

2.2收到开户邮件

a、 开户邮件内容中包含了帐户、初始登录密码等敏感信息,需妥善保管,防止泄漏。

2.3登录商户平台

a、首次登录请修改登录密码,密码复杂度建议大于8位字符,并且同时含有大、小写、数

字、特殊符号。

b、仔细检查域名是否为 ,防止误登录钓鱼网站导致密码等

信息的泄漏。

2.4商户平台日常使用

a、登录权限保护

114

“微信刷卡支付系统”概要设计说明书

1. ◆ 定期(至多6个月)修改登录密码。

2. ◆ 保护好注册管理员的手机设备,因为资金等敏感操作需要验证这个短信验证码。

3. ◆ 合理的划分操作员及其权限,实施最小化权限原则。

4. ◆ 离职或工作调动后员工操作权限的清理和定期回收。

5. ◆ 为每一个员工建立员工帐号,而不是多个人混用同一个帐户。

b、浏览器选择

1. ◆ 使用较新的主流浏览器并检查开启浏览器和系统的自动更新机制。

c、功能使用

1. ◆ 企业营销功能需要设置防刷级别、限领次数等安全功能,如果是调用API,建议设置访问

IP白名单等。

3. 系统开发注意事项

对于接入了微信支付的商户们来说,请仔细阅读和遵守该最佳安全实践,将极大的提升贵公司在使

用微信支付时的安全性。我们也会持续关注商户安全性,将最新最好的实践更新于此。

对于需要自行或外包开发信息系统的商户来说,有一些安全的注意事项,我们从 需求、设计、编码、

测试、部署&运维 五个方面来展开。

3.1需求

a、 商户自建营销活动需设计防刷机制。

3.2设计

a、数据采集

1. ◆ 法律禁止企业记录和存储的数据(如磁道信息、信用卡CVV码等)不能收集。

2. ◆ 客户端敏感数据必须先进行加密处理。

b、数据传输

1. ◆ 使用HTTPS确保网络传输安全性。

115

“微信刷卡支付系统”概要设计说明书

2. ◆ 禁用SSL等不安全协议和算法,建议使用TLS1.2。

3. ◆ 不要轻易的尝试设计和实现自己的加密传输算法,几乎都会存在问题。

c、数据保存

1. ◆ 敏感信息禁止出现在日志中,如确实需要,需进行脱敏处理。

2. ◆ 缓存和DB中的敏感数据需进行加密或者虚化(Hash)。

3. ◆ 密码等关键认证必须采用加盐Hash方式保存。

d、数据访问

1. ◆ 外部请求数据访问必须进行鉴权操作。

2. ◆ 对于内部的数据访问要严加控制,降低用户信息泄漏风险。

e、审计日志

1. ◆ 记录的操作日志要包括5W信息(Who、When、Why、How、What)。

f、资金处理

1. ◆ 建立对账机制,每天对系统收支数据与微信支付数据进行对账,避免资金出现问题。

2. ◆ DB或者KV需要设计数据防篡改机制。

3.3编码

a、防止参数处理不当导致的常见漏洞

1. ◆ 参考 Web漏洞检测及修复

b、防止逻辑处理不当导致的漏洞

1. ◆ 支付成功回调通知必须验证微信支付签名,避免被恶意攻击。

2. ◆ 在后台进行商户价格的判断逻辑,避免客户端篡改价格导致商户损失。

3. ◆ 避免在App或者网站页面里面出现商户APIkey或API证书等信息,防止泄漏。

c、APP开发安全注意事项

1. ◆ IOS应用安全开发参考 Apple NextPrevious Security Development Checklists

2. ◆ andriod应用安全开发参考 Andriod Security Tips

116

“微信刷卡支付系统”概要设计说明书

3.4测试

a、对输入输出参数进行专项安全测试。

b、 通过众测或自建、第三方的安全扫描机制对系统进行安全扫描并对问题进行修复。

3.5部署&运维

a、确保系统所使用商业和开源组件的版本是最新稳定版。

b、参考此份checklist进行安全配置 系统漏洞检测及修复

c、考虑系统和数据服务容灾,至少有主备机制,建议多机房多地部署。

d、建议采用各大云系统,并且启用相关的云安全防控机制。

e、如有条件,建议自建或者购买一些安全监控服务或设备。

f、设定关键指标项,进行实时数据上报和监控

g、有专门的人员来跟进安全事件的处置。

h、关注信息系统所使用框架及组件的安全信息情况。

i、按时打补丁,定期检查系统升级。

j、服务端口开启最小化原则。

k、服务器登录操作可审计。

m、内部管理运营系统必须认证登录做操作日志记录以供审计。

n、建立业务下线机制,不再使用的业务做下线操作减少被攻击面。

117

“微信刷卡支付系统”概要设计说明书

第十章 SDK下载

1. SDK下载

平台和语言 说明

JAVA

支付模式

下载【微信支付】API对应的SDK和调用示例 刷卡支付

.NET C# 【微信支付】API对应的SDK和调用示例 刷卡支付、微信内网页支付、扫码支付 下载

PHP 【微信支付】API对应的SDK和调用示例 刷卡支付、微信内网页支付、扫码支付 下载

2. 注意事项

2.1服务器SSL版本说明

由于低版本的SSL存在高危漏洞,需要确认您系统所使用的SSL版本是否需要升级,详细说明请见

公众平台SSL安全策略说明:/cgi-bin/announce?action=getannou

ncement&key=1414562353&version=11&lang=zh_CN

Java开发可以参考Oracle网站的说明:[Oracle Java disable SSL3](/t

echnetwork/java/javase/documentation/)

2.2 IPV6相关

如果您的服务器开启了IPv6支持,由于当前互联网对IPv6支持不完整,导致在DNS解析时通常会

碰到超时问题;

建议在调用支付API时,显示指定使用IPv4解析.

PHP程序使用curl调用参考代码如下:

if(defined('CURLOPT_IPRESOLVE') && defined('CURL_IPRESOLVE_V4'))

{

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

118

“微信刷卡支付系统”概要设计说明书

}

2.3无法连接微信服务器,访问超时

a. 是否存在跨运营商访问的情况,详见网络超时的定位

可以ping 查询对应的解析IP

通过访问获取取口IP,也可以根据商户侧服务器的外网IP确认

b. 是否使用的阿里云主机

由于阿里云使用的BGP,需要确认解析出来的IP是否为182.254.44.159,否则需要调整DNS设

置,使用阿里本身的DNS服务器

c. 是否使用curl库访问

需要指定参数使用ipv4,具体可参考/article/

d. 确认java程序使用的HttpClient的版本是否<=4.3.4

可升级HttpClient到4.3.6版本

3. 联系我们

添加公众号“微信支付商户通”,发微信消息可以联系到我们;

发邮件到*******************;

119