最佳实践
更新时间:2024.11.18适用人群
本文档面向使用微信支付扫码支付 API 的开发者和业务人员。
前言
本文档的目的是最大限度地降低风险,保护商户资金安全。扫码支付 API 升级了安全防控体系,但是如果商户在集成和使用时出现安全漏洞,仍会造成商户资金损失。
因此,我们强烈建议商户开发者严格遵循本文档中的安全指南与最佳实践。
我们相信,商户严格遵循安全最佳实践,合理配置安全策略,采取防御性编程,并持续监控与审计,可以最大限度地减轻风险,保护自己的资金安全。
我们衷心希望本文档可以成为您开发与运营过程中安全的重要参考。如有任何安全疑问,请随时与我们联系。
主要风险
使用商家扫码支付 API 的商户系统,存在以下主要风险:
商户 API 密钥泄露
商户收款业务逻辑漏洞
特别是商户自建系统漏洞容易被黑产团体发现和利用。
为了应对这些风险,微信支付提供了一系列的安全防御手段;但是这些措施的有效性还依赖于商户的正确集成与谨慎使用。
安全实践
验证签名
商户系统在接收到微信支付 API 应答时,应始终验证该应答的数字签名。
如果签名验证成功,则表明该应答确实来自微信支付;如果不成功,则表明应答有安全风险,不应被商户系统信任。
签名验证是一种重要的安全最佳实践,可以有效防御中间人、重放攻击等威胁;它确保商户系统只处理真实的、未被篡改的、来自微信支付的应答,从而保护系统的稳定和安全。
微信支付强烈建议商户系统对所有微信支付 API 验证签名。
请主动查单,不要完全依赖支付通知
在商户后台、网络、服务器等出现异常情况时,可能导致商户系统未接收到支付通知,从而使用户的支付状态处于未知状态。
例如以下场景:
用户支付成功,但商户未及时收到支付通知,导致订单状态不更新,影响用户体验。
用户支付成功,商户收到了被篡改的支付通知,导致订单状态错误,可能会给商户和用户带来损失。
商户系统故障,无法处理支付通知,导致订单状态无法更新,影响用户体验。
为了确保支付结果的准确性和及时性,避免用户因此而进行重复支付,建议商户在下单后5分钟后仍未收到支付通知时,主动查询订单状态,同步最新的订单信息。
主动关闭订单
当商户后台收到同一商品的两次购买请求时,为避免用户误以为支付失败而进行重复支付,商户应主动关闭前一笔订单。这样可以确保用户只需支付一次,避免不必要的纠纷和麻烦。
合理设置订单有效期
为了避免因订单长时间未支付而导致的库存锁定或资源浪费,建议商户在下单时设置一个合理的订单有效期。
如果订单超出有效期且用户尚未支付,微信支付会自动阻止该订单继续支付,并将订单状态更新为“已关单”。
关注安全提醒
微信支付会检测商户调用扫码支付的异常行为。
当检测到异常,将通过以下两种方式通知安全联系人:
微信支付客服电话95017
微信支付安全中心的“风险监控”消息
商户应将商户系统的安全或研发人员设置为安全联系人。
安全联系人应注意接听95017的电话,及时关注、处理风险监控消息。
使用安全医生检测漏洞
安全医生是微信支付提供给商户的一个免费安全服务。
它可以帮助商户检测自建系统的漏洞,发现可能影响商户的安全问题,并提供修复建议,为商户资金安全保驾护航。
一旦安全医生检测到问题,它会生成一份报告,报告包含:
漏洞的原因
风险等级(高中低)
漏洞可能造成的影响
修复建议
按照报告中的修复建议,商户应完善网站的安全设置,修复系统漏洞,有效降低安全风险,更安全地使用扫码支付。
安全建议
除了以上实践,商户侧系统需要考虑以下的安全措施:
强化商户侧系统的身份认证和权限机制,避免管理员的弱密码
严格管理商户 API 密钥,加密或使用云厂商提供的密钥管理系统存储密钥
只使用 HTTPS,且采用 TLSv1.2+
商户侧扫码支付下单接口对客户端的输入做有效性校验
严格限流,对频繁的扫码支付下单请求设置限流机制
强化风控策略,检测可疑的扫码支付下单
强化商户侧扫码支付下单服务的监控和异常告警
强化商户侧系统的审计,并及时修复漏洞
进一步阅读