概念
skuID 同一商品不同规格,skuID也不同,比如小号的A杯子和中号的A杯子,他们对应的skuID不相同,skuID是商品的最小维度
goodsID 指的是商品ID,不同商品goodsID 不同,同一商品不同规格goodsID相同
AppKey 公钥(相当于账户)本项目使用公司姓名加盐的形式生成的字符串
AppSecret 私钥(相当于密码)
channelId 渠道ID
公钥和私钥 公钥发给每人一把,私钥自己拥有,当自己私钥加密时发信息给别人,别人可以用公钥解密,当别人用公钥加密时发送给你时,你可以用私钥解密
准备
该接口的返回类QueryAllGoodsIdAndSkuIdResult封装了返回的结果
1 | public class QueryAllGoodsIdAndSkuIdResult extends AbstractResult { |
所有返回类的基类AbstractResult
1 | public class AbstractResult { |
步骤
- 接口接收参数
@RequestParam Map<String, String> map
- 添加
@DitchCheck
自定义的注解进行渠道验证(参数appKey、channelId是否有指定,二者是否匹配)。 - 先从请求参数中将
channelId
和appKey
获取。 - 凭借这两个参数获得第三方渠道商的配置参数对象
ThirdPartyConfiguration
,其中包含公钥 - 判断渠道商是否为null,如果是,则返回类设置
recMsg
为渠道商不存在,设置recCode
为对应状态码 - 将结果转换为JSON
- 如果渠道商不为null,那么使用
AESDecodeUtil.toAesMap(Map<String, String> map, String keys)
方法,keys为公钥,返回为TreeMap类型,(因为签名的规则要求参照字母排序拼接,TreeMap刚好可以自动将传入的参数按自然顺序或自定义顺序遍历key,所以采用返回TreeMap类型)将所有接收到的参数进行解密,(除了appkey
、sign
、channelId
之外的参数字段都经过了加密) SignUtil.toSign(toAesMap)
方法获得签名sign
- 如果
sign
为null,返回类设置RecCode
和RecMsg
- 如果
sign
值和请求参数中的sign
值不相等,返回类设置RecCode
和RecMsg
(sign验证不通过) - 设置当前页,判断传入参数中是否有key为page,如果没有则设置为1,如果有则采用page对应的value值设为当前页码
Integer pageNow = toAesMap.containsKey("page") ? Integer.valueOf(toAesMap.get("page")) : 1;
- 将pageNow作为参数传入,
PageHelper.startPage(pagenow, 30);
启用分页 List<GoodsInfo> goodsInfos = commodityTypeInfoMapper.selectAllGoodsId(list)
获取所有的goodsID- 查询出每个goodsID下对应的skuID,放入goodsInfo实例中
1 | for (GoodsInfo goodsInfo : goodsInfos) { |
将goodsInfos对象强转为
Page<GoodsInfo>
对象getTotal()
方法返回总数,int PageCount = (int) ((total + 30 - 1) / 30)
返回总页数返回类设置属性
return返回类对象
JSON.toJSONString(result)
返回类对象转变为JSON输出