对接美团外卖开放平台
话不多说 直接上代码
# 再此之前 你需要在美团的外卖开放平台配置回调地址 及 推送地址。
# 注意 美团推送的时候会有get请求,如果你的项目访问地址必带有"?" 在配置美团的时候 需要修改你的地址,apache下 修改项目根目录中的“.htaccess”文件;
# 例:http://xxx.com.cn/?md=mt&cl=mt&at=mt 这是你项目访问地址,需要修改为 http://xxx.com.cn/md=mt/mt/mt.自己网上找下怎么样配置的
<?php
class MTController extends commonController {
######################################################### 必接接口 订单推送API START ########################################################
const SANDBOX_APP_ID = '';
const SANDBOX_APP_SECRET = '';
const SANDBOX_URL = 'https://waimaiopen.meituan.com/api/v1/';
const SANDBOX_STORE_ID = '';
const APP_ID = '';
const APP_SECRET = '';
const URL = '';
const STORE_ID = '';
/**
* 推送已确认订单 这里你可以操作获取订单信息存储数据库等 ;该信息由美团直接POST 推送到这个配置接口地址
*/
public function MTConfirmOrderAction() {
$log = new Logging();
$log->lfile('MTConfirmOrder');
if($_POST && $_POST['sig'] && count((array)$_POST) > 0){
$url_detail = urldecode($_POST['detail']);
$detail = json_decode($url_detail,true);
$field['order_no'] = $_POST['order_id'];
$field['shop_no'] = $_POST['app_poi_code'];
$field['lat'] = $_POST['latitude'];
$field['lng'] = $_POST['longitude'];
$field['source'] = '美团';
$field['buyer'] = urldecode($_POST['recipient_name']);
$field['receiver'] = urldecode($_POST['recipient_name']);
$field['receiver_tel'] = $_POST['recipient_phone'];
$field['receiver_address'] = urldecode($_POST['recipient_address']);
$field['customre_memo'] = urldecode($_POST['caution']);
$field['actual_pay'] = $_POST['total'];
$field['order_time'] = $_POST['ctime'];
$field['delivery_time'] = $_POST['delivery_time'];
$field['consignment_sync'] = 'Y';
$field['status'] = 0;
$field['shop_name'] = $_POST['wm_poi_name'];
$field['ph_no'] = 'MT'.$_POST['order_id'];
$field['pos_fee'] = $_POST['shipping_fee'];
$field['createdt'] = 'now()';
$OID = $this->model->addItem($field, 'orders');
$field = [];
foreach ($detail as $v){
$field['orders_id'] = $OID;
$field['product_no'] = $v['app_food_code'];
$field['product_name'] = $v['food_name'];
$field['qty'] = $v['quantity'];
$field['unit_price'] = $v['price'];
$field['ph_no'] = 'MT'.$_POST['order_id'];
$field['createdt'] = 'now()';
$this->model->addItem($field, 'orders_product');
}
}
$r = ['data'=>'ok'];
$log->lwrite('reception:' . json_encode($_POST,JSON_UNESCAPED_UNICODE).'response:'.json_encode($r));
echo json_encode($r);
}
/**
* 已完成订单推送回调
*/
public function MTFinishStatusAction() {
$log = new Logging();
$log->lfile('MTFinishStatus');
$r = ['data'=>'ok'];
$log->lwrite('reception:' . json_encode($this->params,JSON_UNESCAPED_UNICODE).'response:'.json_encode($r));
echo json_encode($r);
}
/**
* 订单配送状态回调
*/
public function MTOrderStatusAction() {
$log = new Logging();
$log->lfile('MTOrderStatus');
$r = ['data'=>'ok'];
$log->lwrite('reception:' . json_encode($_POST,JSON_UNESCAPED_UNICODE).'response:'.json_encode($r));
echo json_encode($r);
}
/**
* 推送已支付订单
*/
public function MTPushPaidOrdersAction() {
$log = new Logging();
$log->lfile('MTPushPaidOrders');
$this->MTConfirmAction($_POST['order_id']); # 直接确认订单
// $this->MTCancelAction($_POST['order_id']); # 直接取消订单
$r = ['data'=>'ok'];
$log->lwrite('reception:' . json_encode($_POST,JSON_UNESCAPED_UNICODE).'response:'.json_encode($r));
echo json_encode($r);
}
/**
* 推送催单消息
*/
public function MTReminderAction() {
$log = new Logging();
$log->lfile('MTReminder');
$r = ['data'=>'ok'];
$log->lwrite('reception:' . json_encode($_POST,JSON_UNESCAPED_UNICODE).'response:'.json_encode($r));
echo json_encode($r);
}
######################################################### 订单推送API END ########################################################
######################################################### 取消订单推送API START ########################################################
/**
* 推送取消订单消息 推送用户或客服取消订单
*/
public function MTPushCancelOrderAction() {
$log = new Logging();
$log->lfile('MTPushCancelOrder');
$r = ['data'=>'ok'];
$log->lwrite('reception:' . json_encode($this->params,JSON_UNESCAPED_UNICODE).'response:'.json_encode($r));
echo json_encode($r);
}
######################################################### 取消订单推送API END ########################################################
######################################################### 必接接口 订单类API START ########################################################
/**
* 商家确认订单
*/
public function MTConfirmAction($order_id) {
$Config = Config::getInstance();
$webSite = $Config->getWebSiteConfig();
$APP_ID = (($webSite['debug']) ? self::SANDBOX_APP_ID : self::APP_ID);
$URL = (($webSite['debug']) ? self::SANDBOX_URL : self::URL).'order/confirm';
$parameter['order_id'] = $order_id;
$parameter['timestamp'] = time();
$parameter['app_id'] = $APP_ID;
$log = new Logging();
$log->lfile('MTConfirm');
$sign = $this->_sign($parameter,$URL);
$Result = $this->getCurl($sign);
$Data = json_decode($Result, true);
$log->lwrite('reception:' . json_encode($Data,JSON_UNESCAPED_UNICODE).'response:'.json_encode($parameter,JSON_UNESCAPED_UNICODE));
}
/**
* 推送订单结算信息
*/
public function MTOrderCloseAction() {
$log = new Logging();
$log->lfile('MTOrderClose');
$r = ['data'=>'ok'];
$log->lwrite('reception:' . json_encode($_POST,JSON_UNESCAPED_UNICODE).'response:'.json_encode($r));
echo json_encode($r);
}
/**
* 驳回订单退款申请
*/
public function MTRejectAction($order_id,$reason) {
$log = new Logging();
$log->lfile('MTReject');
$Config = Config::getInstance();
$webSite = $Config->getWebSiteConfig();
$APP_ID = (($webSite['debug']) ? self::SANDBOX_APP_ID : self::APP_ID);
$URL = (($webSite['debug']) ? self::SANDBOX_URL : self::URL).'order/refund/reject';
$parameter['order_id'] = $order_id;
$parameter['reason'] = $reason;
$parameter['timestamp'] = time();
$parameter['app_id'] = $APP_ID;
$sign = $this->_sign($parameter,$URL);
$Result = $this->getCurl($sign);
$Data = json_decode($Result, true);
$r = ['data'=>'ok'];
$log->lwrite('reception:' . json_encode($Data,JSON_UNESCAPED_UNICODE).'response:'.json_encode($parameter,JSON_UNESCAPED_UNICODE));
echo json_encode($r);
}
/**
* 订单确认退款请求
*/
public function MTAgreeAction($order_id,$reason) {
$log = new Logging();
$log->lfile('MTAgree');
$Config = Config::getInstance();
$webSite = $Config->getWebSiteConfig();
$APP_ID = (($webSite['debug']) ? self::SANDBOX_APP_ID : self::APP_ID);
$URL = (($webSite['debug']) ? self::SANDBOX_URL : self::URL).'order/refund/agree';
$parameter['order_id'] = $order_id;
$parameter['reason'] = $reason;
$parameter['timestamp'] = time();
$parameter['app_id'] = $APP_ID;
$sign = $this->_sign($parameter,$URL);
$Result = $this->getCurl($sign);
$Data = json_decode($Result, true);
$log->lwrite('reception:' . json_encode($Data,JSON_UNESCAPED_UNICODE).'response:'.json_encode($parameter,JSON_UNESCAPED_UNICODE));
}
/**
* 订单配送中 改状态
*/
public function MTAeliveringAction() {
$Config = Config::getInstance();
$webSite = $Config->getWebSiteConfig();
$log = new Logging();
$log->lfile('MTAelivering');
$APP_ID = (($webSite['debug']) ? self::SANDBOX_APP_ID : self::APP_ID);
$URL = (($webSite['debug']) ? self::SANDBOX_URL : self::URL).'order/delivering';
$parameter['order_id'] = '27009292362162587';
$parameter['timestamp'] = time();
$parameter['courier_name'] = '是我';
$parameter['courier_phone'] = 17321295203;
$parameter['app_id'] = $APP_ID;
$sign = $this->_sign($parameter,$URL);
$Result = $this->getCurl($sign);
$Data = json_decode($Result, true);
$log->lwrite('reception:' . json_encode($Data,JSON_UNESCAPED_UNICODE).'response:'.json_encode($parameter));
}
/**
* 修改状态送达
*/
public function MTArrivedAction() {
$Config = Config::getInstance();
$webSite = $Config->getWebSiteConfig();
$log = new Logging();
$log->lfile('MTArrived');
$APP_ID = (($webSite['debug']) ? self::SANDBOX_APP_ID : self::APP_ID);
$URL = (($webSite['debug']) ? self::SANDBOX_URL : self::URL).'order/arrived';
$parameter['order_id'] = '27009292362162587';
$parameter['timestamp'] = time();
$parameter['app_id'] = $APP_ID;
$sign = $this->_sign($parameter,$URL);
$Result = $this->getCurl($sign);
$Data = json_decode($Result, true);
$log->lwrite('reception:' . json_encode($Data,JSON_UNESCAPED_UNICODE).'response:'.json_encode($parameter));
}
######################################################### 订单类API END ########################################################
}