正文
模块功能
支出产品根据其支付能力,对外提供不同的功能。整体上来说,一般支付产品需要提供如下接口:
1. 签约和解约
在快捷支付、代扣等产品中,用户在使用前,需要先完成签约。签约可以在渠道侧进行,一般第三方支付采用这种方式,当电商需要接入时,让第三方给授权。 银行和银联的签约一般是在电商侧进行, 电商侧负责收集用户的信息,调用银行和银联的接口进行签约。签约后,后续的支付行为就使用签约号来进行,无需再输入个人信息。 和签约相对应,解约则是取消签约关系。
2. 支付
支付是少不了的操作。 不同产品中支付行为不一样。快捷支付是在电商服务器上发起,请求渠道进行支付;网银支付则是跳转到银行支付网关上进行; 而账户支付、虚币支付,则是在本地进行的。
3. 撤销和退款
有些渠道区分撤销和退款,比如银联、农行等,撤销指取消当天在渠道侧未结算的交易; 而退款仅针对已经结算的交易。有些渠道则不作区分。
4. 查询签约状态
对于需要签约的交易,可以通过这个接口来查询签约状态。
5. 查询订单状态
通过这个接口来查询支付清单状态以及退款的订单状态。
6. 预授权
预授权交易用于受理方向持卡人的发卡方确认交易许可。受理方将预估的消费金额作为预授权金额,发送给持卡人的发卡方。
7. 预授权撤销
对已成功的预授权交易,在结算前使用预授权撤销交易,通知发卡方取消付款承诺。预授权撤销交易必须是对原始预授权交易或追加预授权交易最终承兑金额的全额撤销。
8. 预授权完成交易
对已批准的预授权交易,用预授权完成做支付结算。
9. 预授权完成撤销
预授权完成撤销交易必须是对原始预授权完成交易的全额撤销。预授权完成撤销后的预授权仍然有效。
10. 对账
通过FTP或者HTTP方式提供对账文件供商户侧对账。
11. 余额查询
查询商户的交易账户的余额,避免由于余额不足导致交易失败。 注意,不是客户的余额。 当然,不是所有的银行或者第三方支付都提供这个接口。
业务流程
上述操作,除了对账、查单外,每个操作实现的主流程,一般会包括参数校验,支付路由,生成订单,风险评估,调用渠道服务,更新订单和发送消息这7步,对于一些比较复杂的服务,还会涉及到异步同通知处理的步骤。
1. 执行参数校验
所有的支付操作,都需要对输入执行参数校验,避免接口受到攻击。
验证输入参数中各字段的有效性验证,比如用户ID,商户ID,价格,返回地址等参数。
验证账户状态。交易主体、交易对手等账户的状态是处于可交易的状态。
验证订单:如果涉及到预单,还需要验证订单号的有效性,订单状态是未支付。为了避免用户缓存某个URL地址,还需要校验下单时间和支付时间是否超过预定的间隔。
验证签名。签名也是为了防止支付接口被伪造。 一般签名是使用分发给商户的key来对输入参数拼接成的字符串做MD5 Hash或者RSA加密,然后作为一个参数随其他参数一起提交到服务器端。如支付网关设计所介绍,签名验证也可以在网关中统一完成。
2. 根据支付路由寻找合适的支付服务
根据用户选择的支付方式确定用来完成该操作的合适的支付渠道。用户指定的支付方式不一定是最终的执行支付的渠道。比如用户选择通过工行信用卡来执行支付,但是我们没有实现和工行的对接,而是可以通过第三方支付,比如支付宝、微信支付、易宝支付,或者银联来完成。那如何选择合适的支付渠道,就通过支付路由来实现。支付路由会综合考虑收费、渠道的可用性等因素来选择最优方案。