meteor/shipper

Shipper 实现方式

v1.0.8-beta 2023-01-24 04:31 UTC

README

Shipper tests Latest Stable Version Total Downloads License

Laravel Shipper 是围绕 Shipper API 的包装器。

安装

您可以通过 composer 安装此包

composer require meteor/shipper

迁移定制

如果您不打算使用 Shipper 的默认迁移,您应该在 App\Providers\AppServiceProvider 类的 register 方法中调用 Shipper::ignoreMigrations 方法。您可以使用 vendor:publish Artisan 命令导出默认迁移

php artisan vendor:publish --tag=meteor.shipper.migrations

发布配置文件

您可以使用以下命令发布配置文件

php artisan vendor:publish --provider="Meteor\Shipper\ShipperServiceProvider" --tag="meteor.shipper.config"

配置

在您可以使用 Shipper API 之前,您需要设置您的 API 密钥。您可以在 .env 文件中设置 SHIPPER_API_KEY 环境变量来完成此操作。如果您没有 API 密钥,您可以从 这里 获取一个。

SHIPPER_API_KEY=your-api-key

用法

要初始化 Shipper API,您可以使用 Shipper 面具。

use Meteor\Shipper\Facades\Shipper;

$shipper = Shipper::make();

make() 接受两个可选参数:baseUrlapiKey。如果您不传递任何参数,它将使用 SHIPPER_API_KEY 环境变量。

$shipper = Shipper::make('your-api-key', 'https://api.shipper.id');

物流

创建物流实例

$logistic = $shipper->logistic();
列出所有物流
$logistic->list()->json();

位置

创建位置实例

$location = $shipper->location();
搜索位置
$response = $location->search(
    keyword: '15510',
    admLevel: 5, // optional
    options: ['limit' => 5] // optional
)->json();
$location->getCountries()->json();
$location->getCountry()->json();
$location->getProvinces()->json();
$location->getProvince()->json();
$location->getProvincesByCountryId()->json();
$location->getCitiesByProvinceId()->json();
$location->getCities()->json();
$location->getCity()->json();
$location->getSuburbs()->json();
$location->getSuburbsByCityId()->json();
$location->getSuburb()->json();
$location->getAreasBySuburbId()->json();
$location->getAreas()->json();
$location->getArea()->json();

定价

创建定价实例

$pricing = $shipper->pricing();

注意:latlng 必须是字符串格式

$domesticBody = [
    'cod' => false,
    'destination' => [
        'area_id' => 12284,
        'lat' => '-6.9189281',
        'lng' => '107.617093',
    ],
    'origin' => [
        'area_id' => 12441,
        'lat' => '-6.3179073',
        'lng' => '106.9506175'
    ],
    'for_order' => true,
    'height' => 6.54,
    'length' => 6.54,
    'width' => 6.54,
    'weight' => 0.18,
    'item_value' => 134950,
    'sort_by' => ['final_price']
];

$internationalBody = [];
国内
$pricing->domestic(body: $domesticBody)->json();
按费率国内

可用费率

  • 即时
  • 常规
  • 快递
  • 卡车
  • 当天
$pricing->domesticByRate(rateType: 'instant', body: $domesticBody)->json();
国际
$pricing->international(body: $internationalBody)->json();

订单

创建订单实例

$location = $shipper->order();
创建订单

注意:phone_number 不能包含 +0 前缀。因此,如果您的电话号码是 +628811223344308111223344,则应删除 +0 前缀。您可以使用 shipper_phone_format 辅助函数来格式化您的电话号码。

$response = $order->create([
    'consignee' =>  [
        'name' => 'Mr. Jonson H',
        'phone_number' => '6288112233443'
    ],
    'consigner' =>  [
        'name' => 'Aslam H',
        'phone_number' => '6281901560666'
    ],
    'courier' => [
        'cod' => false,
        'rate_id' => 15,
        'use_insurance' => false
    ],
    'coverage' => 'domestic',
    'destination' => [
        'address' => 'Jl. Joni Afternoon, gg. Jonwik no 100A RT 08 RW 07 Kec. Sumur Bawah, Kota Melati, Jawa Jonggol, 50112',
        'area_id' => 12284,
        'lat' => '-6.9189281',
        'lng' => '107.617093',
        'email_address' => 'stark@mail.me',
        'company_name' => 'Marvel'
    ],
    'origin' => [
        'address' => 'Jl monyet kp rangga rt 11 rw 12 no 55 kode pos 17445 kel. jatimakmur kec. jatisolo',
        'area_id' => 12441,
        'lat' => '-6.3179073',
        'lng' => '106.9506175',
        'email_address' => 'spiderman@mail.com',
        'company_name' => 'Foo'
    ],
    'package' => [
        'items' =>  [
            [
                'name' => 'Daging Ikan 1kg',
                'price' => 10000,
                'qty' => 1
            ]
        ],
        'package_type' => 2,
        'height' => 4.1,
        'length' => 4.1,
        'width' => 4.1,
        'weight' => 0.03,
        'price' => 2000
    ],
    'payment_type' => 'postpay'
])->json();
$order->detail('order-id')->json();
$order->trackingStatus('status-id')->json();
$order->availableOrders()->json();
$order->update('order-id', [])->json();
$order->cancel('order-id', [])->json();
取货
$pickup = $shipper->pickup();

$pickup->create([])->json();
$pickup->cancel([])->json();
$pickup->createWithTimeslot([])->json();
$pickup->getTimeSlots()->json();

辅助函数

shipper_phone_format
shipper_phone_format('08111223344'); // 628111223344
shipper_phone_format('+628111223344'); // 628111223344
shipper_categories
shipper_categories(); // ['domestic', 'international']
shipper_rates
shipper_rates(); // ['instant', 'regular', 'express', 'trucking', 'same-day']