ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python 对接饿了么零售开放平台

2022-03-21 11:58:45  阅读:251  来源: 互联网

标签:python 对接 开放平台 content params print biz post data


花了两天时间对接饿了么平台的接口,在这我要说说一些坑

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有