记录对接京东宙斯API -- 发布商品

1. SDK的问题

	第一次下载的SDK用不了,  JAR 里缺失的代码非常多.  连最起码的文档中的demo也无法执行. 
	面对这种问题,  咱也没辙, 只能去京东JOS哪里提交工单, 询问客服了!!!

在这里插入图片描述

2. 提交工单, 反应不及时的问题(纯属吐槽, 勿怪!!!).

	当你去提交工单咨询问题的时候,  那真是时慢时快;  
	慢的时候能让你等半天,  快的时候基本上十五钟内基本也有回复了.   

在这里插入图片描述

3. 对接同步SOP类型的商品信息API

	1. 需求:  把本系统发布的商品同步到旗舰店内.  从而到达在本系统发布的商品不用在京东店铺进行二次发布. 
	2.  实际对接的状况: 
		1).  因为之前SDK的问题.   而导致无法使用官方Demo中案例进行请求接口.   所以帖主就在寻找其他请求的办法,  
		  最终在文档API最下方发现了一个供开发人员测试调用接口的测试工具.

京东宙斯发布商品的API链接: 发布商品
在这里插入图片描述

	   2).  在看完文档API后,  发现要把本系统的商品同步到京东店铺内, 还真不是一件容易的事情, 
		最重要的一点要彼此的结构差不多, 当然你的产品在设计原型的时候知道有这个需求, 在设计原型的就会考虑到模仿京东的发布商品页面的格式(暂时就这样说吧.),  
		所以在设计表结构的时候, 也自然会向这个方向靠拢(ennn...废话有点多.),  但想法是好的,  
		现实是骨感的,  而我就遇到了很多问题.
		比如:  类目ID,  京东这边发布商品需要审核通过的三级类目ID(目前必须是审核通过且为三级的类目), 否则无法发布成功.  
		关于类目还有一点问题:  在我对接的时候,  刚好遇上京东对商品这一块的业务进行升级,  原有的三级类目升级成了四级,  
		但我在发布商品的时候又告诉我 "类目必须是三级",  而我传递的类目ID明明是三级的,且又不行,  
		还有就是返回的提示语也有问题,  我这明明是发布商品,  然后返回的提示语却是修改商品醉了, 
		后来去提问工单后,  才了解到京东升级了商品这一块的业务后, 需要人工手动去商家后台进行迁移类目,  
		等客户那边迁移好, 几天过去了,  心好累....
		废话过后, 接下来就是帖代码了:

3.1. 通过类目和属性类型,获取类目的属性列表,不限制等级,可以查询销售属性

PS: 我这种调用方式是因为SDK缺失的缘故, 如果不缺失的话, 还是按照官方Demo来.

			/**
		     * @Author 
		     * @Description 通过类目和属性类型,获取类目的属性列表,不限制等级,可以查询销售属性 
		     * @Date 13:58 2019/6/18
		     * @Param [accessToken, cid]
		     * @Param [accessToken, 类目ID]
		     * @return com.alibaba.fastjson.JSONObject
		     **/
		    public JSONObject findAttrsByCategoryIdUnlimitCate(String accessToken, Integer cid){
		
		        String method = "jingdong.category.read.findAttrsByCategoryIdUnlimitCate";
		        String timestamp = DateUtils.convertDate2String("yyyy-MM-dd HH:mm:ss", new Date());
		        Map<String, Object> map = new HashMap<>();
		        map.put("cid", cid);
		        map.put("field", "attrValueList,attrGroup");
			//        map.put("attributeType", 4); // 属性类型:1.关键属性 2.不变属性 3.可变属性 4.销售属性 目前暂时限制死.
		        String requestParam = JSONUtils.toJsonString(map);
		
		        HashMap<String, Object> params = new HashMap<>();
		        params.put("v", V);
		        params.put("method", method);
		        params.put("timestamp", timestamp);
		        params.put("app_key", APPKEY);
		        params.put("app_secret", APPSECRET);
		        params.put("access_token", accessToken);
		        params.put("360buy_param_json", map);
		        // 生成签名
		        String sign = jdSign(params);
		
		
		        try {
		            String url = SERVER_URL +
		                    "?v=" + V +
		                    "&method=" + method +
		                    "&app_key=" + APPKEY +
		                    "&access_token=" + accessToken +
		                    "&360buy_param_json=" + URLEncoder.encode(requestParam, "UTF-8") +
		                    "&timestamp=" + URLEncoder.encode("timestamp", "UTF-8") +
		                    "&sign=" + sign;
		
		            LOGGER.warn("=============== URL: " + url);
		            JSONObject jsonObject = HttpUtils.doGetJson(url);
		            LOGGER.warn("===============京东API 通过类目和属性类型, 获取类目的属性列表: " + jsonObject.toString() + "=====================");
		            return jsonObject;
		        } catch (Exception e) {
		            LOGGER.warn("===============京东API 通过类目和属性类型, 获取类目的属性列表!!! =====================");
		            e.printStackTrace();
		        }
		
		        return null;
		    }

在这里插入图片描述
类目API的链接: 通过类目和属性类型,获取类目的属性列表,不限制等级,可以查询销售属性

	   3).  商品图片的问题.
	   	想要发布商品成功,  你必须要使用京东内的图片, 也就是说:  你需要在同步商品之前就把商品图片上传到京东服务器内.  这个操作很简单,  估计大家都做过,  这里我就不多废话了.
	   	直接贴代码: 

3.2. 上传单张图片

			/**
		     * @Author 
		     * @Description 上传单张图片
		     * @Date 11:29 2019/7/17
		     * @Param [accessToken, imageData, pictureCateId, pictureName]
		     * @Param [accessToken, 图片二进制文件流,允许png、jpg、gif、jpeg、bmp图片格式,1M以内,
		     *                               上传到的图片分类ID,为空上传至 默认分类,
		     *                                              图片名称,不超过64字节,为空默认 未命名]
		     * @return com.alibaba.fastjson.JSONObject
		     **/
		    public ImgzonePictureUploadResponse pictureUpload(String accessToken, byte[] imageData, Long pictureCateId, String pictureName){
		
		
		        try {
		            JdClient client = new DefaultJdClient(SERVER_URL, accessToken, APPKEY, APPSECRET);
		            ImgzonePictureUploadRequest request = new ImgzonePictureUploadRequest();
		            request.setImageData(imageData);
		            request.setPictureCateId(pictureCateId);
		            request.setPictureName(pictureName);
		            ImgzonePictureUploadResponse response = client.execute(request);
		            LOGGER.warn("===============京东API 上传单张图片: " + JSONUtils.toJsonString(response) + "=====================");
		
		            return response;
		        } catch (Exception e) {
		            e.printStackTrace();
		        }
		
		        return null;
		    }

京东上传图片的API链接: 上传单张图片

京东商家后台
在这里插入图片描述

	   4). SKU设置的问题.
	   帖主在这里可是踩了很多坑, 因为你设置了SKU, 那必须要在添加类目的属性(即三级类目的属性值). 
	   填写SKU属性时(saleAttrs), 有一个必要的条件:  在类目属性返回的字段中, 有一个 attributeType 字段,  只有这个字段为 4 的时候, 才可以添加进去,  
	   而且必须要字符串数组; 当然文档上有说明.  
	   还有一点就是现在的我也没有搞明白:  就是你设置了 saleAttrs 值时,  你也要传递  multiCateProps 值, 
	   否则如果不传递的话,  会出现一个情况:  有时可以发布成功, 有时会失败.  头大!!(还是自己太菜了导致的, 唉....)

文档说明

	 5). 以上四点搞好了,  基本也就差运费模板(transportId)和品牌ID(brandId)了.
	 这里我说明一下,  在发布商品的API文档中品牌ID不是必填的, 在实际操作发现如果你不填的话, 
  	 如导致发布失败, 出现稀奇古怪的错误提示. 
  	 还有一个关联板式(templateId)的字段也是, 即使可以不填, 也填上 0L(预防万一).
  	 如果有其他大神看到了, 发现我说的是不对的, 麻烦及时告知我一下, 我马上修改过来. (新人一枚,  大家勿怪!!!)

3.3. 下面直接上运费模板和获取品牌的代码:

运费模板:

运费模板API的链接: 根据venderId获取单品模板

		/**
	      * @Author 
	      * @Description 获取京东商家的单品运费模板.
	      * @Date 15:18 2019/6/12
	      * @Param [accessToken]
	      * @return com.alibaba.fastjson.JSONObject
	      **/
	    public JSONObject findFreightTemplateListData(String accessToken){
	
	        String method = "jingdong.SkuFareTemplateService.getTemplates";
	        String timestamp = DateUtils.convertDate2String("yyyy-MM-dd HH:mm:ss", new Date());
	        HashMap<String, Object> params = new HashMap<>();
	        params.put("v", V);
	        params.put("method", method);
	        params.put("timestamp", timestamp);
	        params.put("app_key", APPKEY);
	        params.put("app_secret", APPSECRET);
	        params.put("access_token", accessToken);
	        String sign = jdSign(params);
	
	        try {
	            String url = "https://api.jd.com/routerjson?" +
	                    "v=" + V +
	                    "&method=" + method +
	                    "&app_key=" + APPKEY +
	                    "&access_token=" + accessToken +
	                    "&timestamp=" + URLEncoder.encode(timestamp, "UTF-8") +
	                    "&sign=" + sign;
	
	            LOGGER.warn("=============== URL: " + url);
	            JSONObject jsonObject = HttpUtils.doGetJson(url);
	            LOGGER.warn("===============京东API 获取京东商家的单品运费模板: " + jsonObject.toString() + "=====================");
	            return jsonObject;
	        } catch (Exception e) {
	            LOGGER.warn("===============京东API 获取京东商家的单品运费模板!!! =====================");
	            e.printStackTrace();
	        }
	
	        return null;
	    }

品牌

品牌API的链接: 查询商家已授权的品牌

		/**
	     * @Author 
	     * @Description 查询商家已授权的品牌
	     * @Date 14:54 2019/7/18
	     * @Param [accessToken]
	     * @return java.util.List<com.jd.open.api.sdk.response.list.VenderBrandPubInfo>
	     **/
	    public List<VenderBrandPubInfo> venderBrandQuery(String accessToken){
	        try {
	            JdClient client = new DefaultJdClient(SERVER_URL, accessToken, APPKEY, APPSECRET);
	            PopVenderCenerVenderBrandQueryRequest request = new PopVenderCenerVenderBrandQueryRequest();
	            // request.setName("填写京东店铺内的品牌名称"); // 可以指定查询
	            PopVenderCenerVenderBrandQueryResponse response = client.execute(request);
	            List<VenderBrandPubInfo> brandList = response.getBrandList();
	            LOGGER.warn("===============京东API 获取商家可用的经营分类列表: " + JSONUtils.toJsonString(response) + "=====================");
	            return brandList;
	        } catch (Exception e) {
	            LOGGER.warn("===============京东API 获取商家可用的经营分类列表失败!!! =====================");
	            e.printStackTrace();
	        }
	
	        return null;
	    }

4. 修改商品.

	修改商品的接口, 其实和发布商品的差别不大, 你既然可以成功调用发布商品的接口, 那修改商品的接口也一样可以调用成功.  
	只不过, 调用修改商品的接口, 需要你必须传递商品, 还有就是你修改商品信息的参数.

PS: 记录日常开发中的点点滴滴…

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
com.jd.open.api:open-api-sdk:2.0是京东开放平台的Java开发工具包,用于开发者与京东开放平台进行对接和交互的SDK京东开放平台是京东商城提供给商家和开发者的一套开放平台服务,包括商品查询、订单管理、用户授权、营销推广等功能。开发者通过使用open-api-sdk可以方便地使用京东开放平台的各种接口,节省开发时间和精力。 open-api-sdk的版本号为2.0,表示这已经是该工具包的第二个大版本,在之前版本的基础上进行了更新和改进。新版本的sdk通常包含更多功能、修复了之前版本中的bug,并提供更好的兼容性和稳定性。 使用com.jd.open.api:open-api-sdk:2.0可以通过调用相应的接口实现与京东开放平台的连接和数据交互。例如,开发者可以使用该工具包中提供的接口发送商品查询请求,获取商品的详细信息;也可以使用接口进行订单管理,包括订单创建、取消、查询等操作。 此外,open-api-sdk还提供了其他一些功能,如用户授权、优惠券领取与使用、营销推广等。开发者可以根据自己的需求选择使用相应的接口,与京东开放平台进行集成开发。 总之,com.jd.open.api:open-api-sdk:2.0是京东开放平台提供给开发者的Java开发工具包,可以方便地与京东开放平台进行对接和交互,实现商品查询、订单管理、用户授权等功能。开发者可以根据具体需求使用该工具包中提供的接口,进行开发和集成。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值