微信支付
开通微信支付的步骤
-
注册商户号:首先,需要在微信支付商户平台注册并获取商户号。
-
申请开通微信支付功能:商户需要提供相关资质文件,申请开通支付功能。
-
配置 API 密钥与证书:在商户平台生成并配置 API 密钥,以及商户号的证书。
-
开发集成支付接口:商户可以选择使用微信提供的 SDK 或自行调用 API,集成微信支付功能。
-
测试支付流程:在开发完成后,商户可以在测试环境中进行支付流程测试,确保支付功能正常。
-
上线支付功能:经过测试并确认无误后,可以将微信支付功能上线,正式进行商户交易。
微信支付商户平台上配置 API 密钥和证书,可以按照以下步骤操作
-
登录微信支付商户平台:
- 访问 微信支付商户平台,使用您的商户号和密码登录。
-
设置 API 密钥:
- 在左侧导航栏中,依次点击“账户中心” > “API安全”。
- 在“API密钥”部分,点击“设置密钥”。
- 输入一个包含数字和大小写字母的32位字符作为您的 API 密钥。
- 点击“确认”保存设置。
-
申请 API 证书:
- 在“API证书”部分,点击“申请证书”。
- 根据提示,下载并安装微信支付商户平台证书工具。
- 运行证书工具,填写您的商户号和商户名称,生成请求串。
- 将生成的请求串复制到商户平台的相应位置,提交申请。
- 申请成功后,可以下载包含公钥和私钥的证书文件。
请注意,API 密钥和证书是与微信支付系统进行安全通信的关键,务必妥善保管,避免泄露。
如需更详细的操作指南,可以参考以下链接:
- 微信商户号证书和密钥设置详细教程--搜下相关博文,简书不能放链接
- 微信商户号 API 密钥、API 证书配置-搜下博文吧,简书不能放链接
在完成上述配置后,才可以继续进行支付接口的开发和集成。
微信支付中的四个核心概念
1. 商户号 (Mch_id)
作用:
商户号是微信支付商户在微信支付系统中的唯一标识符。每个商户号对应一个商户账号,所有支付相关的请求都会通过商户号进行标识,确保交易是由合法的商户发起的。
- 微信相关操作很多都以商户号作为维度
- 一个公司可以有多个商户号。微信支付允许一个公司注册多个商户号,尤其是当公司在不同的业务领域或不同的地区开展业务时,可以为每个子公司、分支机构或不同的支付场景配置独立的商户号。
页面展示:
在微信支付商户平台中,商户号通常显示在 商户信息 页面。登录后,可以在商户中心查看商户号。
存储内容:
商户号通常为一个 数字 字符串,例如:1234567890
。
文件存储:
商户号作为请求参数的一部分,与其他支付请求的参数一起存储在请求数据中,用于每次的 API 调用。商户号不会单独存储在证书中,通常是在数据库中保留。
2. 商户号公钥/私钥
作用:
- 公钥:用于加密信息,商户将需要加密的数据使用公钥加密,微信支付系统通过商户的公钥来解密信息。保证了数据传输的安全性。
- 私钥:商户用于签名生成的密钥。商户使用私钥对请求参数进行签名,以保证请求的完整性和合法性。微信支付系统使用商户的公钥来验证签名。
页面展示:
商户在微信支付商户平台的 API安全 页面进行配置和管理。在此页面,商户会看到API密钥、证书配置等信息。
文件格式和存储内容:
-
私钥文件:商户需要生成一个 PKCS#8 格式的私钥文件(通常是
.pem
格式),用于签名。 -
公钥文件:商户也需要生成一个公钥(通常为
.pem
格式),并上传到微信支付平台,平台用它来验证商户的签名。- 私钥存储:商户服务器上安全存储,确保私钥的安全。
- 公钥存储:公钥可以公开存储在微信支付平台和商户服务器。
文件存储:
私钥和公钥文件会存储在商户的服务器上。通常情况下,私钥存储在加密文件中,而公钥可以直接存储为一个 PEM 格式文件。每次签名时,商户会从存储中加载私钥生成签名。
3. API 密钥
作用:
API 密钥是商户用来加密接口请求数据并验证签名的重要安全手段。在微信支付接口请求中,API 密钥确保传输数据的完整性和可靠性。商户请求时会使用该密钥进行数据加密,微信支付会用商户提供的 API 密钥验证请求的合法性。
页面展示:
商户在微信支付商户平台的 API安全 页面设置和查看 API 密钥。
该页面提供 API 密钥 的生成和修改选项。
- API密钥不能随意改,改了不同步到对应的商户系统,直接与微信交互报错
存储内容:
API 密钥是一个 32 位长度的字符串,由字母和数字组成。商户在商户平台上设置后,微信支付会存储该密钥,并用于请求验签和加密。
文件格式和存储内容:
-
API 密钥格式:由字母和数字组成的32位字符,例如:
1234567890abcdef1234567890abcdef
。 - 存储:商户应将 API 密钥存储在 安全的服务器环境中或者配置文件,并避免暴露给未经授权的人员。常见的做法是将其保存在数据库中加密存储。
4. 平台证书
作用:
微信支付 V3 版本引入了平台证书,用于商户与微信支付系统之间的安全数据交换。商户使用平台证书加密敏感数据,微信支付用相应的私钥解密。平台证书提高了通信的安全性,避免了数据在传输过程中被篡改或泄露。
页面展示:
平台证书在 API安全 页面中可以看到。商户需要申请证书并下载,生成证书时需要商户信息。
文件格式和存储内容:
-
证书格式:平台证书是 PEM 格式 的文件,通常包括
public
和private
证书。 -
证书存储:平台证书及其私钥文件需要保存在商户服务器的 安全目录 中。
- 公钥证书:商户下载的公钥证书文件,用于加密与微信支付系统间的数据。
- 私钥证书:商户生成的私钥证书,微信支付通过该私钥证书解密请求数据。
文件存储:
平台证书及私钥需要在商户的服务器或者配置文件中保存。
- 商户号:标识商户身份,通常存储为数字字符串,管理在商户平台中。
-
商户公钥/私钥:用于加密数据和签名验证,私钥文件通常为
.pem
格式,公钥可以公开上传到商户平台。 - API 密钥:用于接口加密和签名验证,32位的字母数字组合,商户需要妥善保存。
-
平台证书:V3版本新增证书,用于加密与微信支付系统之间的敏感数据交换,格式为
.pem
,包括公钥和私钥。
商户需确保这些核心概念和文件的正确配置与存储,以保障微信支付的安全性和数据传输的可靠性。
V2 与 V3 的区别
-
API 设计与接口结构:
- V2:接口主要基于传统的 HTTP 请求响应模式,使用的是传统的 HTTP 协议,商户接口信息相对简单。
- V3:V3 版本在接口设计上进行了优化,所有请求均采用 HTTPS,支持更为细粒度的权限控制和更加规范的接口结构,增强了安全性和可维护性。
-
安全性提升:
- V3 在 V2 的基础上增加了更多安全措施,尤其是在签名和证书的管理上,V3 引入了 平台证书、APIv3 密钥 和 HMAC-SHA256 等更加先进的加密方法,保证了交易过程中的数据传输更加安全。
-
V2 版本使用的是传统的 对称加密(例如 MD5),它通过商户的 API 密钥 来生成签名和加密数据。这种方式相对简单,但在安全性上存在一定的风险,特别是在密钥泄露时。
-
V3 版本采用了 非对称加密(例如 HMAC-SHA256),并引入了 平台证书 和 APIv3 密钥 来加密和验证数据。这种加密方式增加了系统的安全性,因为即使泄露了某些密钥,攻击者也无法轻易篡改数据。
-
V3 版本通过引入 非对称加密 和更复杂的 平台证书管理,比 V2 版本在安全性上更为增强。
-
证书与密钥管理:
-
V2 版本中,商户会使用 商户号证书 (
apiclient_cert.p12
) 来进行 API 签名和身份验证。 - V3 版本则全面采用了 平台证书 和 APIv3 密钥,并采用了更为复杂的认证机制,且所有商户证书及密钥需要通过微信商户平台配置和管理。
-
V2 版本中,商户会使用 商户号证书 (
- 本质就是对称加密和非对称加密
支持V2和V3两个微信版本的系统是否可以交付?
一个系统可以同时支持微信支付的 V2 和 V3 版本,但这通常涉及到兼容性的处理。微信支付的 V2 和 V3 版本有不同的接口设计和安全要求,因此在实际开发中,需要根据不同版本的需求进行相应的配置和集成。你可能需要通过接口版本的切换或者在后端提供不同的适配逻辑来同时支持 V2 和 V3 接口。
- 实际企业是需要同时支持的,因为旧的链路v2还是很高效而且一直沿用
微信支付V2和V3的区别
为了更清晰地对比 V2 和 V3 的区别,下面是表格形式的详细对比:
特性 | V2 版本 | V3 版本 |
---|---|---|
安全性 | 使用商户号的证书 (apiclient_cert.p12 ) 和 API 密钥进行数据签名和加密 |
增强了安全性,使用平台证书、APIv3密钥,并引入 HMAC-SHA256 加密方式,保障通信安全 |
证书管理 | 商户需要手动上传和配置证书,使用 P12 格式证书 | 引入了平台证书和 APIv3 密钥,证书管理更为规范化 |
API 设计 | 主要基于 HTTP 请求和响应 | 更为规范,所有请求均使用 HTTPS,提供了更细粒度的权限控制 |
签名方式 | 使用商户证书进行签名 | 引入了更复杂的 HMAC-SHA256 签名方式,增加了签名安全性 |
证书配置 | 仅需要配置商户证书及私钥 | 需要配置商户证书、平台证书和 APIv3 密钥,管理方式更复杂 |
接口方式 | 使用传统的接口方式 | 提供了更为丰富的接口,增强了数据交换和处理能力 |
回调处理 | 支持异步回调 | 同样支持异步回调,并增加了更为详细的接口设计,支持更复杂的业务逻辑 |
微信支付后的回调特点
- 异步通知:微信支付完成后,微信支付平台会发送异步回调到商户配置的回调 URL。回调通知包括支付状态、商户订单号等关键信息,商户需要根据回调的内容确认订单状态。
- 签名验证:回调通知的内容需要进行验签,商户通过验证签名来确保回调信息的真实性,防止信息伪造。
异步通知-多次回调
微信支付成功后的回调不仅仅是一次回调,实际上,在某些情况下,可能会进行 多次回调。
主要原因是微信支付可能需要对支付状态进行确认,特别是在涉及 订单状态更新、支付结果确认 和 退款状态变更 时,会发送多次回调通知。
为了避免重复处理,商户系统需要有合适的 幂等性 控制措施,确保相同的事件只会处理一次。
验签-签名验证
验签是验证请求数据的完整性和真实性的过程,防止数据在传输过程中被篡改。商户发起请求时,会将数据进行签名,微信支付平台收到请求后,会使用商户的公钥或 APIv3 密钥对请求数据进行验证,确保请求的合法性和完整性。
验签流程:公钥与 APIv3 密钥的关系
在微信支付中,验签的确是一个重要的安全步骤,目的是验证商户发起的请求是否被篡改,以及请求的合法性。
签名流程:
- 商户发起请求时,会使用自己的 私钥(对于 V2)或 APIv3 密钥(对于 V3)来签名请求的数据。
- 微信支付系统收到请求后,会使用商户的 公钥(V2)或 APIv3 密钥(V3)来对签名进行验证,确保请求数据没有被篡改。
验签使用公钥还是 APIv3 密钥?
-
V2 版本:微信支付使用商户提供的 公钥 来验证签名。公钥和私钥是一对 非对称密钥,私钥用于签名,公钥用于验签。
-
V3 版本:由于 V3 引入了平台证书和更强的安全机制,验签使用的是 APIv3 密钥,同时可能涉及到 平台证书,并使用 HMAC-SHA256 签名算法。商户使用 APIv3 密钥对数据进行签名,微信支付则使用相应的 APIv3 密钥来进行验签。
取决于什么:
- 在 V2 版本中,公钥用于验签。
- 在 V3 版本中,APIv3 密钥用于验签。
所以,V2 版本使用公钥,V3 版本使用 APIv3 密钥,不是“或”的关系,而是由版本和加密机制决定的。
自主研发软件上线需要的流程与注意点
-
需求与功能规划:首先明确软件的需求,确定哪些功能需要支持微信支付,包括支付、退款、订单查询等。
-
技术方案设计:确定系统架构、数据库设计、支付模块设计,确保支付接口与后端系统无缝对接。
-
开发与集成:在确保 API 密钥、商户号、平台证书等配置正确的情况下,进行支付接口的开发与集成。
-
测试:
- 单元测试:确保每个功能模块的正常运行。--这步很重要了,打通就行了
- 集成测试:测试整个支付流程,包括支付、回调、退款等功能,确保与微信支付系统的兼容性。
-
验签与安全性:务必保证支付数据的安全性,防止因签名错误导致的数据篡改或伪造。
-
上线前验证:上线前进行完整的支付流程测试,验证支付是否可以顺利进行,回调是否能够正确收到。
-
合规性与法律风险:确保所有的支付流程符合相关法律法规,避免因合规问题影响上线。
补充下重点的V3支付
微信支付 V3 版本流程图
V3 版本的微信支付安全机制相比 V2 版本更加复杂,涉及了更多的安全组件和流程。以下是微信支付 V3 版本的核心流程图:
V3 微信支付流程图
商户系统(商户发起支付) → 生成支付请求(使用私钥签名) → 微信支付系统(验签)
↓
商户系统(支付成功通知) → 微信支付系统(发起异步通知)
↓
商户系统(异步通知验证签名) → 完成支付处理
关键流程和加密解密过程
-
商户发起支付请求:
- 商户系统发起支付请求时,首先需要构建请求数据,并使用商户的私钥进行签名。
- 使用 APIv3 密钥 或商户的 私钥 对请求数据进行签名,确保数据传输的安全性和完整性。
-
微信支付系统验签:
- 微信支付收到请求后,使用商户提供的 公钥 或 APIv3 密钥 对请求进行签名验证,确保数据没有被篡改。
-
支付成功通知:
- 微信支付支付成功后,向商户系统发出异步通知,商户系统会收到支付通知,并需要对该通知进行验签。
-
商户验签异步通知:
- 商户系统使用 商户公钥 或 APIv3 密钥 对微信支付发送的异步通知进行验签,以确保通知的真实性和完整性。
各个证书和密钥的作用
在微信支付 V3 版本中,涉及多个证书和密钥,每个证书和密钥在加密、解密以及验签的过程中都有其特定的作用。下面是详细的说明:
证书/密钥 | 作用 | 加密/解密/验签过程 |
---|---|---|
商户私钥 | 用于签名请求数据。 | 商户使用私钥生成签名,用于验证请求的完整性。 |
商户公钥 | 用于微信支付系统验证商户请求数据的签名。 | 微信支付系统使用商户公钥来验证商户发起的请求数据的签名,确保数据未被篡改。 |
APIv3 密钥 | 用于签名请求数据和验签异步通知。 | 商户使用 APIv3 密钥对请求和支付结果进行签名;微信支付使用 APIv3 密钥对请求进行验签。 |
平台证书 | 用于加密和解密商户与微信支付系统之间的敏感数据。 | 商户使用平台证书加密数据,微信支付使用平台证书解密。 |
其他的一些注意点:
- 单次支付的限制:5w.开通网联限额可以取消这个限制
- 微信支付只是多个支付的其中一种方式,对于系统维度来说,支付一般需要使用策略模式,支持多渠道支付,常用的三种1.微信支付 2.支付宝支付 3. 银联支付
- 在开发上其实v3是比较重要的,v2改动和验证都很快,现在主要用的是V3.
- 开发的时候这些肯定是封装好的,但是遇到证书过期或者apiV3密钥修改等等这种情况需要对微信支付全流程以及各个证书的作用非常了解,不然你的系统就不能发放微信券和支付了,也没法回调了,影响非常大。
共有 0 条评论