线下充值集成
一、业务流程
流程说明:
1. 充值码 - 打开钱包APP,选线下充值服务,钱包后台线上⽣码展示于APP中;
2. 充值受理 - CVS向钱包后台发起充值咨询交易,检查交易合法性,再发起充值申请交易,交易完成后
推送交易结果⾄钱包端及返回交易结果级CVS;
3. 清算处理 - CVS⽣成对账⽂档并送⾄钱包,钱包后台以便利店提供的交易结果为准进⾏核对,出现便
利店交易结果单边时,系统进⾏补偿充值处理,出现钱包端交易单边时,为资损处理;于约定清算⽇期由
便利店进⾏资⾦拨款,钱包后台收银⾏账单后进⾏应收账核销;
二、接口和参数信息说明
- 建议参考example里各API的request, response
- 文档:Topup Integration Guide/API/AlipayIntlAPI_1.0.1/Overview.htm
- 所有Request都有requestMsgId,建议使用UUID,用于request的唯一标示
三、系统交互
四、充值逻辑
五、签名及验签
参考链接:https://global.alipay.com/docs/ac/gr/signature
数字签名使用简介:客户端和支付宝必须在进行API调用之前交换RSA密钥,并且RSA密钥的长度必须为2048位。当对Alipay进行API调用时,客户端使用RSA私钥对API请求进行签名。收到API请求后,支付宝将使用客户端的RSA公钥来验证签名是否与API请求的内容匹配。同样,当客户端收到API响应时,强烈建议客户端使用支付宝的RSA公钥来验证API响应的签名。
1、签名生成步骤
1.1 通过OpenSSL或者其他工具获取RSA密钥对,分别生成后缀为pem格式的私钥和公钥,将公钥上传到Alipay服务器交换公钥以便进行后续签名验证。
(注:a、对于Java开发人员,需从控制台中pkcs8私钥输出中删除页眉、页脚、回车符和空格。b、使用openssl创建私钥后,如果使用java,则需要将私钥转换为pkcs8格式。如果使用.net或者php,则无需将私钥转换为pkcs8格式。)
1.2 提取要签名的request请求内容,确认参数和格式无误(很重要)。
1.3 使用SHA1withRSA算法散列JSON内容。然后,使用客户端的RSA私钥对值进行签名以获得签名。为了获得更高的安全级别,RSA密钥对的长度必须为2048位。
1.4 通过Base64编码进行签名。
1.5 使用签名之后获得的字符串作为Signature参数值。与请求的json数据合并成整个API请求。
1.6 java端签名生成样例代码参考:(https://global.alipay.com/docs/ac/gr/signature#6a947849)
2、签名校验步骤
2.1 使用正则表达式而不是JSON对象,将完整的响应内容分为两部分,响应JSON字符串和签名字符串。
2.2 通过使用SHA1算法散列响应JSON字符串以获得消息摘要。
2.3 使用公钥进行解密签名到消息摘要。
2.4 比较在步骤2和步骤3中获得的两个消息摘要。如果摘要相同,则表明已签名的数据尚未更改。
2.5 java端签名校验样例代码参考:(https://global.alipay.com/docs/ac/gr/signature#895424b6)
六、对帐文件
Item | Description |
参考文档 | Settlement Requirement.pdf |
例子 | SETTLE_CVS_5C5XSR3USG0CQJ05MOP20200101_01.csv |
档案交收方式 | SFTP |
路径 | /upload/<tntInstId>/settlement/ |
档案名 | SETTLE_CVS_<clientId><currency><date>_<Seq>.csv.gpg |
档案交收时间 | 每自然日早上7:00前完成档案上载 |
文件加密
1. 双方都产生公钥和私钥
2. 双方交换公钥
3. 使用私钥和支付宝的公钥对清算档进行加密加密csv文件
4. 把加密的xxx.cvs.gpg上传到sftp
- Offical Site: https://gnupg.org/index.html
- Offical Site: https://gnupg.org/index.html
- Linux example: https://blog.gtwang.org/linux/how-to-encrypt-data-in-linux-using-gpg-and-open-ssl/2/
- Windows example: https://www.itread01.com/content/1518076940.html