首页 > 编程 > Python > 正文

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

2019-11-25 12:03:11
字体:
来源:转载
供稿:网友

本文实例讲述了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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表