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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhizunyu2009

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值