nebijokit/omniva

用于与 Omniva API 通信的库

v0.2.1 2018-07-31 08:11 UTC

This package is not auto-updated.

Last update: 2024-09-23 17:47:37 UTC


README

PHP 封装了快递 Omniva 集成

Build Status Maintainability Total Downloads

SensioLabsInsight Scrutinizer Code Quality

示例

获取标签

返回带有编码的 PDF 和条形码的标签响应(stdClass 对象)。查看 getLabel 的 phpdoc 以了解响应结构。

$client = new Client($username, $password);
$client->getLabel($parcel);

获取取货点列表

此端点返回取货点列表。取货点可以是终端或邮局。字段 类型 决定了字段是 终端(类型:0)还是 邮局(类型:1)。

// username & password is not necessary for pickup points
$client = new Client($username, $password);

$points = $client->getPickupPoints();

创建货运并获取标签

use Omniva\Parcel;
use Omniva\Client;
use Omniva\Address;
use Omniva\Service;

$client = new Client($username, $password);

$shipment = $parcel->getShipment();
$id = $parcel->getId();

$omnivaParcel = new Parcel();
$omnivaParcel
    ->setWeight($parcel->getWeightInKg())
    ->setPartnerId($id)
    ->setComment($shipment->getRemark())
;

if ($shipment->getCodAmount()) {
    $omnivaParcel->setCodAmount($shipment->getCodAmount());
    $omnivaParcel->addService(Service::COD());
}

$sender = new Address();
$sender
    ->setName($shipment->getSender()->getName())
    ->setPhone($shipment->getSender()->getPhone())
    ->setCountryCode($shipment->getSender()->getCountry()->getCode())
    ->setCity($shipment->getSender()->getCity())
    ->setStreet($shipment->getSender()->getStreet())
    ->setPostCode($shipment->getSender()->getPostalCode())
;

if ($shipment->getSender()->getEmail()) {
    $sender->setEmail($shipment->getSender()->getEmail());
}

$omnivaParcel->setSender($sender);

$returnee = clone $sender;
$omnivaParcel->setReturnee($returnee);

$receiver = new Address();
$receiver
    ->setName($shipment->getReceiver()->getName())
    ->setCountryCode($shipment->getReceiver()->getCountry()->getCode())
;

if ($shipment->getReceiver()->getEmail()) {
    $receiver->setEmail($shipment->getReceiver()->getEmail());
}

if ($shipment->getReceiver()->getPhone()) {
    $receiver->setPhone($shipment->getReceiver()->getPhone());
}

if ($shipment->getReceiver()->isTypeTerminal()) {
    $terminal = $shipment->getReceiver()->getTerminal();

    $pickupPoint = new PickupPoint($terminal->getIdentifier());
    $pickupPoint->setType($terminal->isPostOffice() ? PickupPoint::TYPE_POST_OFFICE : PickupPoint::TYPE_TERMINAL);

    $receiver->setPickupPoint($pickupPoint);

    if ($shipment->getReceiver()->getPhone()) {
        $omnivaParcel->addService(Service::SMS());
    }

    if ($shipment->getReceiver()->getEmail()) {
        $omnivaParcel->addService(Service::EMAIL());
    }
} else {
    $receiver
        ->setCity($shipment->getReceiver()->getCity())
        ->setStreet($shipment->getReceiver()->getStreet())
        ->setPostCode($shipment->getReceiver()->getPostalCode())
    ;
}
$omnivaParcel->setReceiver($receiver);

$response = $client->createShipment($omnivaParcel);

$trackingNumber = $response->savedPacketInfo->barcodeInfo->barcode;
$parcel->setTrackingNumber($trackingNumber);
$omnivaParcel->setTrackingNumber($trackingNumber);

$response = $client->getLabel($omnivaParcel);

// PDF content
$content = $response->successAddressCards->addressCardData->fileData;

进一步开发的想法

  • 实现 Client 跟踪
  • 添加 Symfony\Constraint 用于数据验证