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


Posted in Python onAugust 09, 2019

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

Python 相关文章推荐
python 实现插入排序算法
Jun 05 Python
python中使用urllib2伪造HTTP报头的2个方法
Jul 07 Python
Python实现的检测网站挂马程序
Nov 30 Python
Python类定义和类继承详解
May 08 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
May 26 Python
python利用requests库模拟post请求时json的使用教程
Dec 07 Python
python根据txt文本批量创建文件夹
Dec 08 Python
python跳出双层for循环的解决方法
Jun 24 Python
Django之使用内置函数和celery发邮件的方法示例
Sep 16 Python
使用Python打造一款间谍程序的流程分析
Feb 21 Python
Python进程间通信multiprocess代码实例
Mar 18 Python
django跳转页面传参的实现
Sep 17 Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 #Python
基于django ManyToMany 使用的注意事项详解
Aug 09 #Python
Django在admin后台集成TinyMCE富文本编辑器的例子
Aug 09 #Python
python实现京东订单推送到测试环境,提供便利操作示例
Aug 09 #Python
利用ImageAI库只需几行python代码实现目标检测
Aug 09 #Python
python操作excel让工作自动化
Aug 09 #Python
python笔记_将循环内容在一行输出的方法
Aug 08 #Python
You might like
PHP源码之 ext/mysql扩展部分
2009/07/17 PHP
PHP编程函数安全篇
2013/01/08 PHP
typecho插件编写教程(二):写一个新插件
2015/05/28 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
Javascript操作cookie的函数代码
2012/10/03 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
2016/07/04 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
2017/02/07 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
2018/12/03 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
vue监听dom大小改变案例
2020/07/29 Javascript
在Python中使用全局日志时需要注意的问题
2015/05/06 Python
python选择排序算法实例总结
2015/07/01 Python
Django框架中的对象列表视图使用示例
2015/07/21 Python
python select.select模块通信全过程解析
2017/09/20 Python
Python实现抢购IPhone手机
2018/02/07 Python
Pythony运维入门之Socket网络编程详解
2019/04/15 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
python Qt5实现窗体跟踪鼠标移动
2019/12/13 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
python向企业微信发送文字和图片消息的示例
2020/09/28 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
PHP中如何创建和修改数组
2012/05/02 面试题
运行时异常与一般异常有何异同?
2014/01/05 面试题
个人查摆问题及整改措施
2014/10/16 职场文书
2014年新教师工作总结
2014/11/08 职场文书
竞选稿之小学班干部
2019/10/31 职场文书
在虚拟机中安装windows server 2008的图文教程
2022/06/28 Servers