PHP 蜂鸟即配封装类 - ThinkPHP框架

PHP 蜂鸟即配封装类 - ThinkPHP框架

 //蜂鸟即配
    'FNPSELE' => [
        'APPID' => '', //App ID
        'SecretKey' => '', //密钥
        'FORMAL_URL' => 'https://exam-anubis.ele.me/anubis-webapi', // 正式环境
        'ADJUSTING_URL' => 'https://open-anubis.ele.me/anubis-webapi', //联调环境
    ],

把以下封装类,直接丢入公共类模块。
在控制器里直接 use **/Anubis; 使用 new Anubis;调用

<?php
/**
 * 蜂鸟即配封装类.
 */
namespace app\common\service\thirdparty;
use think\Cache;
define('APPID', config('FNPSELE.APPID'));       //蜂鸟配送APPID
define('SecretKey', config('FNPSELE.SecretKey'));  //蜂鸟配送SecretKey
class Anubis
{
    private $salt = '';                     //随机数
    private $formalUrl = [];                //正式地址
    private $adjustingUrl = [];             //联调地址
    /**
     * 赋值各个地址
     * Ele constructor.
     */
    function __construct()
    {
        $this->formalUrl = config('FNPSELE.FORMAL_URL');//蜂鸟配送APPID
        $this->adjustingUrl = config('FNPSELE.ADJUSTING_URL');//蜂鸟配送SecretKey
        $this->salt = mt_rand(1000, 9999);
    }


    /**
     * 获取token
     * @return mixed
     */
    public function getToken()
    {
        $eleToken = Cache::get('eleToken');

        if(!empty($eleToken)){
            return Cache('eleToken');
        }else{
            $url = $this->requestUrl(true, 'get_access_token') . '?app_id=' . APPID . '&salt=' . $this->salt . '&signature=' . $this->tokenSign();

            $postUrl = $this->requestHttp($url);

            if ($postUrl['code'] == 200 && isset($postUrl['data']['access_token'])) {
                Cache::set('eleToken',$postUrl['data']['access_token'],3600*23);
                return Cache::get('eleToken');
            }
            return $postUrl;  //错误会返回code
        }
    }
    /**
     * 请求地址
     * @param string $type (1为正式地址,0为联调地址)
     * @param string $urlType
     * @return mixed|string
     */
    private function requestUrl($type = '1', $urlType = '')
    {
        $url = '';
        switch ($type) {
            case 1:
                $url = $this->adjustingUrl;
                break;
            case 0:
                $url = $this->formalUrl;
                break;
        }
        return $url.'/'.$urlType;
    }
    /**
     * 获取token时的签名
     * @return string
     */
    private function tokenSign()
    {
        $sign = 'app_id=' . APPID . '&salt=' . $this->salt . '&secret_key=' . SecretKey;
        return md5(urlencode($sign));
    }

    /**
     * 签名
     * @param $appId
     * @param $token
     * @param $urlencodeData
     * @param $salt
     * @return string
     */
    private function sign($appId, $token, $urlencodeData, $salt)
    {
        $sign = 'app_id=' . $appId . '&access_token=' . $token
            . '&data=' . $urlencodeData . '&salt=' . $salt;
        return md5($sign);
    }

    /**
     * 创建门店
     * @param array $data
     * @return mixed
     */
    public function CreateChainStore($data = [])
    {
        $url = $this->requestUrl(true, 'v2/chain_store');
        $ChainStoreData = [
            'chain_store_code' => $data['chain_store_code'],//门店编号
            'chain_store_name' => $data['chain_store_name'],//门店名称
            'chain_store_type' => $data['chain_store_type'],//门店类型(1:正式门店,2:测试门店)
            'contact_phone' => $data['contact_phone'],//门店联系信息
            'address' => $data['address'],//门店地址
            'position_source' => 1,//坐标属性1:腾讯地图, 2:百度地图, 3:高德地图
            'longitude' => $data['longitude'],//门店经度
            'latitude' => $data['latitude'],//门店纬度
            'service_code' => $data['service_code'],//所属商户下已采购的配送服务code
        ];
        return $this->requestReturn($url, $ChainStoreData);
    }
    /**
     * 修改门店
     * @param array $data
     * @return mixed
     */
    public function UpChainStore($data = [])
    {
        $url = $this->requestUrl(true, 'v2/chain_store/update');
        $ChainStoreData = [
            'chain_store_code' => $data['chain_store_code'],//门店编号
            'chain_store_name' => $data['chain_store_name'],//门店名称
            'contact_phone' => $data['contact_phone'],//门店联系信息
            'address' => $data['address'],//门店地址
            'position_source' => 1,//坐标属性1:腾讯地图, 2:百度地图, 3:高德地图
            'longitude' => $data['longitude'],//门店经度
            'latitude' => $data['latitude'],//门店纬度
            'service_code' => $data['service_code'],//所属商户下已采购的配送服务code
        ];

        return $this->requestReturn($url, $ChainStoreData);
    }

    /**
     * 查询门店信息
     * @param array $data
     * @return mixed
     */
    public function getChainStoreQuery($data = [])
    {
        $url = $this->requestUrl(true, 'v2/chain_store/query');

        $res = $this->json($data['chain_store_code']);

        $ChainStoreData = [
            'chain_store_code' => $res,//门店编号
        ];

        return $this->requestReturn($url, $ChainStoreData);
        
    }

    function json($code) {
        $result = array(
            "0" => $code,
        );
        return json_encode($result);
    }
    /**
     * 查询配送范围
     * @param array $data
     * @return mixed
     */
    public function getChainStoreDelivery($data = [])
    {
        $url = $this->requestUrl(true, 'v2/chain_store/delivery_area');
        $ChainStoreData = [
            'chain_store_code' => $data['chain_store_code'],//门店编号
        ];
        return $this->requestReturn($url, $ChainStoreData);
    }
    /**
     * 创建订单
     * @param $data
     * @return mixed
     */
    public function eleDistribution($distributionData)
    {
        $url = $this->requestUrl(true, 'v2/order');
        return $this->requestReturn($url, $distributionData);
    }

    /**
     * 同步取消订单
     * @param array $data
     * @return mixed
     */
    public function cancelOrder($data = [])
    {
        $url = $this->requestUrl(true, 'v2/order/cancel');
        $cancelData = [
            'partner_order_code' => $data['partner_order_code'],
            'order_cancel_reason_code' => $data['order_cancel_reason_code'],
            'order_cancel_code' => $data['order_cancel_code'],
            'order_cancel_time' => $data['order_cancel_time'],
            ];
        if (isset($data['order_cancel_description']) && !empty($data['order_cancel_description'])) {
            $cancelData['order_cancel_description'] = $data['order_cancel_description'];
        }
        return $this->requestReturn($url, $cancelData);
    }
    /**
     * 查询订单
     * @param array $data
     * @return mixed
     */
    public function getOrder($data = [])
    {
        $url = $this->requestUrl(true, 'v2/order/query');
        $orderData = ['partner_order_code' => $data['partner_order_code']];
        return $this->requestReturn($url, $orderData);
    }
    /**
     * 投诉订单
     * @param array $data
     * @return mixed
     */
    public function complaintOrder($data = [])
    {
        $url = $this->requestUrl(true, 'COMPLAINT_ORDER');
        $complaintData = ['partner_order_code' => $data['partner_order_code'],
            'order_complaint_code' => $data['order_complaint_code'],
            'order_complaint_time' => $data['order_complaint_time'],];
        if (isset($data['order_complaint_desc']) && !empty($data['order_complaint_desc'])) {
            $cancelData['order_complaint_desc'] = $data['order_complaint_desc'];
        }
        return $this->requestReturn($url, $complaintData);
    }
    /**
     * 查询骑手位置
     * @param array $data
     * @return mixed
     */
    public function getRider($data = [])
    {
        $url = $this->requestUrl(true, 'v2/order/carrier');
        $orderData = ['partner_order_code' => $data['partner_order_code']];
        return $this->requestReturn($url, $orderData);
    }
    /**
     * 查询配送服务
     * @param array $data
     * @return mixed
     */
    public function getDeliveryQuery($data = [])
    {
        $url = $this->requestUrl(true, 'v2/chain_store/delivery/query');
        $orderData = [
            'chain_store_code' => $data['chain_store_code'],
            'position_source' => 1,
            'receiver_longitude' => $data['receiver_longitude'],
            'receiver_latitude' => $data['receiver_latitude'],
        ];
        return $this->requestReturn($url, $orderData);
    }
    /**
     * 请求返回
     * @param string $url
     * @param array $data
     * @return mixed
     */
    private function requestReturn($url = '', $data = [])
    {

        $data = urlencode(json_encode($data));

        $salt = $this->salt;
        $sign = $this->sign(APPID, $this->getToken(), $data, $salt);
        $requestData = [
            'app_id' => APPID,
            'data' => $data,
            'salt' => $salt,
            'signature' => $sign
        ];

        return $this->requestPost($url, json_encode($requestData,JSON_UNESCAPED_UNICODE));
    }
    /**
     * post请求
     * @param $url
     * @param $param
     * @param string $method
     * @return bool|mixed
     */
    public  function requestPost($url, $param, $method = "POST")
    {
        if (empty($url) or empty($param)) {
            throw new InvalidArgumentException('Params is not of the expected type');
        }
        if (!empty($param) and is_array($param)) {
            $param = urldecode(json_encode($param));
        } else {
            $param = strval($param);
        }
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);     //  不进行ssl 认证
        if (strcmp($method, "POST") == 0) {  // POST 操作
            curl_setopt($ch, CURLOPT_POST, true);
        } else if (strcmp($method, "DELETE") == 0) { // DELETE操作
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
        } else {
            throw new InvalidArgumentException('Please input correct http method, such as POST or DELETE');
        }
        curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: Application/json'));
        $result = curl_exec($ch);
        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        if (!empty($result) and $code == '200') {
            return json_decode($result,true);
        }
        return false;
    }
    /**
     * GET请求
     * @param $url
     * @param null $data
     * @return mixed
     */
    private function requestHttp($url, $data = null)
    {
        $ch = curl_init();
        if (class_exists('/CURLFile')) {
            curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
        } else {
            if (defined('CURLOPT_SAFE_UPLOAD')) {
                curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
            }
        }
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        if (stripos($url, "https://") !== false) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        }
        if ($data != null) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        }
        $res = curl_exec($ch);
        if (curl_errno($ch) != 0) {
            var_dump('错误号:' . curl_errno($ch) . '错误信息' . curl_error($ch));
        }
        curl_close($ch);
        return json_decode($res, true);
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ThinkPHP 是一个优秀的PHP框架,可以帮助我们快速开发高质量的 Web 应用程序。因此,使用 ThinkPHP 来开发 OA 系统是非常方便和实用的。下面我们来讨论一下如何使用 ThinkPHP 来开发一个人力资源管理系统。 1. 创建数据库 首先,我们需要创建一个数据库来存储我们的数据。在该数据库中,我们需要创建一些表来存储员工信息、部门信息、职位信息、薪资信息等等。我们可以使用 MySQL 数据库来创建这些表。 2. 创建 ThinkPHP 项目 在创建完数据库之后,我们需要创建一个 ThinkPHP 项目来实现我们的 OA 系统。我们可以使用 ThinkPHP 官方提供的命令行工具来创建项目,具体命令如下: ``` composer create-project topthink/think oa ``` 执行完上述命令后,会在当前目录下创建一个名为 oa 的 ThinkPHP 项目。 3. 配置数据库 在项目创建好之后,我们需要配置数据库连接信息。在项目的 `.env` 文件中,我们可以配置数据库的相关信息,如下所示: ``` # 数据库型 DB_CONNECTION=mysql # 数据库地址 DB_HOST=127.0.0.1 # 数据库端口 DB_PORT=3306 # 数据库名 DB_DATABASE=oa # 数据库用户名 DB_USERNAME=root # 数据库密码 DB_PASSWORD= ``` 我们需要根据自己的实际情况来修改这些配置项。 4. 创建控制器和模型 在 ThinkPHP 中,我们可以通过创建控制器和模型来实现 OA 系统的功能。我们可以使用命令行工具来快速创建控制器和模型,具体命令如下: ``` # 创建控制器 php think make:controller Index # 创建模型 php think make:model User ``` 执行完上述命令后,会在项目中生成一个名为 Index 的控制器和一个名为 User 的模型。 5. 实现功能 在创建好控制器和模型之后,我们就可以开始实现 OA 系统的功能了。比如,我们可以实现员工信息的添加、修改、删除、查询等操作,部门信息的添加、修改、删除、查询等操作,职位信息的添加、修改、删除、查询等操作,薪资信息的添加、修改、删除、查询等操作等等。我们可以在控制器中编写处理逻辑,在模型中编写数据库操作。最后,我们可以使用视图来展示数据。 6. 测试系统 在实现完功能之后,我们需要对系统进行测试。我们可以使用浏览器或者 Postman 等工具来测试系统的功能是否正常。如果有问题,我们可以根据错误提示来进行调试和修复。 总之,使用 ThinkPHP 来开发 OA 系统是非常方便和实用的。我们可以根据自己的实际情况来定制系统的功能和界面,从而更好地管理公司的人力资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值