tp对接新达达物流

新建一个文件 DaDaSdk.class.php

<?php
namespace O2OSender;
/**
 * 达达开放平台sdk 
 */
class DaDaSdk
{
    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_QueryOrder='api/order/status/query';
    

    private $SOURCE_ID = '73753';  //商户编号
    private $SHOP_NO = '11047059'; //门店编号
    private $SUCCESS = "success";
    private $FAIL = "fail";

    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;
    }

    //查询订单详情
    public function query($orderid)
    {
        return self::getResult($this->API_QueryOrder,$orderid);
    }

    /** 新增订单
     * @return bool
     */
    public function addOrder($data)
    {
        $data['shop_no'] = $this->SHOP_NO;
//        $data['origin_id'] = "12321";
//        $data['city_code'] = "029";
//        $data['cargo_price'] = "11.2";
//        $data['is_prepay'] = "0";
//        $data['expected_fetch_time'] = time()+3600;
//        $data['receiver_name'] = "";
//        $data['receiver_address'] = "";
//        $data['receiver_phone'] = "";
//        $data['receiver_lat'] = "";
//        $data['receiver_lng'] = "";
//        $data['callback'] = "http://www.weilai517.com/index.php/Home/Test/callback/id/12321";
        return self::getResult($this->API_ADDORDER,$data);
    }

    /**
     * 重新发布订单
     * 在调用新增订单后,订单被取消、过期或者投递异常的情况下,调用此接口,可以在达达平台重新发布订单。
     * @return bool
     */
    public function reAddOrder($data)
    {
//        $data['shop_no'] = $this->SHOP_NO;
//        $data['origin_id'] = "12321";
//        $data['city_code'] = "029";
//        $data['cargo_price'] = "11.2";
//        $data['is_prepay'] = "0";
//        $data['expected_fetch_time'] = time()+3600;
//        $data['receiver_name'] = "仝帅";
//        $data['receiver_address'] = "南稍门中贸广场";
//        $data['receiver_phone'] = "13572420121";
//        $data['receiver_lat'] = "108.952931";
//        $data['receiver_lng'] = "34.248759";
//        $data['callback'] = "http://www.weilai517.com/index.php/Home/Test/callback/id/12321";
        return self::getResult($this->API_READDORDER,$data);
    }

    /**
     * 查询订单运费接口
     * @return bool
     */
    public function queryDeliverFee($data)
    {
//        $data['shop_no'] = $this->SHOP_NO;
//        $data['origin_id'] = "12321";
//        $data['city_code'] = "029";
//        $data['cargo_price'] = "11.2";
//        $data['is_prepay'] = "0";
//        $data['expected_fetch_time'] = time()+3600;
//        $data['receiver_name'] = "";
//        $data['receiver_address'] = "";
//        $data['receiver_phone'] = "";
//        $data['receiver_lat'] = "";
//        $data['receiver_lng'] = "";
//        $data['callback'] = "http://www.weilai517.com/index.php/Home/Test/callback/id/12321";
        return self::getResult($this->API_QUERYDELIVERFEE,$data);
    }

    /**
     * 查询运费后发单接口
     */
    public function addAfterQuery($data)
    {
//        $data['deliveryNo'] = '';
        return self::getResult($this->API_ADDAFTERQUERY,$data);
    }


    /**
     * 取消订单(线上环境)
     * 在订单待接单或待取货情况下,调用此接口可取消订单。注意:订单接单后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 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 cancelOrder($data)
    {
//        $data['order_id'] = '12321';
        return self::getResult($this->API_CANCELORDER,$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(){
        return self::getResult($this->API_CITY_LIST);
    }

    /**
     *
     * @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,
        );
        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);
        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;
        }
    }


}

调用达达


//调用达达
function dadafun1($id='')
{
     $link = mysqli_connect("127.0.0.1","xlyj_dayu1_netzs","6836RZe3mtDdtBY4","xlyj_dayu1_netzs");
     $sql='select order_toaddressxy,order_money,toubaomoney,order_to_member_name,order_toaddress,order_to_member_mobile,order_packageweight from web_order where  order_no='.$id;
     $res=mysqli_query($link,$sql);
     $orderinfo=mysqli_fetch_assoc($res);
    // echo '<pre>';
    // print_r($orderinfo);
    file_put_contents('./2.txt',var_export($orderinfo,true));
    
    $appkey='';
    $appsec='';
    $source_id='';
    $shop_no='';
    include('./DaDaSdk.class.php');
    $dadaobj=new \DaDaSdk($appkey,$appsec,$source_id,$shop_no);
    //获取城市code
    // $res=$dadaobj->cityCode();
    // file_put_contents('./3.txt',var_export($res,true));
      
    //print_r($res);
    // $city_code='';
    // foreach($res['result'] as $key=>$val)
    // {
    //     if(strpos('西安',$val['cityName'])!==false)
    //     {
    //         $city_code=$val['cityCode'];
    //     }
    // }
    
    $arrxy=explode(',',$orderinfo['order_toaddressxy']);
    $jingdu=$arrxy[0];
    $weidu=$arrxy[1];
    
    $order_money=$orderinfo['order_money'];//订单金额
    $toubaomoney=$orderinfo['toubaomoney'];//订单投保费
    $order_money=round($order_money+$toubaomoney,2);
    
     $data['origin_id'] = $id;
     $data['city_code'] = '029';
     $data['cargo_price'] =$order_money;
     $data['is_prepay'] = "0";
     $data['receiver_name'] = $orderinfo['order_to_member_name'] ;
     $data['receiver_address'] = $orderinfo['order_toaddress'] ;
     $data['receiver_lat'] = $weidu;
     $data['receiver_lng'] = $jingdu;
     $data['receiver_phone'] =$orderinfo['order_to_member_mobile'];
     $data['callback'] = "https://****.net/wxprogramapi/payback/dadacallback.html?id=".$id;
     $data['cargo_weight']=$orderinfo['order_packageweight'];
     if(!empty($orderinfo['toubaomoney']) && $orderinfo['toubaomoney']>0)
     {
        $data['is_use_insurance']=1;//是否使用保价
     }
     
     file_put_contents('./3.txt',var_export($data,true));
     $res=$dadaobj->addOrder($data);
     file_put_contents('./4.txt',var_export($res,true));
     
     //关闭数据库
     mysqli_close($link);
}

达达回调文件路径:域名/wxprogramapi/payback/dadacallback.html
相当于在域名/wxprogramapi/payback文件的dadacallback方法

  //达达回调
    public function dadacallback()
    {
        $orderno=input('id');
        //设置订单是达达
        db('order')->where(['order_no'=>$orderno])->update(['order_exptype'=>1]);
        
        $status=input('order_status');//订单状态(待接单=1,待取货=2,配送中=3,已完成=4,已取消=5, 指派单=8,妥投异常之物品返回中=9, 妥投异常之物品返回完成=10, 骑士到店=100,创建达达运单失败=1000 可参考文末的状态说明)
        
        if($status=='2')//待取货=2
        {
             db('order')->where(['order_no'=>$orderno])->update(['order_delivery_state'=>1]);
        }elseif($status=='3') //配送中
        {
             db('order')->where(['order_no'=>$orderno])->update(['order_delivery_state'=>2]);
        }elseif($status=='4') //已完成
        {
             db('order')->where(['order_no'=>$orderno])->update(['order_delivery_state'=>3]);
        }elseif($status=='5') //取消
        {
          dadafunagain($orderno,1);//重发
        }
              
        $appkey=config('appkey');
        $appsec=config('appsec');
        $source_id=config('source_id');
        $shop_no=config('shop_no');
        include(EXTEND_PATH.'DaDaSdk.class.php');
        $dadaobj=new \DaDaSdk($appkey,$appsec,$source_id,$shop_no);        
        //模拟接单
        // $data=[];
        // $data['order_id']=$orderno;
        // $res=$dadaobj->acceptOrder($data);    
            
        //完成取货
        // $data=[];
        // $data['order_id']=$orderno;
        // $res=$dadaobj->fetchOrder($data);       
        
        //完成配送
        // $data=[];
        // $data['order_id']=$orderno;
        // $res=$dadaobj->finishOrder($data);
        
        // echo '<pre>';
        // print_r($res); 
        
        //获取取消原因
        // $res=$dadaobj->cancelReasons();
        // echo '<pre>';
        // print_r($res);
        
        //取消订单
        // $data=[];
        // $data['order_id']=$orderno;
        // $data['cancel_reason_id']='36';
        // $res=$dadaobj->formalCancel($data);
        // print_r($res);
        
    }
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值