laravel|laravel物流地址查询
本文目录
- 一、物流查询管理
-
- 1.1 创建物流查询路由
- 1.2 物流查询控制器方法
- 1.3 测试效果
- 二、封装物流类
- 三、测试效果
一、物流查询管理 我们使用快递鸟平台,相关文档及使用可以上它的官网查看。我们可以使用它的沙箱环境进行测试。
注册,登陆之后
文章图片
文章图片
1.1 创建物流查询路由
// 物流查询
$api->get('orders/{order}/express', [OrderController::class, 'express']);
文章图片
1.2 物流查询控制器方法
// 物流查询
public function express(Order $order) {$EBusinessID = 'test1730089';
$Appkey = '581b0c9d-1a45-46a6-81e1-cd4ef3dd28cf';
// $ReqURL = 'https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx';
// 正式地址
$ReqURL = 'http://www.kdniao.com/UserCenter/v2/SandBox/SandboxHandler.ashx?action=CommonExcuteInterface';
// 沙箱测试地址// 准备请求参数
$requestData = "https://www.it610.com/article/{'OrderCode':'', 'ShipperCode': 'SF', 'LogisticCode':'1234561'}";
$datas = array(
'EBusinessID' => $EBusinessID,
'RequestType' => '1002',
'RequestData' => urlencode($requestData),
'DataType' => 2,
);
$datas['DataSign'] = $this->encrypt($requestData, $Appkey);
// 发送请求
$response = Http::asForm()->post($ReqURL, $datas);
// return json_decode($response);
$resData = https://www.it610.com/article/json_decode(json_decode($response, true)['ResponseData'], true);
return $this->response->array($resData);
}// sign签名生成
function encrypt($data, $appkey) {return urlencode(base64_encode(md5($data.$appkey)));
}
文章图片
1.3 测试效果
文章图片
二、封装物流类 像这样物流的查询,我们写在订单里,如果在其他功能板块中也涉及到查询的话,那么又要写一遍,所以我们给它封装起来。
在
config
下创建物流配置文件express.php
: env('EXPRESS_EBUSINESS_ID'),
// APP KEY
'Appkey' => env('EXPRESS_APP_KEY'),
];
文章图片
接着在
.env
中写入:# 快递查询配置
EXPRESS_EBUSINESS_ID=你的商户id
EXPRESS_APP_KEY=你的应用key
文章图片
在
app
文件夹下新建Facades
文件夹,再新建Express
文件夹,里面新建Express.php
快递类。在Express
文件夹下新建文件夹Facade
,里面创建Express.php
,我们就认为这个类是快递类的门面。写入:
文章图片
App\Facades\Express\Express.php
写入真实类:EBusinessID = $config['EBusinessID'];
$this->AppKey = $config['AppKey'];
$this->mode = $config['mode'] ?? 'prod';
}// 物流查询ShipperCode=>物流公司, LogisticCode=>物流单号
public function track($ShipperCode, $LogisticCode)
{// 准备请求参数
$requestData = "https://www.it610.com/article/{'OrderCode':'', 'ShipperCode': '{
$ShipperCode}', 'LogisticCode':'${LogisticCode}'}";
// 发送请求
$response = Http::asForm()->post(
$this->url('track'),
$this->formatReqData($requestData, '1002')
);
return $this->formatResData($response);
}/**
* 返回API url
*/
protected function url($type)
{$url = [
'track' => [
'dev' => 'http://www.kdniao.com/UserCenter/v2/SandBox/SandboxHandler.ashx?action=CommonExcuteInterface', // 开发环境url
'prod' =>'https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx' // 生产环境url
]
];
return $url[$type][$this->mode];
}/**
* 格式化请求数据
*/
protected function formatReqData($requestData, $RequestType)
{$datas = array(
'EBusinessID' => $this->EBusinessID,
'RequestType' => $RequestType,
'RequestData' => urlencode($requestData),
'DataType' => 2,
);
$datas['DataSign'] = $this->encrypt($requestData);
return $datas;
}/**
* 格式化响应数据
*/
protected function formatResData($result)
{$result = json_decode($result, true);
if ($result['Success'] == false) {return $result['ResponseData'];
}
$result2 = json_decode($result['ResponseData'], true);
if ($result2['Success'] == false) {return $result2['Reason'];
}
return $result2;
}// sign签名生成
protected function encrypt($data)
{return urlencode(base64_encode(md5($data . $this->AppKey)));
}
}
弄完门面后需要在
app\Providers\AppServiceProvider.php
注册:// 注册自定义门面
$this->app->singleton('Express', function () {return new Express();
});
文章图片
我们已经将查询快递封装成类,并且也自定义了门面,所以我们在订单那里进行快递查询时修改:
/**
* 物流查询
*/
public function express(Order $order) {if ($order->status != 3 || $order->status != 4) {return $this->response->errorBadRequest('订单暂无物流信息!');
}
// 未注册门面使用new
// $express = new Express();
// $result = $express->track('SF','1234561');
// 沙箱测试快递 以及快递单号,快递的简称可以在快递鸟上按照它给的格式传
// $result = $express->track($order->express_type,$order->express_no);
// 正式发货的订单号里去拿// 我们注册了自定义门面 可以不使用new了
$result = Express::track('SF','1234561');
// 沙箱测试快递 以及快递单号,快递的简称可以在快递鸟上按照它给的格式传
// Express::track($order->express_type,$order->express_no);
// 正式发货的订单号里去拿
if (!is_array($result)) {return $this->response->errorBadRequest($result);
}return $this->response->array($result);
}
文章图片
三、测试效果
文章图片
在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。
推荐阅读
- laravel框架泛解
- 2021-05-22|2021-05-22 - 草稿
- Laravel|Laravel 实战项目(鲜花网)
- Laravel+vue公有/私有广播实战
- laravel|laravel 添加扩展包步骤
- 完全不一样的|完全不一样的 LaravelAdmin Windows Docker 搭建篇
- Laravel中schedule调度的运行机制
- 生日(二)
- laravel 8 修改默认的paginate分页模板
- 是的没错,我就是抄的。一个像|是的没错,我就是抄的。一个像 Laravel 那样好用的 go 语言的 SQL 查询构造器