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的lambda匿名函数的简单介绍
Apr 25 Python
跟老齐学Python之做一个小游戏
Sep 28 Python
Python中用altzone()方法处理时区的教程
May 22 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
Python使用matplotlib绘制余弦的散点图示例
Mar 14 Python
python使用原始套接字发送二层包(链路层帧)的方法
Jul 22 Python
详解python破解zip文件密码的方法
Jan 13 Python
Python创建空列表的字典2种方法详解
Feb 13 Python
Python3的socket使用方法详解
Feb 18 Python
15行Python代码实现免费发送手机短信推送消息功能
Feb 27 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
Jun 02 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 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
redis 队列操作的例子(php)
2012/04/12 PHP
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
destoon安全设置中需要设置可写权限的目录及文件
2014/06/21 PHP
php从数据库查询结果生成树形列表的方法
2015/04/17 PHP
javascript String 的扩展方法集合
2008/06/01 Javascript
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
点击A元素触发B元素的事件在IE8下会识别成A元素
2014/09/04 Javascript
jquery实现顶部向右伸缩的导航区域代码
2015/09/02 Javascript
jquery 判断selection range 是否在容器中的简单实例
2016/08/02 Javascript
Javascript中call,apply,bind方法的详解与总结
2016/12/12 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
2017/07/03 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
js实现旋转的星空效果
2019/11/01 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
python高手之路python处理excel文件(方法汇总)
2016/01/07 Python
python记录程序运行时间的三种方法
2017/07/14 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
2018/05/10 Python
Python爬虫之网页图片抓取的方法
2018/07/16 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
用python3 urllib破解有道翻译反爬虫机制详解
2019/08/14 Python
Java的类与C++的类有什么不同
2014/01/18 面试题
行政副总岗位职责
2014/02/23 职场文书
环保宣传语大全
2015/07/13 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
护士业务学习心得体会
2016/01/25 职场文书
初三英语教学反思
2016/02/15 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python