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使用win32com在百度空间插入html元素示例
Feb 20 Python
Python采用raw_input读取输入值的方法
Aug 18 Python
python基础教程之缩进介绍
Aug 29 Python
python爬虫入门教程--利用requests构建知乎API(三)
May 25 Python
深入理解Django中内置的用户认证
Oct 06 Python
Python数据结构之顺序表的实现代码示例
Nov 15 Python
python爬虫豆瓣网的模拟登录实现
Aug 21 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
手动安装python3.6的操作过程详解
Jan 13 Python
python实现快速文件格式批量转换的方法
Oct 16 Python
聊一聊python常用的编程模块
May 14 Python
OpenCV绘制圆端矩形的示例代码
Aug 30 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 MVC框架详解
2017/08/16 PHP
xml 封装与解析(javascript和C#中)
2009/07/26 Javascript
A标签触发onclick事件而不跳转的多种解决方法
2013/06/27 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
javascript实现tab切换的两个实例
2015/11/05 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
js 获取当前web应用的上下文路径实现方法
2016/08/19 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
代码详解JS操作剪贴板
2018/02/11 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
使用vue-router为每个路由配置各自的title
2018/07/30 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
2019/01/08 jQuery
Vue.js组件props数据验证实现详解
2019/10/19 Javascript
JavaScript对象原型链原理解析
2020/01/22 Javascript
python shell根据ip获取主机名代码示例
2017/11/25 Python
python 反向输出字符串的方法
2018/07/16 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
2019/08/13 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
印尼网上商店:Alfacart.com
2019/03/11 全球购物
舞会礼服和舞会鞋:PromGirl
2019/04/22 全球购物
西雅图的买手店:Totokaelo
2019/10/19 全球购物
我的网上商城创业计划书
2013/12/26 职场文书
竞聘演讲稿开场白
2014/08/25 职场文书
政风行风评议心得体会
2014/10/21 职场文书
2014年社区工作总结
2014/11/18 职场文书
同学联谊会邀请函
2019/06/24 职场文书
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python