python 对接饿了么零售开放平台
作者:互联网
花了两天时间对接饿了么平台的接口,在这我要说说一些坑
1.平台的文档写得有时候看得不是很明天。特别时调试接口的时候
坑一:提交格式为:格式为:content-type=application/x-www-form-urlencoded,如果按照其他格式提交会有问题。废话不多说,直接上代码!
# requests发送application/x-www-form-urlencoded请求数据
head = {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", 'Connection': 'close'}
post_url='https://api-be.ele.me/'
data = parse.urlencode(post_dict)
# 请求方式
content = requests.post(url=post_url, headers=head, data=data).text
print('@@@@@@@@@@@@@@@@@@@@@@@@@data:')
print(data)
print('@@@@@@@@@@@@@@@@@@@@@@@@@post_url:')
print(post_url)
content = json.loads(content)
print(content)
坑二:接口请求文档写得有问题!!
1.签名工具问题,官网给的签名工具是有问题的,如果按照那个去写始终返回20114:也就是sign验证错误(不要问我为什么知道,应为我被坑了好久,爬了两天才爬出来)
2.官方给的例子使用时会有问题(小问题)
正确的代码如下:用于生成sign
def sign1(params):
# //原始参数
biz_params={}
biz_params['cmd'] = params['cmd']
biz_params['source'] = params['source']
biz_params['secret'] = params['secret']
biz_params['ticket'] = params['ticket']
biz_params['version'] = 3
biz_params['encrypt'] = params['encrypt']
biz_params['timestamp'] = params['timestamp']
biz_params['body'] = params['body']
params_list = []
# //sort排序后的参数
params_key = sorted(biz_params.keys())
for key in params_key:
params_list.append(key + "=" + str(biz_params[key]))
# //用&拼接成字符串
source_str = "&".join(params_list)
# //md5 32位
return hashlib.md5(source_str.encode(encoding='UTF-8')).hexdigest().upper()
为了便于使用封装了一个函数
def sendparams(cmd='shop.get',source='*********',secret='***************'):
time_temp='1647830954'#int(time.time())#时间戳
ticket_temp='BF46EC33-67DB-4006-8D03-4866FB517EFD'#生成ticket
body_temp={
"shop_id":"***************"
}
params={}
params['cmd'] = cmd
params['source'] =source
params['secret'] =secret
params['ticket'] = ticket_temp
params['version'] = 3
params['encrypt'] = 'aes'
params['timestamp'] = str(time_temp)
params['body'] = body_temp
params['access_token']=''
print('@@@@@@@@@@@@@@@@@@@@@params参数')
print(params)
sign_temp=sign1(params)#获取token值
print('@@@@@@@@@@@@@@@@@@@@@签名结果')
print(sign_temp)
# 最终提交的参数
post_dict={}
post_dict.update({
'cmd':params['cmd'],
'timestamp':params['timestamp'],
'version':params['version'],
'ticket':params['ticket'],
'source':params['source'],
'sign':sign_temp,
'body':params['body'],
'encrypt':'aes'
})
# requests发送application/x-www-form-urlencoded请求数据
head = {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", 'Connection': 'close'}
post_url='https://api-be.ele.me/'
data = parse.urlencode(post_dict)
# 请求方式
content = requests.post(url=post_url, headers=head, data=data).text
print('@@@@@@@@@@@@@@@@@@@@@@@@@data:')
print(data)
print('@@@@@@@@@@@@@@@@@@@@@@@@@post_url:')
print(post_url)
content = json.loads(content)
print(content)
return content
最后输入参数调用它:
def ykyd_elm_gaikuncun():
content=sendparams('shop.get','276683333','**************')
return content
结果如图:
坑三、关于获取access_token我到现在我不知道怎么获取,官方文档有只字片语但是具体的没有说,不过不需要access_token也可以调用接口,也就无所谓了 - -!,这个以后需要的时候我再来补充
标签:python,对接,开放平台,content,params,print,biz,post,data 来源: https://blog.csdn.net/wzh70/article/details/123630721