最近在做一个支付平台项目,承担公司业务系统与第三方支付平台对接的任务,主要涉及微信支付、支付宝支付、立方通支付等第三方平台。 作为后起之秀,微信支付的市场份额有望赶上支付宝。 其复杂多样的社交属性使得支付场景变得丰富而深入。 下面主要从业务后端对接的角度对微信开发文档进行了总结,筛选出我们需要注意的点。 (前端与App对接请查看官方信息) 1、术语解释 商户号:微信支付分配的商户号。 付款审核通过后,申请人邮箱将收到腾讯发来的开户邮件。 该邮件包含商户平台账号、密码等重要信息。
:商户通过微信管理后台成功申请服务号、订阅号、小程序或APP应用后,微信将为每个应用分配一个唯一的识别ID。
:公众号中的用户身份一经确认,不会改变; 同一用户在不同的公众号中拥有不同的ID。 商户后台系统可以通过登录授权、支付通知、订单查询等API获取用户信息。 主要目的是识别同一用户并向该用户发送客服消息、模板消息等。
微信管理后台:微信有很多管理平台,很容易混淆。 我们主要关注以下三个平台:
1.微信公众平台微信公众号申请入口及管理后台。 商户可在公众平台提交基本信息、经营信息、财务信息申请微信支付功能。 账号分类:服务号、订阅号、小程序、企业微信(也称企业号,类似企业OA)。
2、微信商户平台上与微信支付相关的商户功能集合,包括参数配置、支付数据查询与统计、在线退款、代金券或即时折扣操作等功能。
3、微信开放平台商户APP接入微信支付开放接口的应用入口。 您可以通过该平台申请微信APP支付。
签名:商户后台和微信支付后台基于相同的密钥和算法生成结果,用于验证双方身份的合法性。 签名算法由微信支付制定并公开。 常用的签名方法有:MD5、SHA1、HMAC等。
密钥:作为签名算法中的盐,需要在微信平台和商户业务系统中保存一份,并且必须妥善保存。 密钥设置路径:微信商户平台()-->账户设置-->API安全-->密钥设置。 2、支付流程及场景 一个完整的支付流程如下:用户在业务系统下单,进入收银页面; 选择微信支付,商家后台将商家订单信息传输至微信后台完成预购; 获取预购 收到订单结果后,收银员调出微信交互页面,用户输入密码确认支付; 微信后台完成支付逻辑,并通知业务后台完成业务侧逻辑。 微信目前支持多种支付场景,重点关注二维码支付和公众号支付。
1. 卡支付申请流程
用户将微信钱包中的“刷卡条码/二维码”出示给商户系统进行扫描,即可直接完成支付。 主要应用于线下面对面收银场景。 大家比较感兴趣的是收银员是如何扫描我们的微信条码的,卡上的钱是如何被扣除的?
免密码支付流程

2.扫描二维码支付申请流程
商户系统根据微信支付协议生成支付二维码,用户再使用微信“扫描”即可完成支付。 该模式适用于PC网站支付、实体店商品或订单支付、媒体广告支付等场景。 根据二维码含义分为两种模式。 (二维码知识)


3. APP支付申请流程
又称移动支付,是商户将开放的SDK集成到移动应用APP中,激活微信支付模块完成支付的模式。
4.公众账户支付申请流程
对于公众号支付,用户在微信中打开商户的H5页面,商户通过调用微信支付提供的接口,在H5页面上调用微信支付模块完成支付。 应用场景包括:
业务流程

笔记
5.H5支付
H5支付是指商家在微信客户端之外的移动网页上展示商品或服务。 当用户在上述页面确认使用微信支付时,商户启动该服务并调用微信客户端进行支付。 主要用于触摸屏手机浏览器请求微信支付的场景。 可以从外部浏览器轻松调用微信支付。
申请流程:使用注册微信支付时注册的邮箱,将公司名称+商户号+联系方式以及对应的H5支付应用场景描述发送至
6.小程序支付
接口连接时,用户在微信小程序中使用微信支付的场景与公众号支付非常相似。 3. 接口对接
1、对接方法
微信支付开发文档将接口分为普通商户版本和服务商版本。 所谓普通商户,是指广大有实际业务需求、希望对接微信支付的商户; 服务提供商是指具有开发能力的第三方服务提供商。 他们封装了微信支付的高级接口,并提供支付应用和技术开发、机床调试、事件营销等全生态链服务支持,简化对接流程。 因此,普通商户接入微信支付平台有两种选择:直接接入微信平台或者接入服务商平台。

2. 接口文档
服务商提供的API在入口和出口方面与微信普通商户版API大致相同,只是在返回参数中多了一些额外的包装数据。 所以我们可以只关注普通商户版本API。 以下规则和API均来自微信官方普通商户版接口文档。
2.1 接口规格

2.2 接口列表
下面列出了几个关键的API及其参数要求。 输入参数和返回参数只列出必须传递或需要注意的字段。 完整参数请参考官方文档。 出于安全考虑,无论是商户后台请求微信平台还是微信平台请求商户后台,无论是API的输入参数还是返回参数,发起端添加签名、接收端验证签名的规则必须遵循结束。 例如,商户请求微信平台时,会对输入的参数信息添加签名。 微信平台收到请求后,首先会验证签名。 如果验证通过并处理,微信平台将按照相同的算法在返回参数中添加签名,商户将收到。 响应时也需要先验证签名,验证通过后才进行业务流程。 因此,在所有API中,输入参数和返回参数都包含以下公共字段。

2.2.1 统一下单/支付/
除卡支付(卡支付有单独的支付接口,不调用统一下单接口)外,其他支付方式都需要调用统一下单接口。 商户系统首先调用该接口在微信支付服务后台生成预支付交易订单,返回正确的预支付交易会话ID,然后生成交易字符串,通过扫描二维码、APP等不同场景发起支付。
输入参数信息

输入参数示例
获得
公众号支付模式下,必须将统一的下单接口传递给用户。 获取业务后台的步骤如下:第三方发起微信授权登录请求。 微信用户允许第三方应用授权后,微信将启动该应用或重定向至第三方。 第三方网站,并带上授权临时票码参数; 通过code参数添加等等,通过API进行交换; 通过接口调用,获取用户的基础数据资源或帮助用户实现基本操作。
为了避免重复发明轮子,我们使用了公司基础平台群提供的微信接入平台——第三方转账接口,采用静默授权的方式获取用户。 应用程序需要预先在基础平台上进行配置,并被赋予全局唯一性。 关于2.0的许可协议,大家可以自己了解一下。
返回参数

返回结果中有两个状态码,需要了解各自的含义。 表示通讯是否成功。 当它存在时,将会有后续的返回字段。 当为FAIL时,会填写错误信息,指示业务操作是否成功。 为时,后续业务字段(如etc),为FAIL时,填充etc等字段。
返回参考测试示例
2.2.2 支付结果通知
支付成功后,微信会将相关支付结果和用户信息发送给商户,商户需要接收处理并返回响应。 如果微信收到商家的响应不成功或者超时,则微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率。 但微信不保证通知最终一定成功(因此商家需要定时进入双方待支付订单状态)。 (通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)。
回调通知接口对安全性要求极高,有以下几点需要注意: 1、该接口具有幂等性,同一个通知可能会多次发送到商户系统。 商户系统必须保证回调接口是幂等的,能够正确处理重复的通知。
2.并发控制。 在对业务数据进行状态检查和处理之前,必须使用数据锁进行并发控制,避免函数重入造成数据混乱。
3.签名验证。 商户系统必须对支付结果通知的内容进行签名验证。
4、金额验证:验证返回的订单金额与商户侧的订单金额是否一致,防止数据泄露造成“误报”和财务损失。
接口链接
该链接由商家提供。 通过【统一订单API】中提交的参数设置,通知URL必须是可直接访问的URL,且不能携带参数。 示例:“//付款。”
输入参数信息
输入的参数信息由微信平台整理发送,商户后台需要接收并解析各个字段并进行必要的验证。

输入参数示例
返回参数
商户后台返回参数必须是微信支付指定的格式,否则微信会认为通知失败并不断重试。

返回参数示例
2.2.3 申请退款//付款/
退款方式有两种。 商户可登录微信商户平台,直接在管理后台使用退款功能; 二是在商户业务系统中对接并发起退款。 退款时注意事项:
1、交易时间超过一年的订单无法提交退款;
2.微信支付退款支持单笔多次退款。 对于多次退款,您需要提交原付款订单的商户订单号,并设置不同的退款订单号。 申请退款的总金额不能超过订单金额。
3、每个付款订单的部分退款次数不能超过50次。
输入参数信息

输入参数示例
返回参数

这里需要注意的是,返回参数是,也是when。 仅代表退款申请成功,并不代表款项已成功退还给用户。 因此,业务端需要定期通过退款查询接口查看退款订单的状态。 若有异常,需报警人工处理。
退款状态
