注意:以下文档只适用于TOP接口,请谨慎使用!

文档中心 > 基础技术

Number字段类型加密方案

更新时间:2020/07/15 访问次数:21946

   1、背景

               目前密文通过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失败

                    

 

   2、解决方案

            加密逻辑变更;

             阶段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 存储。

FAQ

关于此文档暂时还没有FAQ
返回
顶部