laravel|laravel物流地址查询


本文目录

  • 一、物流查询管理
    • 1.1 创建物流查询路由
    • 1.2 物流查询控制器方法
    • 1.3 测试效果
  • 二、封装物流类
  • 三、测试效果
【laravel|laravel物流地址查询】
一、物流查询管理 我们使用快递鸟平台,相关文档及使用可以上它的官网查看。我们可以使用它的沙箱环境进行测试。
注册,登陆之后
laravel|laravel物流地址查询
文章图片

laravel|laravel物流地址查询
文章图片

1.1 创建物流查询路由
// 物流查询 $api->get('orders/{order}/express', [OrderController::class, 'express']);

laravel|laravel物流地址查询
文章图片

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

laravel|laravel物流地址查询
文章图片

1.3 测试效果 laravel|laravel物流地址查询
文章图片

二、封装物流类 像这样物流的查询,我们写在订单里,如果在其他功能板块中也涉及到查询的话,那么又要写一遍,所以我们给它封装起来。
config下创建物流配置文件express.php
env('EXPRESS_EBUSINESS_ID'), // APP KEY 'Appkey' => env('EXPRESS_APP_KEY'), ];

laravel|laravel物流地址查询
文章图片

接着在.env中写入:
# 快递查询配置 EXPRESS_EBUSINESS_ID=你的商户id EXPRESS_APP_KEY=你的应用key

laravel|laravel物流地址查询
文章图片

app文件夹下新建Facades文件夹,再新建Express文件夹,里面新建Express.php快递类。在Express文件夹下新建文件夹Facade,里面创建Express.php,我们就认为这个类是快递类的门面。
写入:

laravel|laravel物流地址查询
文章图片

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

laravel|laravel物流地址查询
文章图片

我们已经将查询快递封装成类,并且也自定义了门面,所以我们在订单那里进行快递查询时修改:
/** * 物流查询 */ 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); }

laravel|laravel物流地址查询
文章图片

三、测试效果 laravel|laravel物流地址查询
文章图片

在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。

    推荐阅读