侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python实现美团订单推送到测试环境,提供便利操作示例

Python  /  管理员 发布于 7年前   292

本文实例讲述了python实现美团订单推送到测试环境,提供便利操作。分享给大家供大家参考,具体如下:

背景:

有时候需要在测试环境下一个美团的订单,每次都找一堆的东西,太繁琐,于是写了接口请求数据,然后把数据推送到测试环境。实现了可以在测试环境进行:生成新订单、取消订单、骑手抢单、骑手送达、申请整单退款、申请部分退款流程。

# -*- coding: utf-8 -*-import hashlibimport timeimport requestsfrom order30 import confapp_id = conf.app_idsecret = conf.secretdef get_md5(string):#返回字符串md5加密后的串  hl = hashlib.md5()  hl.update(string.encode('utf-8'))  return hl.hexdigest()def get_tamp():#获取当前的时间戳  t = time.time()  return int(t)def get_format_time():#获取现在的格式化标准时间:年-月-日 时:分:秒  time_now = int(time.time())  timestr = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time_now))  return timestrdef req_get_result(api_url,api_data):#get方法请求函数  req_get = requests.get(api_url,api_data)  result = req_get.json()  return resultdef req_post_result(api_url,api_data):#post方法请求函数  req_post = requests.post(api_url,data=api_data)  result = req_post.json()  return resultdef param_sort(param_dict):#传入字典,返回排序后并且连接好的字符串  keys_list = sorted(param_dict.keys())  rb_str = ''  for k in keys_list:    key_value = k + '=' + str(param_dict[k])    rb_str = rb_str + key_value +'&'  rb_str = rb_str[0:-1] #不保留字符串末尾的&  return rb_strdef get_order_detail(outer_order_id):#根据三方订单号,返回订单详情  api_url = 'http://waimaiopen.meituan.com/api/v1/order/getOrderDetail'  timestamp = get_tamp()#当前时间的时间戳  api_data = {  'app_id':app_id,  'timestamp':timestamp,  'order_id':outer_order_id  }  sort_str = param_sort(api_data) #对参数进行排序,固定格式。  params_str = api_url+'?'+sort_str+secret #参加签名的字符串  sig = get_md5(params_str)#获得签名后的字符串  api_data['sig'] = sig  #把签名串加进请求参数  result = req_get_result(api_url,api_data)  order_detail = result['data']  return order_detaildef push_order(outer_order_id):#向测试环境推送一个美团订单  order_detail = get_order_detail(outer_order_id)  timestamp = get_tamp()  api_url = 'http://xxx.xx.xxxxxx.com/mt/xxxxx'#正式环境url,参加签名用  api_url_test = 'http://xxx.xx.xxxxxx.com/mt/xxxxx'#测试环境url,接收数据  order_data = {    'order_id':order_detail['order_id'],#int,订单id    'wm_order_id_view':order_detail['wm_order_id_view'],    #int,订单展示id    'app_poi_code':order_detail['app_poi_code'],        #电商门店id    'wm_poi_name':order_detail['wm_poi_name'],         #美团门店名称    'wm_poi_address':order_detail['wm_poi_address'],      #美团门店地址    'wm_poi_phone':order_detail['wm_poi_phone'],        #美团商家电话    'recipient_address':order_detail['recipient_address'],   #收件人收货地址    'shipping_fee':order_detail['shipping_fee'],        #float,门店配送费    'total':order_detail['total'],   #double,总价    'original_price':order_detail['original_price'],      #double,原价    'caution':order_detail['caution'], #忌口或备注    'shipper_phone':order_detail['shipper_phone'],       #送餐员电话    'status':2, #int,订单状态    'city_id':order_detail['city_id'], #long,城市ID(目前暂时用不到此信息)    'has_invoiced':order_detail['has_invoiced'],        #int,是否开发票,0不开,1开    'invoice_title':order_detail['invoice_title'],       #发票抬头    'ctime':order_detail['ctime'],   #long,创建时间    'utime':order_detail['utime'],   #long,更新时间    'delivery_time':order_detail['delivery_time'],       #long,用户预计送达时间,0表示“立即送达”    'is_third_shipping':order_detail['is_third_shipping'],   #int,是否第三方配送平台配送,0表否,1表是    'pay_type':order_detail['pay_type'],#int,支付类型,1货到付款,2在线支付    'latitude':order_detail['latitude'],#double,实际送餐地址纬度    'longitude':order_detail['longitude'],           #double,实际送餐地址经度    'detail':order_detail['detail'],  #订单商品详情    'extras':order_detail['extras'],  #优惠信息    'avg_send_time':order_detail['avg_send_time'],       #平均送餐时间,单位为秒    'day_seq':order_detail['day_seq'], #流水号    'recipient_phone':order_detail['recipient_phone'],     #收件人电话    'recipient_name':order_detail['recipient_name'],      #收件人姓名    'app_id':app_id,          #appid,标识哪个商家    'timestamp':timestamp,       #时间戳  }  sort_str = param_sort(order_data)  params_str = api_url + '?' + sort_str + secret         #参加签名的字符串  sig = get_md5(params_str)        #签名后的字符串  order_data['sig'] = sig  result = req_post_result(api_url_test,order_data)  return resultdef shipping_order(outer_order_id,logistics_status):        #向测试环境推送美团订单配送状态  timestamp = get_tamp()  api_url = 'http://xxx.xx.xxxxxx.com/mt/xxxxx'#正式环境url,参加签名用  api_url_test = 'http://xxx.xx.xxxxxx.com/mt/xxxxx'#测试环境url,接收数据  order_data = {    'order_id':outer_order_id,     #订单号    'logistics_status':logistics_status,#10订单确认,40骑手已送达,100配送单已取消    'time':timestamp,          #操作的时间    'dispatcher_name':'美团骑手',    #骑手姓名    'dispatcher_mobile':'135xxxxxxxx', #骑手电话    'app_id':app_id,          #appid,标识哪个商家    'timestamp':timestamp,       #时间戳  }  sort_str = param_sort(order_data)  params_str = api_url + '?' + sort_str + secret         #参加签名的字符串  sig = get_md5(params_str)        #签名后的字符串  order_data['sig'] = sig  result = req_post_result(api_url_test,order_data)  return resultdef refund_order(outer_order_id):#向测试环境推送美团订单整单退  timestamp = get_tamp()  t_reason = get_format_time()  api_url = 'http://xxx.xx.xxxxxx.com/mt/xxxxx'#正式环境url,参加签名用  api_url_test = 'http://xxx.xx.xxxxxx.com/mt/xxxxx'#测试环境url,接收数据  order_data = {    'order_id':outer_order_id,      #订单号    'notify_type':'apply',        #apply:发起退款    'reason':'整单退款原因%s'%t_reason,  #退款原因    'app_id':app_id,           #appid,标识哪个商家    'timestamp':timestamp,        #时间戳  }  sort_str = param_sort(order_data)  params_str = api_url + '?' + sort_str + secret #参加签名的字符串  sig = get_md5(params_str)#签名后的字符串  order_data['sig'] = sig  result = req_get_result(api_url_test,order_data)  return resultdef refund_order_part(outer_order_id):#向测试环境推送美团部分退订单  timestamp = get_tamp()  t_reason = get_format_time()  api_url = 'http://xxx.xx.xxxxxx.com/mt/xxxxx'#正式环境url,参加签名用  api_url_test = 'http://xxx.xx.xxxxxx.com/mt/xxxxx'#测试环境url,接收数据  order_detail = get_order_detail(outer_order_id)  food_first = eval(order_detail['detail'])[0]     #获取第0个商品  #组装退货商品信息  food_dict = {  'app_food_code':food_first['app_food_code'],  #商品id,即电商商品编码  'food_name':food_first['food_name'],      #商品名称  'sku_id':food_first['sku_id'],         #商品的skuid  'spec':food_first['spec'],           #单位  'food_price':food_first['price'],       #商品价格  'count':1,       #退货数量,  'box_num':1,      #打包盒数量  'box_price':food_first['box_price'],      #打包盒价格  'origin_food_price':food_first['price'],    #商品原价  'refund_price':food_first['price']       #退款价格  }  temp_list = []  temp_list.append(food_dict)  food_info = str(temp_list)  #组装接口发送数据  order_data = {    'order_id':outer_order_id,         #订单号    'notify_type':'part',           #part:发起部分退款    'reason':'部分退款原因%s'%t_reason,     #退款原因    'app_id':app_id,  #appid,标识哪个商家    'timestamp':timestamp,           #时间戳    'food':food_info, #退款商品信息    'money':food_first['price'],        #退款金额    'res_type':0    #0:未处理,5、超过24小时自动同意  }  sort_str = param_sort(order_data)  params_str = api_url + '?' + sort_str + secret #参加签名的字符串  sig = get_md5(params_str)#签名后的字符串  order_data['sig'] = sig  result = req_get_result(api_url_test,order_data)  return resultdef cancel_order(outer_order_id):#接单前,向测试环境推送用户发起的取消订单  timestamp = get_tamp()  t_reason = get_format_time()  api_url = 'http://xxx.xx.xxxxxx.com/mt/xxxxx'#正式环境url,参加签名用  api_url_test = 'http://xxx.xx.xxxxxx.com/mt/xxxxx'#测试环境url,接收数据  order_data = {    'order_id':outer_order_id,         #订单号    'reason_code':1002, #订单取消原因code    'reason':'用户取消原因%s'%t_reason,     #用户取消原因    'app_id':app_id,  #appid,标识哪个商家    'timestamp':timestamp,           #时间戳  }  sort_str = param_sort(order_data)  params_str = api_url + '?' + sort_str + secret #参加签名的字符串  sig = get_md5(params_str)#签名后的字符串  order_data['sig'] = sig  result = req_get_result(api_url_test,order_data)  return result

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。


  • 上一条:
    python实现比对美团接口返回数据和本地mongo数据是否一致示例
    下一条:
    正则给header的冒号两边参数添加单引号(Python请求用)
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客