经过一天的调试,终于完成了对京东联盟API接口的调试,完成的接口的验签,接口调用,下面是用python实现的,做个简单的记录,供有兴趣的小伙伴参考学习

一、应用创建

首先我们登录京东联盟,进入到控制台,创建应用,应用创建完成以后我们才能拿到接口验签最重要的两个参数值,appKey和App Secret,下图是我创建的一个应用

到这里,假设你已经创建完成的应用,下面我们开始进入正题,api对接

二、验签参数详解

接口的验签是调用一个接口最重要的一步,让我们看下如何实现,才能避免少踩坑,具体的详细文档可以参考【传送阵】,具体步骤主要分为以下5步:

  1. 验签参数
  2. 参数的排序
  3. 拼接参数
  4. 加密
  5. 小写转大写
1、验签参数

这个参数除了基本的必填参数以外,还保存业务接口传的参数

params = {# API接口名称"method": 'jd.union.open.order.query',# 第一步创建应用后生成的app key"app_key": '***************',# 时间戳 格式为yyyy-MM-dd HH:mm:ss,时区为GMT+8"timestamp": '2021-01-01 12:00:00',# 响应格式,暂时只支持json"format": 'json',# API协议版本,一般为1.0"v": '1.0'# 签名的摘要算法,暂时只支持md5"sign_method": 'md5',# API输入参数签名结果"sign": '************'
}
# 下面进行参数的合并
# 业务接口参数都传到360buy_param_json这个字段上,这个是重点,要不验签失败
api_query = { **params, "360buy_param_json": query}

以上参数都是必填字段,还有一个字段access_token非必填,这里不做讲解,具体可以查看文档

2、参数排序

为什么要排序呢 ,咱也不知道,排序就排序吧,按照字母abcd顺序排就行了,记住是按照对象的Key排序,不是value,下面看代码,在python中是如何排序的,我也没找到什么好的方法

# 将所有请求参数按照字母先后顺序排列
#reverse: true 倒序,false 正序
params_key_sort = sorted(api_query, key=str.lower, reverse=False)
3、参数拼接

拼接参数的格式是: secretkey+key+value+key+value…+secretkey

这里有个需要注意的地方,如果参数值是dict,记得要转成字符串(也算一个小坑吧)

params_key_sort = sorted(api_query, key=str.lower, reverse=False)
sign = secretkey
for i in params_key_sort:# 这里对所有value进行了处理,可以做下判断sign = sign+i+str(api_query[i])
sign = sign+secretkey
4、加密

md5加密使用hashlib这个库,长度是32位,这一步没什么坑,调用方法就行了

import hashlib# MD5加密
hl = hashlib.md5()
hl.update(sign.encode(encoding='utf-8'))
sign = hl.hexdigest()
5、小写转大写

这里小写转大写是对加密后的字符串进行一个转换的

sign = sign.upper()

三、验签完整代码登场

"""
京东联盟api签名
"""
import time
import hashlib# 应用的appKey
appKey = "dd68*******8a7f11"
# 应用的密匙
secretkey = "84a******de141"def sign_method(method, data):# 时间戳 格式YYYY-MM-DD HH:mm:sstimestamp = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))# 验签参数params = {"method": method,   # API接口名称"app_key": appKey,"timestamp": timestamp,"format": "json","v": "1.0","sign_method": "md5"}# 合并基本参数与应用参数api_query = {**params, "360buy_param_json": data}# 将所有请求参数按照字母先后顺序排列params_key_sort = sorted(api_query, key=str.lower, reverse=False)print('排序后的参数:', params_key)# 验签的字符串,首尾需要加secretkeysign = secretkeyfor i in params_key_sort:sign = sign+i+str(api_query[i])sign = sign+secretkeyprint('sign:', sign)# MD5加密,并且小写字母需要大写hl = hashlib.md5()hl.update(sign.encode(encoding='utf-8'))sign = hl.hexdigest()api_query['sign'] = sign.upper()# 返回调用api接口所有参数return api_query

四、请求接口

新版接口地址:https://api.jd.com/routerjson,这里我们就使用requests库去请求,get/post都可以,我使用的是post方式,但是必须是form形式,不了解form的可以自行去百度一下;

# coding: utf-8
from urllib.parse import urlencode
import requestsdef request(data):try:"""响应头设置"""headers = {"Content-Type": "application/x-www-form-urlencoded"}# 将参数转换成form形式也就是: key=value&key=value...params = urlencode(data)print('请求参数:', params)res = requests.post("https://api.jd.com/routerjson", data=params, headers=headers)return res.json()except request.HTTPError as e:print("Error code: ", e.code)return e.code

五、接口server开发

1、项目创建

到这里最重要的两部分已经算是完工了,通过postman调用只要验签通过,就相当于已经完成了90%的工作,下面就是接口的开发,这里为了方便,我们使用flask这个web框架去搭建我们的后台服务。可以使用PyCharm工具自动去生成,在新建项目的时候自己选择

2、接口开发

这里我们就以"京粉精选商品查询接口为例",下面是我创建的一个目录结构,可以自行调整

# api/jinfen_query.pyfrom api.sign import sign_method
from api.request import requestdef jinfen_query(data):query = sign_method('jd.union.open.goods.jingfen.query', {"goodsReq": {"eliteId": "1"}})res = request(query)return res
3、接口路由
from flask import Flask
from api.jingfen_query import jinfen_queryapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello World!'# 京粉精选商品查询接口
@app.route('/jinfen')
def jinfen(data):res = jinfen_query(data)jingfen_data = res.jd_union_open_goods_jingfen_query_responceif jingfen_data:if jingfen_data.code == 0:return jingfen_dataelse:return '系统错误'if __name__ == '__main__':app.run()

这里查询到的一个数据,怎么使用自己看着办(* ̄︶ ̄)

六、总结

写到这里基本算完工了,感兴趣的小朋友们可以自己实现哈,没事的时候练练手,其实挺好玩的,刚开始写的主要卡在了验签上,总是提示app_key为空,后来各种查,各种找,才发现在验签参数的问题,也就是360buy_param_json这个东西在搞鬼,开始业务参数是直接传的,没有赋值到360buy_param_json上面,手指头都磨秃噜皮了(开个玩笑)

python实现京东联盟API接口对接相关推荐

  1. 京东商品获取优惠券API接口-京东优惠券如何获取-京东联盟API接口

    京东单品优惠券获取教程 一.应用场景 二.环境 三.详细操作 只有一个单品应该怎么获取优惠券接口? 一.应用场景 API接口说明: 通过商品链接或SKU,获取京东最优券,方便用户领券,提升用户体验 应 ...

  2. php对接京东宙斯平台,利用京东联盟API获取自定义推广链接

    本文将简单介绍下京东联盟.京东宙斯两个平台,以及如何利用京东宙斯平台的京东联盟API来快速获取自定义推广链接. 关于京东联盟 京东联盟(去官网看看)是一个CPS模式的营销平台,我们可以使用自己的网站放 ...

  3. 利用京东联盟API获取自定义推广链接

    2019独角兽企业重金招聘Python工程师标准>>> 本文将简单介绍下京东联盟.京东宙斯两个平台,以及如何利用京东宙斯平台的京东联盟API来快速获取自定义推广链接. 关于京东联盟 ...

  4. 京东商品详情页API接口、京东商品销量API接口、京东商品列表API接口、京东APP详情API接口、京东详情API接口,京东SKU信息接口

    京东商品详情页API接口.京东商品销量API接口.京东商品列表API接口.京东APP详情API接口.京东详情API接口,京东SKU信息接口,通过商品ID提取商品详情页各项数据,包含商品标题,sku i ...

  5. 京东商品详情页API接口、京东详情API接口、京东商品销量API接口、京东商品列表API接口、京东APP详情API接口、京东SKU信息接口,京东API接口

    通过商品ID或是商品url中的商品ID调用提取京东商品详情页API接口.京东商品销量API接口.京东商品列表API接口.京东APP详情API接口.京东详情API接口,京东SKU信息接口拿到商品详情页各 ...

  6. 京东图片搜索API接口-(item_search_img-按图搜索京东商品API接口),以图搜商品接口

    一.京东图片搜索API接口-(item_search_img-按图搜索京东商品API接口),以图搜商品接口代码对接如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用key(必 ...

  7. python实现简单的api接口-对Python实现简单的API接口实例讲解

    get方法 代码实现 # coding:utf-8 import json from urlparse import parse_qs from wsgiref.simple_server impor ...

  8. python实现简单的api接口-简单实现Python调用有道API接口(最新的)

    # ''' # Created on 2018-5-26 # # @author: yaoshuangqi # ''' import urllib.request import urllib.pars ...

  9. 用Python调用华为云API接口发短信

    [摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...

  10. 简单python脚本实例-对Python实现简单的API接口实例讲解

    get方法 代码实现 # coding:utf-8 import json from urlparse import parse_qs from wsgiref.simple_server impor ...

最新文章

  1. java基础线程_Java基础之多线程没那么复杂!
  2. 探测Windows2K/XP/2003本机系统信息
  3. maven的常见问题_Maven常见问题和陷阱
  4. VR全景可视化制作小程序功能模块源码v1.0.28
  5. C语言题目教室数量编程,北京理工大学网教室C语言编程题库及答案(绝对经典).doc...
  6. linux vi打开后向上查找文本,linux之文本编辑器vi常用命令
  7. Concis组件库封装——Avatar头像
  8. java实现模拟考试系统_基于JAVA SWING考试模拟系统.doc
  9. VNN结合金蝶Kis9.1专业版Sp1的应用及解决方案
  10. 计算机电路基础答案刘怀望,计算机电路基础
  11. Openbci升级版使用方法
  12. 2019年3月6日-KS103的使用
  13. 全栈工程师是什么,为什么需要全栈工程师?
  14. 【听说隔壁老王开始学编程了?】
  15. html批量修改 快捷键,html怎么设置快捷键?
  16. 判断SDCard是否存在
  17. 研究生真正需要培养的五大能力
  18. html5 多点触控 缩放,WebBrowser禁用触摸缩放
  19. 【AE表达式】下载的模板表达式报错?大多数都是小问题!
  20. 2019-12-20

热门文章

  1. secure IRS aided ISAC
  2. 联通4g满格但是网速慢_手机网速太慢怎么办 教你一招(4g信号满格网速很慢)...
  3. 中国电信物联网平台入门学习笔记4:连接时间过长,数据传输消失,电信平台显示延迟...
  4. 证件照素材大合集(全网最全版本)
  5. 大学生社会实践报告 模板
  6. 欢乐颂 c语言编程代码,欢乐颂
  7. 笔记本计算机内部部件,笔记本内部硬件构造有哪些
  8. 【必看文件含发帖规范】2020年黑马程序员社区总版规发布!
  9. 【读书笔记】大数据 数据挖掘 相关
  10. 网站小图标 (favicon) 的正确设置