项目中接入了第三方的易宝支付,客户端需要查询用户绑定的银行卡,并进行解绑,所以需要直接请求易宝支付的java接口,过程中遇见了坑,特此记录。
接口文档说明如下:
接口文档关于传参的逻辑看结尾java代码。看了半天,终于理清了逻辑:
1.就是商户号和标识进行hmac拼接,hmac里面有一层加密;
需要传递的参数拼接成字符串,然后进行md5+密钥加密,赋值给hmac参数。
重点:单纯的进行md5加密是不可以的,必须+密钥。
2.进行customernumber、userno、hmac三个参数的AES加密操作;
把三个参数以字典转json字符串的形式,+密钥(取密钥前16位)进行AES加密。
重点:
1)我们在网上搜到的AES加密,算法类型都是kCCOptionPKCS7Padding,但是java接口的算法类型是ECB,这个bug不太容易发现,如果加密不对,就会导致后台解析错误。
2)后台需要的Data数据是16进制的,但是我们一般进行AES加密完之后的是NSData数据,一般会在进行Base64转换,这时我们需要改下,取消Base64转换,直接NSData转换成16进制数据。
3.就是设置data和customernumber传参了。
4.接口需要的参数很简单,所以写起来并不复杂,主要就是加密没问题,传参就没问题。
备注:易宝支付的接口文档中结尾附了一段java代码,附下图: