今天终于搞通了京东的API开发,记录一下备忘。
一.注册成为开发者
链接:https://dev.jd.com/
然后在应用中心新建一个应用。
然后京东审核通过就可以了。审核通过之后,在应用信息里有一个“回调url”,这个需要你的网站通过京东审核才可以。
二、提交网站给京东审核
在京东联盟的后台(https://media.jd.com/),“推广管理”里面的“网站管理”里,新增一个网站,然后等待京东审核通过,一般3-4天就可以查看审核结果了。
网站审核通过之后,将网址填入第一步中的“回调url”当中,记住形式为“http://www.xxx.com”,不要忘记前面的http:。
三、获取code
在浏览器中请求:https://oauth.jd.com/oauth/authorize?response_type=code&client_id=2B8E53069FA43C654FCAC6D00569ECC3&
redirect_uri=http://www.baidu.com&state=quanyi
client_id为应用的appkey,response_type为固定值填code,redirect_uri写上面创建应用是填写的回调url
然后在出现的界面中填写账号,密码等信息。
一切填写正确之后,会出现你的网站地址,并且在地址栏显示为http://www.xxx.com/?state=quanyi&code=xxxx 的形式,code=后面的代码就是你的Code.
四、获取access_token
直接在地址栏上按照下面的格式拼上参数,client_id就是appkey,code就是上面获取的code,state可填可不填,client_srecet的值是appsrecet,其他参数不用管。
https://auth.360buy.com/oauth/token?grant_type=authorization_code&client_id=2B8E53069FA43C654FCAC6D00569ECC3&
redirect_uri=http://www.baidu.com&code=P6SgDi&state=quanyi&client_secret=37dccc2b43ac4f77a681fe9f56bd7d49
调用之后返回如下格式的json
{
“access_token”: “bbf4709d-c404-416f-9bd2-ee01b1b84424”,
“code”: 0,
“expires_in”: 86399,
“refresh_token”: “1ec8990d-0ea4-47d2-9fe6-25cc53355606”,
“time”: “1484009717389”,
“token_type”: “bearer”,
“uid”: “4582600365”,
“user_nick”: “jmdonghao”
}
(注意,测试的accress_token的时效性只有24小时,之后需要重新获取一次)
然后就可以根据京东提供的调用实例调用了。
五、测试API
地址:http://jos.jd.com/api/showTools.htm?id=1413&groupId=117
这里又有一个小坑,就是我输入app_key的时候前面不小心多了一个空格,结果老是提示app_key无效,后来多次尝试才发现这个问题。
不过我所有参数都输正确了,还是提示:
{"error_response": {"code":"88","zh_desc":"该appKey=xxxx6993B2005377750xxE2D22E5无权调用method=jingdong.service.promotion.goodsInfo","en_desc":"The appKey has no right to call this interface. Please go to dev.jd.com for interface application"}}
六、申请API
出现上面的问题是没有申请API权限,在京东开发平台(https://dev.jd.com/)中“应用管理--接口管理”申请接口权限,这些都是基础免费接口,申请之后不用审核即可通过。
这时再访问获取推广商品详细信息 API-的时候,提交测试,就可以正常返回了。
但是还有一个问题,访问优惠券,商品二合一转接API-的时候,又提示“您无权限调用此API接口”,所以像获取爆款商品列表、获取优惠商品列表、商品优惠券二合一转链这类API属于高权API,不是一般用户可以申请的。据说需要日千单以上才能申请。
所以,如果您没有达到这个条件,又想使用这类的接口,只能用别人提供的了。
七、优惠券,商品二合一转接
请求URL:https://jd.open.beeapi.cn/union/getCouponCodeByUnionId
参数如下:
京东的原始文档在这里,
使用的代码如下:
https://jd.oxxx.xxx.cn/union/getCouponCodeByUnionId?couponUrl=https://coupon.jd.com/ilink/couponSendFront/send_index.action?key=322aa5be19d44e46xxxxxc768e066a61&roleId=12973680&to=mall.jd.com/index-745308.html&materialIds=%2226730354468%22&unionId=你的京东联盟ID
返回结果:
到这里我们就可以获得了商品优惠券的链接了,而且只要确保参数里的unionid写成你的,你就可以获得佣金,大功告成。
UPdated on Jun.12.2019
八、京东接口的权限
以下为联盟API接口详情,您可选择适合您的接口进行调用(高级API接口需发邮件到京东申请,通用接口可直接调用),谢谢!
通用API
【查询数据】jd.union.open.order.query(订单查询接口)
【商品信息】jd.union.open.goods.jingfen.query (京粉精选商品查询接口)
【商品信息】jd.union.open.goods.promotiongoodsinfo.query(获取推广商品信息接口)
【获取链接】jd.union.open.promotion.common.get(获取通用推广链接)
【商品信息】jd.union.open.category.goods.get(商品类目查询)
高级API
【商品信息】jd.union.open.goods.query(关键词商品查询接口【申请】)
【商品信息】jd.union.open.goods.seckill.query(秒杀商品查询接口【申请】)
【商品信息】jd.union.open.goods.stuprice.query(学生价商品查询接口【申请】)
【获取链接】jd.union.open.promotion.byunionid.get(通过unionId获取推广链接【申请】)
【获取链接】jd.union.open.promotion.bysubunionid.get(通过subUnionId获取推广链接【申请】)
【查询数据】jd.union.open.coupon.query(优惠券领取情况查询接口【申请】)
【其他】jd.union.open.position.create(创建推广位【申请】)
【其他】jd.union.open.position.query(查询推广位【申请】)
【其他】jd.union.open.user.pid.get(获取PID)
可以参考:http://news.jd.com/153_1.html
九、新版本如何获取二合一链接
如何获得商品优惠券,商品详情的二合一链接?
首先使用关键词查询接口获得优惠券商品的URL以及优惠券:
然后利用优惠券url和商品详情页的url,可以生成二合一的链接。
而且这个二合一的链接是短网址。
使用的接口是“通过unionid获取推广链接”
测试内容:
http://coupon.jd.com/ilink/couponActiveFront/front_index.action?key=d227891573bd4ff39aacab19531fc4e7&roleId=20358522&to=item.jd.com/42129131370.html
item.jd.com/42129131370.html
请求URL: https://jd.vip.apith.cn/unionv2/getByUnionidPromotion
这里又遇到了一个大坑,在将签名算法从python2.x移植到python3.x的时候,被“\n”这个符号折腾得要死。
附最终代码:
import requests import datetime import hashlib import hmac import base64 import json GMT_FORMAT = '%a, %d %b %Y %H:%M:%S GMT' url = "xxxxx" SecretId = 'xx' SecretKey ='xx' def getSimpleSign(SecretId, SecretKey) : dateTime = datetime.datetime.utcnow().strftime(GMT_FORMAT) auth = "hmac id=\"" + SecretId + "\", algorithm=\"hmac-sha1\", headers=\"date\", signature=\"" signStr = "date: " + dateTime sign = hmac.new(SecretKey.encode('utf-8'), signStr.encode('utf-8'), hashlib.sha1).digest() sign = base64.b64encode(sign).decode('utf-8') sign = auth + sign + "\"" return sign, dateTime sign, dateTime = getSimpleSign(SecretId,SecretKey) header = { 'Host':'jd.vip.apith.cn', 'Accept': '*/*', } header['Date'] = dateTime header['Authorization'] = sign print (header) r = requests.get(url, headers=header) print (r) print (r.text)