python实现美团订单推送到测试环境,提供便利操作示例
作者:zhizunyu2009
这篇文章主要介绍了python实现美团订单推送到测试环境,提供便利操作,涉及Python基于requests模块的网络请求与数据处理相关操作技巧,需要的朋友可以参考下
本文实例讲述了python实现美团订单推送到测试环境,提供便利操作。分享给大家供大家参考,具体如下:
背景:
有时候需要在测试环境下一个美团的订单,每次都找一堆的东西,太繁琐,于是写了接口请求数据,然后把数据推送到测试环境。实现了可以在测试环境进行:生成新订单、取消订单、骑手抢单、骑手送达、申请整单退款、申请部分退款流程。
# -*- coding: utf-8 -*- import hashlib import time import requests from order30 import conf app_id = conf.app_id secret = conf.secret def 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 timestr def req_get_result(api_url,api_data):#get方法请求函数 req_get = requests.get(api_url,api_data) result = req_get.json() return result def req_post_result(api_url,api_data):#post方法请求函数 req_post = requests.post(api_url,data=api_data) result = req_post.json() return result def 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_str def 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_detail def 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 result def 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 result def 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 result def 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 result def 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程序设计有所帮助。