编程语言
首页 > 编程语言> > python 对接饿了么零售开放平台

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