目前密文通过AES加密之后变成一串Base64的字符串,这种情况下SDK转换会报错,
而且可能跟db存储的类型不匹配。
例如:taobao.trade.fullinfo.get接alipay_id加密字段是Number类型。点击查看
问题:
a ) 老版本SDK
public class TradeFullinfoGetResponse extends TaobaoResponse {
@ApiField("trade")
private Trade trade;
}
public class Trade extends TaobaoObject {
其他字段。。
/**
* 买家的支付宝id号,在UIC中有记录,买家支付宝的唯一标示,
不因为买家更换Email账号而改变
*/
@ApiField("alipay_id")
private Long alipayId;
其他字段。。。
}
b ) 加密后的信息格式~CKoqAl2hWzh54uBFv9Suug==~1~
c ) ~CKoqAl2hWzh54uBFv9Suug==~1~ 转换到alipay_id失败
加密逻辑变更;
阶段1:加密请求,在返回密文的同时也返回明文,用于开发者做切换
api返回加密结果:{"alipay_id"=123, "encrypt_alipay_id"=加密(123)}
// 新增一个返回字段 encrypt_alipay_id
api返回不加密结果:{"alipay_id"=123, "encrypt_alipay_id"=''123'}
阶段2:加密请求,不返回Number类型明文字段(相当于明文字段作废)
api返回加密结果:{"alipay_id"=null, "encrypt_alipay_id"=加密(123)}
api返回不加密结果:{"alipay_id"=123, "encrypt_alipay_id"=''123'}
开发者需要做以下几件事情:
1)下载新版本SDK
public class Trade extends TaobaoObject {
@ApiField("alipay_id")
private Long alipayId;
/**
* 新增的encrypt(alipay_id)密文数据,原文数据来自alipay_id
*/
@ApiField("encrypt_alipay_id")
private Long encryptAlipayId;
}
2)开发者判断下对应的DB字段(Alipay_id)是否数字类型, 如果是数字类型:
需要新增string类型字段存储,老数据迁移到新字段。 如果DB已是string类型的则忽略。
3)取encrypt_alipay_id字段做为 Alipay_id 存储。