nebijokit / omniva
用于与 Omniva API 通信的库
v0.2.1
2018-07-31 08:11 UTC
Requires
- php: >=7.1
- ext-soap: *
- guzzlehttp/guzzle: ^6.3
- myclabs/php-enum: ^1.6
Requires (Dev)
- phpspec/phpspec: ^4.3
This package is not auto-updated.
Last update: 2024-09-23 17:47:37 UTC
README
PHP 封装了快递 Omniva 集成。
示例
获取标签
返回带有编码的 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 用于数据验证