Home >  > 京东Python开发(二)

京东Python开发(二)

0

今天终于搞通了京东的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)

暧昧帖

本文暂无标签

发表评论

*

*