oliverbj / cord

使用HTTP服务无缝集成到CargoWise One的eAdapter。

2.0.1 2023-06-20 12:41 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

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 – 仅检索已发布或未发布的文档。此过滤器的值是:TrueFalse。此过滤器只能指定一次。
  • 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可以是PartialKey。默认是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)。有关更多信息,请参阅许可文件