python实现美团订单推送到测试环境,提供便利操作示例
本文实例讲述了python实现美团订单推送到测试环境,提供便利操作。分享给大家供大家参考,具体如下:
背景:
有时候需要在测试环境下一个美团的订单,每次都找一堆的东西,太繁琐,于是写了接口请求数据,然后把数据推送到测试环境。实现了可以在测试环境进行:生成新订单、取消订单、骑手抢单、骑手送达、申请整单退款、申请部分退款流程。
#-*-coding:utf-8-*-
importhashlib
importtime
importrequests
fromorder30importconf
app_id=conf.app_id
secret=conf.secret
defget_md5(string):#返回字符串md5加密后的串
hl=hashlib.md5()
hl.update(string.encode('utf-8'))
returnhl.hexdigest()
defget_tamp():#获取当前的时间戳
t=time.time()
returnint(t)
defget_format_time():#获取现在的格式化标准时间:年-月-日时:分:秒
time_now=int(time.time())
timestr=time.strftime('%Y-%m-%d%H:%M:%S',time.localtime(time_now))
returntimestr
defreq_get_result(api_url,api_data):#get方法请求函数
req_get=requests.get(api_url,api_data)
result=req_get.json()
returnresult
defreq_post_result(api_url,api_data):#post方法请求函数
req_post=requests.post(api_url,data=api_data)
result=req_post.json()
returnresult
defparam_sort(param_dict):#传入字典,返回排序后并且连接好的字符串
keys_list=sorted(param_dict.keys())
rb_str=''
forkinkeys_list:
key_value=k+'='+str(param_dict[k])
rb_str=rb_str+key_value+'&'
rb_str=rb_str[0:-1]#不保留字符串末尾的&
returnrb_str
defget_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']
returnorder_detail
defpush_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)
returnresult
defshipping_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)
returnresult
defrefund_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)
returnresult
defrefund_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)
returnresult
defcancel_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)
returnresult
更多关于Python相关内容可查看本站专题:《PythonSocket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。