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

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

(0)

相关推荐

  • python爬虫_微信公众号推送信息爬取的实例

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用requests.get()获取的内容是不含推送消息的,这里使用selenium+PhantomJS处理 代码 #! /usr/bin/env python3 from selenium import webdriver from datetime import datetime import bs4, requ

  • python给微信好友定时推送消息的示例

    如下所示: from __future__ import unicode_literals from threading import Timer from wxpy import * import requests #bot = Bot() #bot = Bot(console_qr=2,cache_path="botoo.pkl")#这里的二维码是用像素的形式打印出来!,如果你在win环境上运行,替换为 bot=Bot() bot = Bot(cache_path=True) de

  • python获取地震信息 微信实时推送

    本文实例为大家分享了python获取地震信息微信实时推送的具体代码,供大家参考,具体内容如下 import requests,time from lxml import etree from wxpy import * # 微信登陆 bot = Bot() # 查找好友 group = bot.groups().search('珍爱生命 远离lisp')[0] #写自己的讨论组名称 with open('log.txt', 'r') as f: rember = f.readline() hea

  • python3实现钉钉消息推送的方法示例

    背景 偶然发现一个python实现的按照农历/阴历推送消息提醒的程序,钉钉群消息推送.此处总结并对其可推送的消息做. DingtalkNotice 环境:python3.7 安装: pip install schedule #实现定时任务的模块 pip install DingtalkChatbot #python封装的各种消息的调用 pip install sxtwl #日历库 钉钉自定义机器人: 钉钉群机器人是一个高级扩展的功能,可以将第三方服务的信息聚合到钉钉群众,实现信息的自动化同步.1

  • 使用Python制作自动推送微信消息提醒的备忘录功能

    日常工作生活中,事情一多,就会忘记一些该做未做的事情.即使有时候把事情记录在了小本本上或者手机.电脑端备忘录上,也总会有查看不及时,导致错过的尴尬.如果有一款小工具,可以及时提醒,而不用再主动去查备忘录,化被动为主动,那就再合适不过了.因此,在这里我们就利用Python,实现这样的一款"小工具". 初步设想 毫无疑问,手机是当前使用最频繁的工具,没有之一.饭可以不吃,手机不可以不带.如果能在某些特定的时点,将备忘记录事项通过某种形式发送到手机端,通过查看手机端消息实现事项提醒,那将是再

  • Python搭建APNS苹果推送通知推送服务的相关模块使用指南

    APNS 是苹果为IOS设备提供的推送服务,全称是(Apple Push Notification service). 如果你有接触移动互联网相关的开发的话,应该对它很熟悉. 接下来我会给大家简单介绍一下Python下的一些APNS相关的模块以及其特点. 模块介绍: PyAPNs 项目地址: https://github.com/djacobs/PyAPNs PyAPNs是我最早使用的APNS模块,它应该是我要介绍的所有模块里面最简单的,最新的源码 只有384行,实现了APNS的基本功能,包括发

  • Python编程之微信推送模板消息功能示例

    本文实例讲述了Python微信推送模板消息功能.分享给大家供大家参考,具体如下: 官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432 具体代码如下: #!/usr/bin/env python #-*- coding: utf-8 -*- import httplib import json import MySQLdb #从数据库中获取access_token access_token="&quo

  • 利用Python将每日一句定时推送至微信的实现方法

    前言 前几天在网上看到一篇文章<教你用微信每天给女票说晚安>,感觉很神奇的样子,随后研究了一下,构思的确是巧妙.好,那就开始动工吧!服务器有了,Python环境有了,IDE打开了...然而...然而...我意识到了一个非常严重的问题...没有女朋友 (T_T)... 微信开发已经活跃了很长时间了,在微信开发中有一个神奇的接口它叫模板消息接口,它可以根据用户的openid从服务端给用户推送自定义的模板消息,正因如此,我们可以利用这个特征在服务器端随时向用户推送消息(前提是该用户关注了该公众号).

  • python3实现zabbix告警推送钉钉的示例

    自己写了一个简单的python脚本,用来推送zabbix告警到钉钉机器人,推送格式为markdown,有需要的可以自己修改markdown的格式及推送的值(zabbix宏) 环境如下,理论上zabbix版本不影响,可以看看官方宏定义是否有区别 python 3 zabbix 3.4.2 zabbix宏官方文档:https://www.zabbix.com/documentation/3.4/manual/appendix/macros/supported_by_location 配置 配置钉钉自

  • Python编程实现微信企业号文本消息推送功能示例

    本文实例讲述了Python微信企业号文本消息推送功能.分享给大家供大家参考,具体如下: 企业号的创建.企业号应用的创建.组.tag.part就不赘述了,一搜一大堆,但是网上拿的那些个脚本好多都不好使,所以自己修了一个 坦率的讲,这个脚本是用来作为zabbix的通知媒介脚本的,本人是个菜鸟,如果哪里不对,大神们不要笑话,python也处于学习阶段,如果有哪些地方不合理,很希望可以不吝赐教,废话不多说,脚本奉上: #!/usr/bin/python # _*_coding:utf-8 _*_ imp

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

    本文实例讲述了python实现京东订单推送到测试环境,提供便利操作.分享给大家供大家参考,具体如下: # -*- coding: utf-8 -*- import hashlib import time import requests from order30 import conf app_key = conf.jd_appkey appSecret = conf.jd_secret token = conf.jd_token def get_md5(string):#返回字符串md5加密后大

  • python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)

    最近想着做一个微信机器人,主要想要实现能够每天定时推送天气预报或励志语录,励志语录要每天有自动更新,定时或当有好友回复时,能够随机推送不同的内容.于是开始了分析思路.博主是采用了多线程群发,因为微信对频繁发送消息过快还会出现发送失败的问题,因此还要加入time.sleep(1),当然时间根据自身情况自己定咯.本想把接入写诗机器人,想想自己的渣电脑于是便放弃了,感兴趣的可以尝试一下.做完会有不少收获希望对你有帮助. (1)我们要找个每天定时更新天气预报的网站,和一个更新励志语录的网站.当然如果你想

随机推荐