zx/crmeb/services/express/storage/Express.php

164 lines
5.7 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace crmeb\services\express\storage;
use app\common\repositories\store\shipping\ExpressPartnerRepository;
use app\common\repositories\store\shipping\ExpressRepository;
use app\common\repositories\system\merchant\MerchantRepository;
use crmeb\services\AccessTokenServeService;
use crmeb\services\BaseExpress;
use think\exception\ValidateException;
/**
* Class Express
* @package crmeb\services\express\storage
*/
class Express extends BaseExpress
{
/**
* 注册服务
*/
const EXPRESS_OPEN = 'expr/open';
/**
* 电子面单模版
*/
const EXPRESS_TEMP = 'expr/temp';
/**
* 电子面单模版
*/
const EXPRESS_TEMP_V2 = 'expr_dump/temp';
/**
* 快递公司
*/
const EXPRESS_LIST = 'expr/express';
/**
* 快递查询
*/
const EXPRESS_QUERY = 'expr/query';
/**
* 面单打印
*/
const EXPRESS_DUMP = 'expr/dump';
/** 初始化
* @param array $config
* @return mixed|void
*/
protected function initialize(array $config = [])
{
parent::initialize($config); // TODO: Change the autogenerated stub
}
/**
* 开通物流服务
* @return bool|mixed
*/
public function open()
{
return $this->accessToken->httpRequest(self::EXPRESS_OPEN, []);
}
/**
* 获取电子面单模版
* @param $com 快递公司编号
* @param int $page
* @param int $limit
* @return bool|mixed
*/
public function temp(string $com)
{
$param = ['com' => $com];
return $this->accessToken->httpRequest(self::EXPRESS_TEMP, $param,'post',true);
}
public function tempV2(string $com)
{
$param = ['com' => $com];
return $this->accessToken->httpRequest(self::EXPRESS_TEMP_V2, $param,'get',true, ['version:v1.1']);
}
/**
* 获取物流公司列表
* @param int $type 快递类型1国内运输商2国际运输商3国际邮政
* @return bool|mixed
*/
public function express(int $type = 0, int $page = 0, int $limit = 20)
{
$param = [];
if ($type) $param['type'] = $type;
return $this->accessToken->httpRequest(self::EXPRESS_LIST, $param,'get');
}
/**
* 查询物流信息
* @param $com
* @param $num
* @return bool|mixed
* @return 是否签收 ischeck
* @return 物流状态status 0在途1揽收2疑难3签收4退签5派件6退回7转单10待清关11清关中12已清关13清关异常14收件人拒签
* @return 物流详情 content
*/
public function query(string $num, string $com = '')
{
$param = [
'com' => $com,
'num' => $num
];
if ($com === null) {
unset($param['com']);
}
return $this->accessToken->httpRequest(self::EXPRESS_QUERY, $param);
}
/**
* 电子面单打印
* @param array $data 必需参数: com(快递公司编码)、to_name(寄件人)、to_tel寄件人电话、to_addr寄件人详细地址、from_name收件人、from_tel收件人电话)、from_addr收件人地址、temp_id电子面单模板ID、siid云打印机编号、count商品数量
* @return bool|mixed
*/
public function dump($merId,$data)
{
if (!$data['count']) throw new ValidateException('商品数量缺失');
if (!$data['temp_id']) throw new ValidateException('电子面单模板ID缺失');
if (!$data['to_addr'] || !$data['to_tel'] || !$data['to_name']) throw new ValidateException('寄件人信息缺失');
if (!$data['from_name'] || !$data['from_tel'] || !$data['from_addr']) throw new ValidateException('收件人信息缺失');
if (!$data['com']) throw new ValidateException('快递公司编码缺失');
$param = $data;
$vserion = [];
//修改没有打印机的时候print_type=IMAGE就会返回面单图片
if (!$data['siid']) {
$vserion = ['version:v1.1'];
$param['print_type'] = 'IMAGE';
}
$exp = app()->make(ExpressRepository::class)->getWhere(['code' => $data['com']]);
$expressData = app()->make(ExpressPartnerRepository::class)->getSearch(['express_id' => $exp['id'], 'mer_id' => $merId,])->find();
if ($exp['partner_id'] == 1) {
if (!$expressData) throw new ValidateException('未查询到快递公司的月结账号');
$param['partner_id'] = $expressData['account'];
}
if ($exp['partner_key'] == 1) $param['partner_key'] = $expressData['key'];
if ($exp['net'] == 1) $param['net'] = $expressData['net_name'];
if ($exp['check_man'] == 1) $param['checkMan'] = $expressData['check_man'];
if ($exp['partner_name'] == 1) $param['partner_name'] = $expressData['partner_name'];
if ($exp['is_code'] == 1) $param['code'] = $expressData['code'];
//修改增加header版本号兼容旧版和新版
return $this->accessToken->httpRequest(self::EXPRESS_DUMP, $param, 'POST', true, $vserion);
}
}