目标接口
查询商品在特定区域是否可售:
https://bizapi.jd.com/api/product/checkAreaLimit
入参:
参数名称
类型
是否必填
描述
token
String
是
授权时获取的access token
skuIds
String
是
商品编号,支持批量,以’,’分隔 (最高支持100个商品)
province
String
是
京东一级地址编号
city
String
是
京东二级地址编号
county
String
是
京东三级地址编号
town
String
是
京东四级地址编号(如果该地区有四级地址,则必须传递四级地址,没有四级地址则传0)
出参:
参数名称
类型
非空
描述
success
boolean
是
状态码(true;false)
resultMessage
String
是
异常信息提示,(成功时是””)
resultCode
String
是
异常代码KEY(0000:正常;)
result
Json数组
是
返回购买限制数据
参数名称 result说明:
参数名称
类型
非空
描述
skuId
Long
是
商品编码
isAreaRestrict
boolean
是
true 或空值代表区域受限 false 区域不受限
对应集成对象为SRM_JD_GOODS_checkAreaLimit。
2.电商接口集成对象的调用
注册扩展插件(图为详情页面插件注册,搜索同样)
重写详情页面插件beforeDoOperation方法,校验商品详情加入购物车的配送区域限制,参考代码下:
public class MalNewProductDetailPluginExt extends AbstractFormPlugin { @Override public void beforeDoOperation(BeforeDoOperationEventArgs args) { super.beforeDoOperation(args); String operateKey = ((AbstractOperate) args.getSource()).getOperateKey(); if(operateKey.equals("addcart")){ String source = this.getPageCache().get("source"); if(EcPlatformEnum.ECPLATFORM_JD.getVal().equals(source)){ //获取当前登录用的京东地址长编码 String[] addr = AddressUtil.getNumberArr(Long.valueOf(String.valueOf(this.getModel().getValue("admindivisionfield"))) , EcPlatformEnum.ECPLATFORM_JD.getVal()); Map<String, Object> params = new HashMap<>(); params.put("provinceId", addr[MalPlaceOrderConstant.PROVINCE_INDEX]);// 一级地址 params.put("cityId", addr[MalPlaceOrderConstant.CITY_INDEX]);// 二级地址 params.put("countyId", addr[MalPlaceOrderConstant.COUNTY_INDEX]);// 三级地址 if (addr.length > 3) { params.put("townId", addr[MalPlaceOrderConstant.TOWN_INDEX]);// 四级地址 } else { // 四级地址编码:收货人乡镇地址编码(如果该地区有四级地址,则必须传递四级地址,没有四级地址则传0) params.put("townId", "0");// 四级地址 } //获取商品编码 params.put("skuIds", Collections.singletonList(this.getModel().getValue("number"))); //调用接口 Map<String, Object> invokeRes = (Map<String, Object>) ApiAccessor.invoke(JdApiParser.getJdApiNumber(EcPlatformEnum.ECPLATFORM_JD.getVal() , ApiConstant.SRM_JD_GOODS_CHECKAREALIMIT), params); if(invokeRes != null && (Boolean) invokeRes.get("success")){ List<Map<String, Object>> result = (List<Map<String, Object>>) invokeRes.get("result"); if(!ObjectUtils.isEmpty(result)){ if(!"1".equals(result.get(0).get("state"))){ this.getView().showErrorNotification("当前配送区域所限,请修改配送地址。"); args.setCancel(true); } } } } } } }
重写搜索页面beforeDoOperation方法,校验搜索页面加入购物车的配送区域限制,参考代码下:
public class MalSearchNewListPluginExt extends AbstractFormPlugin { @Override public void registerListener(EventObject e) { super.registerListener(e); Button addCartBtn = this.getControl("add_cart_btn"); addCartBtn.addClickListener(this); } @Override public void beforeClick(BeforeClickEvent evt) { super.beforeClick(evt); if(evt.getSource() instanceof Button && "add_cart_btn".equals(((Button)evt.getSource()).getKey())){ EntryGrid grid = this.getView().getControl("search_entryentity"); this.getModel().getValue("productgoods_source"); int[] selectRows = grid.getSelectRows(); String source = (String) this.getModel().getValue("productgoods_source", selectRows[0]); if(EcPlatformEnum.ECPLATFORM_JD.getVal().equals(source)){ String sku = (String) this.getModel().getValue("searchgoods_sku", selectRows[0]); //获取当前登录用的京东地址长编码 String[] addr = AddressUtil.getNumberArr(MalAddressUtil.getDefaultAdmindivisionId() , EcPlatformEnum.ECPLATFORM_JD.getVal()); Map<String, Object> params = new HashMap<>(); params.put("provinceId", addr[MalPlaceOrderConstant.PROVINCE_INDEX]);// 一级地址 params.put("cityId", addr[MalPlaceOrderConstant.CITY_INDEX]);// 二级地址 params.put("countyId", addr[MalPlaceOrderConstant.COUNTY_INDEX]);// 三级地址 if (addr.length > 3) { params.put("townId", addr[MalPlaceOrderConstant.TOWN_INDEX]);// 四级地址 } else { // 四级地址编码:收货人乡镇地址编码(如果该地区有四级地址,则必须传递四级地址,没有四级地址则传0) params.put("townId", "0");// 四级地址 } //获取商品编码 params.put("skuIds", Collections.singletonList(sku)); //调用接口 Map<String, Object> invokeRes = (Map<String, Object>) ApiAccessor.invoke(JdApiParser.getJdApiNumber(EcPlatformEnum.ECPLATFORM_JD.getVal() , ApiConstant.SRM_JD_GOODS_CHECKAREALIMIT), params); if(invokeRes != null && (Boolean) invokeRes.get("success")){ List<Map<String, Object>> result = (List<Map<String, Object>>) invokeRes.get("result"); if(!ObjectUtils.isEmpty(result)){ if(!"1".equals(result.get(0).get("state"))){ this.getView().showErrorNotification("当前配送区域所限,请修改配送地址。"); evt.setCancel(true); } } } } } } }
推荐阅读