oliverbj / cord
使用HTTP服务无缝集成到CargoWise One的eAdapter。
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.4
- illuminate/contracts: ^9.0|^10.0
- spatie/array-to-xml: ^3.1
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-08 22:30:27 UTC
README
Cord提供了一种表达性强、可链式调用且易于使用的API,用于通过HTTP Web服务与CargoWise One的eAdapter进行交互。
安装
您可以通过composer安装此包
composer require oliverbj/cord
您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="cord-config"
这是发布配置文件的内容
return [ 'eadapter_connection' => [ 'url' => env('CORD_URL', ''), 'username' => env('CORD_USERNAME', ''), 'password' => env('CORD_PASSWORD', ''), ], ];
用法
设置环境
为了使用Cord,您必须指定CargoWise One eAdapter服务的适当登录详细信息
CORD_URL= CORD_USERNAME= CORD_PASSWORD=
模块
Cord包含以下模块的连接性
- 预订
booking()
- 运输
shipment()
- 海关
custom()
- 组织
organization()
- 公司
company()
对所有类似模块,您必须调用run()
方法以从eAdapter获取实际的响应。eAdapter的响应将以JSON格式返回。
//Get a shipment Cord::shipment('SMIA12345678') ->run(); //Get a brokerage job Cord::custom('BATL12345678') ->run(); //Get an organization Cord::organization('SAGFURHEL') ->run(); //Get a company Cord::company('CPH') ->run();
组织 - 添加地址
Cord支持向组织添加地址的选项。
Cord::organization('SAGFURHEL') ->addAddress([ 'code' => 'MAIN STREET NO. 1', 'addressOne' => 'Main Street', 'addressTwo' => 'Number One', 'country' => 'US', 'city' => 'Anytown', 'state' => 'NY', 'postcode' => '12345', 'relatedPort' => 'USNYC', 'capabilities' => [ 'AddressType' => 'OFC', 'IsMainAddress' => 'false', ] ]);
文档 / eDocs
CargoWise One中的大多数实体都有一个文档标签页(称为eDocs)。您可以使用Cord通过withDocuments()
方法访问这些文档。当应用文档方法时,Cord将只返回包含指定实体文档的DocumentCollection
。
//Get all the available documents from a shipment file Cord::shipment('SMIA12345678') ->withDocuments() ->run();
当与CargoWise One的eDocs交互(获取文档)时,我们可以在请求中提供过滤器
//Get only documents from a shipment file that is the type "ARN" Cord::shipment('SMIA92838292') ->withDocuments() ->filter('DocumentType', 'ARN') ->filter('IsPublished', True) ->run();
可用的过滤器有
- DocumentType – 仅检索与指定的文档类型匹配的文档。
- IsPublished – 仅检索已发布或未发布的文档。此过滤器的值是:
True
和False
。此过滤器只能指定一次。 - SaveDateUTCFrom – 仅检索在指定日期/时间或之后添加或修改的文档(以UTC时间提供)。此过滤器只能指定一次。
- SaveDateUTCTo – 仅检索在指定日期/时间或之前添加或修改的文档(以UTC时间提供)。此过滤器只能指定一次。
- CompanyCode – 仅检索与指定公司或非公司特定的文档相关。默认行为是不使用此类型进行过滤时返回所有文档,无论公司隶属关系如何。
- BranchCode – 仅检索与指定分支代码相关的文档。
- DepartmentCode – 仅检索与指定部门代码相关的文档。
上传文档
类似于获取文档,您也可以使用addDocument
将文档上传到CargoWise One的文件中
Cord::shipment('SJFK21060014') ->addDocument( file_contents: base64_decode(file_get_contents("myfile.pdf")), name: 'myfile.pdf', type: 'MSC' description: '(Optional)', isPublished: true //default is *false* ) ->run();
Cord还支持与CargoWise One的事件引擎进行交互,这意味着我们可以向作业添加事件
Cord::shipment('SJFK21060014') ->addEvent( date: date('c'), type: 'DIM', reference: 'My Reference', isEstimate: true //default is *false* ) ->run();
原生查询组件
您可以查询eAdaptor提供的所有受支持的原生查询组件。与所有原生查询组件类似的是,您可以使用criteriaGroup()
方法来“查询”结果。
示例:当查询组织时,您可以使用criteriaGroup()
指定不同的标准组来过滤结果
Cord::organization() ->criteriaGroup([ [ 'Entity' => 'OrgHeader', 'FieldName' => 'Code', 'Value' => 'US%' ], [ 'Entity' => 'OrgHeader', 'FieldName' => 'IsBroker', 'Value' => 'True' ], ], type: "Partial") ->run();
criteriaGroup()
方法接受不同标准的嵌套数组。上面的代码将搜索所有以US
开头的组织代码且组织是经纪人的组织。参数type
可以是Partial
或Key
。默认是Key
。
上面代码生成的XML是
<Native xmlns="http://www.cargowise.com/Schemas/Native"> <Body> <Organization> <CriteriaGroup Type="Partial"> <Criteria Entity="OrgHeader" FieldName="Code">US%</Criteria> <Criteria Entity="OrgHeader" FieldName="IsBroker">True</Criteria> </CriteriaGroup> </Organization> </Body> </Native>
您可以根据需要定义任意数量的标准组
Cord::organization() ->criteriaGroup([ [ 'Entity' => 'OrgHeader', 'FieldName' => 'Code', 'Value' => 'US%' ], ], type: "Partial") ->criteriaGroup([ [ 'Entity' => 'OrgHeader', 'FieldName' => 'IsBroker', 'Value' => 'True' ], ], type: "Partial") ->run();
信息:多个标准组充当“或”语句。
上面的多个标准组将生成以下XML
<Native xmlns="http://www.cargowise.com/Schemas/Native"> <Body> <Organization> <CriteriaGroup Type="Partial"> <Criteria Entity="OrgHeader" FieldName="Code">US%</Criteria> </CriteriaGroup> <CriteriaGroup Type="Partial"> <Criteria Entity="OrgHeader" FieldName="IsBroker">True</Criteria> </CriteriaGroup> </Organization> </Body> </Native>
多个连接
有时您可能需要连接到多个eAdapters。这可以通过使用withConfig
方法完成
$config = "my_custom_connection"; Cord::shipment('SJFK21060014') ->withConfig($config) ->run();
然后您可以将连接详细信息添加到您的config/cord.php
文件中
return [ 'base' => [ 'eadapter_connection' => [ 'url' => env('CORD_URL', ''), 'username' => env('CORD_USERNAME', ''), 'password' => env('CORD_PASSWORD', ''), ], ], 'my_custom_connection' => [ 'eadapter_connection' => [ 'url' => env('CORD_URL', ''), 'username' => env('CORD_USERNAME', ''), 'password' => env('CORD_PASSWORD', ''), ], ], ];
URL不一定需要直接指向eAdaptor URL。它也可以指向中间件,只要中间件将请求转发到eAdaptor并返回响应即可。
以XML形式响应
如果您想直接以XML形式返回原始eAdaptor响应,请在调用run()
方法之前调用toXml()
方法
Cord::shipment('SJFK21041242')->toXml()->run();
调试
有时您可能想在将XML请求发送到eAdapter之前检查它。为此,您只需调用inspect()
方法。这将返回XML字符串表示
$xml = Cord::custom('BJFK21041242') ->documents() ->filter('DocumentType', 'ARN') ->inspect(); return response($xml, 200, ['Content-Type' => 'application/xml']);
测试
composer test
变更日志
有关最近更改的更多信息,请参阅变更日志
贡献
有关详细信息,请参阅贡献指南
安全漏洞
请参阅我们的安全策略,了解如何报告安全漏洞。
致谢
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件