王总上门按摩后台代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

529 lines
14 KiB

<?php
declare(strict_types=1);
namespace longbingcore\wxcore;
use app\Common\LongbingServiceNotice;
use think\facade\Db;
/**
* 达达开放平台sdk
* User: 仝帅
* Date: 2016-12-19
* Time: 16:48
*/
class DadaApi
{
//private $URL = 'http://newopen.qa.imdada.cn';
private $URL = 'http://newopen.imdada.cn';
private $APP_KEY = '';
private $VERSION = '1.0';
private $APP_SECRET = '';
private $API_ADDORDER = '/api/order/addOrder';
private $API_FETCHORDER = '/api/order/fetch';
private $API_CITY_LIST = "/api/cityCode/list";
private $API_FINISHORDER = '/api/order/finish';
private $API_CANCELORDER = '/api/order/cancel';
private $API_EXPIREORDER = '/api/order/expire';
private $API_FORMALCANCEL = '/api/order/formalCancel';
private $API_CANCELREASONS = '/api/order/cancel/reasons';
private $API_ACCEPTORDER = '/api/order/accept';
private $API_ADDTIP = '/api/order/addTip';
private $API_READDORDER = '/api/order/reAddOrder';
private $API_QUERYDELIVERFEE = '/api/order/queryDeliverFee';
private $API_ADDAFTERQUERY = '/api/order/addAfterQuery';
private $API_ADDSHOP = '/api/shop/add';
private $API_ADDMERCHANT = '/merchantApi/merchant/add';
private $API_ORDERINFO = '/api/order/status/query';
private $SOURCE_ID = '73753'; //商户编号
private $SHOP_NO = '11047059'; //门店编号
private $SUCCESS = "success";
private $FAIL = "fail";
private $call_back;
public function __construct($appkey,$appsec,$source_id,$shop_no)
{
$this->APP_KEY = $appkey;
$this->APP_SECRET = $appsec;
$this->SHOP_NO = $shop_no;
$this->SOURCE_ID = $source_id;
$this->incon = '?';
// dump($this->APP_KEY , $this->APP_SECRET, $this->SHOP_NO , $this->SOURCE_ID);exit;
if(longbingIsWeiqin()){
// $url = substr($this->request->url(),0,strpos($this->request->url(), '&s='));
$params = $_GET;
$i=$params['i'];
$t=$params['t'];
$v=$params['v'];
$n=$params['m'];
$this->call_back = "https://".$_SERVER['HTTP_HOST']."/app/index.php?i=$i&t=".$t."&v=".$v."&from=wxapp&c=entry&a=wxapp&do=api&core=core2&m=".$n."&s=restaurant/SendResult/dadaSend";
// $this->call_back = 'http://'. $_SERVER['HTTP_HOST'].$url.'&s=/restaurant/SendResult/dadaSend';
$this->incon = '&';
}else{
$this->call_back = 'http://'. $_SERVER['HTTP_HOST'].'/restaurant/SendResult/dadaSend';
$this->incon = '?';
}
}
/** 新增订单
* @return bool
*/
public function addOrder($data)
{
$city_code = $this->cityCode($data['city']);
if(!empty($city_code['code'])&&$city_code['code']==500){
return $city_code;
}
$arr = [
'shop_no' => $this->SHOP_NO,
'origin_id' => $data['order_code'],
'city_code' => $city_code,
'is_prepay' => 0,
'cargo_price' => $data['pay_price'],
'receiver_name' => $data['address']['name'],
'receiver_address' => $data['address']['address'].$data['address']['info'],
'receiver_phone' => $data['address']['phone'],
'receiver_lat' => $data['address']['lat'],
'receiver_lng' => $data['address']['long'],
'callback' => $this->call_back.$this->incon.'id='.$data['id'],
'cargo_weight' => $data['weight']
];
$res = self::getResult($this->API_ADDORDER,$arr);
// dump($this->SHOP_NO,$res);exit;
return $res;
}
/**
* 重新发布订单
* 在调用新增订单后,订单被取消、过期或者投递异常的情况下,调用此接口,可以在达达平台重新发布订单。
* @return bool
*/
public function reAddOrder($data)
{
$arr = [
'shop_no' => $this->SHOP_NO,
'origin_id' => $data['order_code'],
'city_code' => $this->cityCode($data['city']),
'is_prepay' => 0,
'cargo_price' => $data['pay_price'],
'receiver_name' => $data['address']['name'],
'receiver_address' => $data['address']['address'].$data['address']['info'],
'receiver_phone' => $data['address']['phone'],
'receiver_lat' => $data['address']['lat'],
'receiver_lng' => $data['address']['long'],
'callback' => $this->call_back.$this->incon.'id='.$data['id'],
'cargo_weight' => $data['weight']
];
return self::getResult($this->API_READDORDER,$arr);
}
/**
* 查询订单运费接口
* @return bool
*/
public function queryDeliverFee($data)
{
$data['shop_no'] = $this->SHOP_NO;
$arr = [
'shop_no' => $this->SHOP_NO,
'origin_id' => $data['id'],
'city_code' => $this->cityCode($data['city']),
'is_prepay' => 0,
'receiver_name' => $data['address']['name'],
'receiver_address' => $data['address']['address'].$data['address']['info'],
'receiver_phone' => $data['address']['phone'],
'receiver_lat' => $data['address']['lat'],
'receiver_lng' => $data['address']['long'],
'callback' => $this->call_back.$this->incon.'id='.$data['id'],
'cargo_weight' => $data['weight']
];
// dump($this->call_back.'/id/'.$data['id']);exit;
return self::getResult($this->API_QUERYDELIVERFEE,$arr);
}
/**
* 查询运费后发单接口
*/
public function addAfterQuery($data)
{
return self::getResult($this->API_ADDAFTERQUERY,$data);
}
/**
* 查询运费后发单接口
*/
public function orderInfo($data)
{
$arr['order_id'] = $data['order_code'];
// dump($data);exit;
// $data['deliveryNo'] = '';
return self::getResult($this->API_ORDERINFO,$arr);
}
/**
* 取消订单(线上环境)
* 在订单待接单或待取货情况下,调用此接口可取消订单。注意:订单接单后1-15分钟取消订单,会扣除相应费用补贴给接单达达
* @return bool
*/
public function formalCancel($data)
{
// $data['order_id'] = '12321';
// $data['cancel_reason_id'] = '1';
// $data['cancel_reason'] = "";
return self::getResult($this->API_FORMALCANCEL,$data);
}
/**
* 取消订单(仅在测试环境供调试使用)
* @return bool
*/
public function cancelOrder($data)
{
// $data['order_id'] = '12321';
return self::getResult($this->API_CANCELORDER,$data);
}
/**
* 增加小费
* 可以对待接单状态的订单增加小费。需要注意:订单的小费,以最新一次加小费动作的金额为准,故下一次增加小费额必须大于上一次小费额。
* @return bool
*/
public function addTip($data)
{
// $data['order_id'] = '12321';
// $data['tips'] = '2.5';
// $data['city_code'] = '029';
// $data['info'] = '';
return self::getResult($this->API_ADDTIP,$data);
}
/**
* 新增门店
* @return bool
*/
public function addShop($data)
{
// $data['origin_shop_id'] = '';
// $data['station_name'] = '';
// $data['business'] = '';
// $data['city_name'] = '';
// $data['area_name'] = '';
// $data['station_address'] = '';
// $data['lng'] = '';
// $data['lat'] = '';
// $data['contact_name'] = '';
// $data['phone'] = '';
// $data['username'] = '';
// $data['password'] = '';
return self::getResult($this->API_ADDSHOP,$data);
}
public function addMerchant($data)
{
// $data['mobile'] = '';
// $data['city_name'] = '';
// $data['enterprise_name'] = '';
// $data['enterprise_address'] = '';
// $data['contact_name'] = '';
// $data['contact_phone'] = '';
$this->SOURCE_ID = '';
return self::getResult($this->API_ADDMERCHANT,$data);
}
/**
* 获取取消订单原因列表
* array {0 =>array{'reason' =>'没有达达接单','id' =>1},....}
*/
public function cancelReasons()
{
$res = self::getResult($this->API_CANCELREASONS);
var_dump($res);
}
/**
* 接单(仅在测试环境供调试使用)
* @return bool
*/
public function acceptOrder($data)
{
// $data['order_id'] = '12321';
return self::getResult($this->API_ACCEPTORDER,$data);
}
/**
* 完成取货(仅在测试环境供调试使用)
* @return bool
*/
public function fetchOrder($data)
{
// $data['order_id'] = '12321';
return self::getResult($this->API_FETCHORDER,$data);
}
/**
* 完成订单(仅在测试环境供调试使用)
* @return bool
*/
public function finishOrder($data)
{
// $data['order_id'] = '12321';
return self::getResult($this->API_FINISHORDER,$data);
}
/**
* 订单过期(仅在测试环境供调试使用)
* @return bool
*/
public function expireOrder($data)
{
// $data['order_id'] = '12321';
return self::getResult($this->API_EXPIREORDER,$data);
}
/**
* 订单状态变化后,达达回调我们
*/
public function processCallback()
{
$content = file_get_contents("php://input");
//{"order_status":2,"cancel_reason":"","update_time":1482220973,"dm_id":666,"signature":"7a177ae4b1cf63d13261580e4f721cb9","dm_name":"测试达达","order_id":"12321","client_id":"","dm_mobile":"13546670420"}
if($content){
$arr = json_decode($content,true);
}
}
/** 获取城市信息
* @return bool
*/
public function cityCode($city){
$code = 0;
$data = self::getResult($this->API_CITY_LIST);
if(empty($data['result'])){
return $data;
}
$city = str_replace('市','',$city);
$found_key = array_search($city, array_column($data['result'], 'cityName'));
if(!is_numeric($found_key)){
return ['code'=>500,'msg'=>'达达暂不支持该城市'];
}
if(key_exists($found_key,$data['result'])){
$code = $data['result'][$found_key]['cityCode'];
}
return $code;
}
/**
*
* @param $param
* @param $time
* @return string
*/
private function sign($param,$time)
{
$tmpArr = array(
"app_key"=>$this->APP_KEY,
"body"=>$param,
"format"=>"json",
"source_id"=>$this->SOURCE_ID,
"timestamp"=>$time,
"v"=>$this->VERSION,
);
// dump($tmpArr);exit;
if(empty($this->SOURCE_ID)){
unset($tmpArr['source_id']);
}
$str = '';
foreach ($tmpArr as $k=>$v){
$str .= $k.$v;
}
$str = $this->APP_SECRET.$str.$this->APP_SECRET;
$signature = md5($str);
// dump($signature);exit;
return strtoupper($signature);
}
private function getParam($data='')
{
if(empty($data)){
$param = '';
}else{
$param = json_encode($data);
}
$time = time();
$sign = self::sign($param,$time);
$tmpArr = array(
"app_key"=>$this->APP_KEY,
"body"=>$param,
"format"=>"json",
"signature"=>$sign,
"source_id"=>$this->SOURCE_ID,
"timestamp"=>$time,
"v"=>$this->VERSION,
);
if(empty($this->SOURCE_ID)){
unset($tmpArr['source_id']);
}
return json_encode($tmpArr);
}
/** 根据参数获取结果信息
* @param $api
* @param string $data
* @return bool
*/
private function getResult($api,$data=''){
$param = self::getParam($data);
$url = $this->URL.$api;
$res = self::http_post($url,$param);
if($res){
$res = json_decode($res,true);
// if($res['status'] == $this->SUCCESS){
return $res;
// }
}
return false;
}
/**
* POST 请求
* @param string $url
* @param array $param
* @param boolean $post_file 是否文件上传
* @return string content
*/
private function http_post($url,$param,$post_file=false){
$oCurl = curl_init();
if(stripos($url,"https://")!==FALSE){
curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
}
if (is_string($param) || $post_file) {
$strPOST = $param;
} else {
$aPOST = array();
foreach($param as $key=>$val){
$aPOST[] = $key."=".urlencode($val);
}
$strPOST = join("&", $aPOST);
}
curl_setopt($oCurl, CURLOPT_URL, $url);
curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($oCurl, CURLOPT_POST,true);
curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST);
$header = array(
'Content-Type: application/json',
);
curl_setopt($oCurl, CURLOPT_HTTPHEADER, $header);
$sContent = curl_exec($oCurl);
$aStatus = curl_getinfo($oCurl);
curl_close($oCurl);
if(intval($aStatus["http_code"])==200){
return $sContent;
}else{
return false;
}
}
}