pdeans/miva-provision

此包已被废弃,不再维护。没有建议的替代包。

Miva远程配置PHP库。

v2.1.3 2023-06-03 20:54 UTC

This package is auto-updated.

Last update: 2023-06-03 20:56:39 UTC


README

此包已被废弃,不再维护。

Miva远程配置

PHP库,包含与Miva远程配置模块交互的完整工具集。库组件包括创建Miva配置xml标记、发送配置xml请求和捕获配置xml响应的工具。

安装

通过Composer安装。

composer require pdeans/miva-provision

使用方法

首先,创建一个新的“配置”管理器实例。管理器实例需要三个参数

  1. 商店代码 - 店铺设置 > 店铺代码
  2. XML请求URL - 域设置 > 远程配置 > XML请求URL
  3. 访问令牌 - 域设置 > 远程配置 > 访问令牌
use pdeans\Miva\Provision\Manager as Provision;

$store_code = 'PS';
$url = 'http://www.example.com/mm5/json.mvc?Function=Module&Module_Code=remoteprovisioning&Module_Function=XML';
$token = '12345';

$prv = new Provision($store_code, $url, $token);

创建管理器实例后,可以使用它来生成配置xml标记以及发送配置请求。

创建配置XML标记

该库使用简单且功能丰富的pdeans XML Builder包来轻松生成Miva配置标签。

使用配置标签生成器

使用create方法生成配置xml标签。create方法将根元素(配置标签名称)的名称作为第一个参数,将一个关联数组作为第二个参数,该数组包含构建根属性元素和/或子元素的数据。

以下是一个简单的示例

$xml = $prv->create('Category_Add', [
    '@tags' => [
        'Code' => 'Tools',
        'Name' => $prv->cdata('Class Tools and Skill Kits'),
    ],
]);

这将生成以下xml

<Category_Add>
    <Code>Tools</Code>
    <Name><![CDATA[Class Tools and Skill Kits]]></Name>
</Category_Add>

父/子元素

注意上述示例中@tags数组下的数组键值是如何工作的。键表示xml元素名称,值表示xml元素值。也可以根据此模式嵌套子标签,父元素由数组键表示,数组值由键值对组成的子元素数组。

元素值助手

可以使用cdata助手方法将元素值包裹在<![CDATA[]]>标签内,而可以使用decimal助手方法将十进制数字格式化为标准十进制格式,默认保留两位小数并去除逗号。decimal助手方法接受一个可选的第二参数来设置精度。

// Output: <![CDATA[Class Tools and Skill Kits]]>
echo $prv->cdata('Class Tools and Skill Kits');

// Output: 49.00
echo $prv->decimal(49.0000000);

// Output: 49.001
echo $prv->decimal(49.0005, 3);

保留键

@tags键代表xml构建器使用的三个保留键之一(每个都包含快捷键对应物),用于解析和生成xml。保留键如下

@attributes Key 快捷键: @a

使用 @attributes 键来创建 XML 元素属性。同样,@a 键也被支持作为 @attributes 键的快捷方式。

示例

$xml = $prv->create('CategoryProduct_Assign', [
    '@attributes' => [
        'category_code' => 'Food',
        'product_code'  => 'ale-gallon',
    ],
]);

$xml = $prv->create('CategoryProduct_Assign', [
    '@a' => [
        'category_code' => 'Food',
        'product_code'  => 'ale-gallon',
    ],
]);

生成的 XML

<CategoryProduct_Assign category_code="Food" product_code="ale-gallon"/>

@tags 键 快捷方式: @t

@tags 键接受一个关联数组的数据来构建根元素的孩子。同样,@t 键也被支持作为 @tags 键的快捷方式。

示例

$xml = $prv->create('ProductAttribute_Add', [
    '@a' => [
        'product_code' => 'chest',
    ],
    '@tags' => [
        'Code'   => 'lock',
        'Type'   => 'select',
        'Prompt' => $prv->cdata('Lock'),
    ],
]);

$xml = $prv->create('ProductAttribute_Add', [
    '@a' => [
        'product_code' => 'chest',
    ],
    '@t' => [
        'Code'   => 'lock',
        'Type'   => 'select',
        'Prompt' => $prv->cdata('Lock'),
    ],
]);

生成的 XML

<ProductAttribute_Add product_code="chest">
    <Code>lock</Code>
    <Type>select</Type>
    <Prompt><![CDATA[Lock]]></Prompt>
</ProductAttribute_Add>

@value 键 快捷方式: @v

@value 键明确设置 XML 元素的值。通常,这仅适用于需要同时设置属性和值的 XML 元素。同样,@v 键也被支持作为 @value 键的快捷方式。

示例

$xml = $prv->create('Module', [
    '@attributes' => [
        'code' => 'customfields',
        'feature' => 'fields_prod',
    ],
    '@tags' => [
        'ProductField_Value' => [
            '@attributes' => [
                'product' => 'chest',
                'field' => 'armor_type',
            ],
            '@value' => 'wood',
        ],
    ],
]);

$xml = $prv->create('Module', [
    '@a' => [
        'code' => 'customfields',
        'feature' => 'fields_prod',
    ],
    '@t' => [
        'ProductField_Value' => [
            '@a' => [
                'product' => 'chest',
                'field' => 'armor_type',
            ],
            '@v' => 'wood',
        ],
    ],
]);

生成的 XML

<Module code="customfields" feature="fields_prod">
    <ProductField_Value product="chest" field="armor_type">wood</ProductField_Value>
</Module>

请注意,@tags 键仅在标签数据关联数组的第一个级别使用,因为它代表子标签数据,而其他两个保留键可以在关联数组的任何子级别使用。

重复标签

有时在 XML 中使用重复的标签,这与关联数组的键值对不兼容。为了避免这种情况,元素名仍然作为数组键传递,但是数组值由一个包含标签数据的数组序列组成。

$xml = $prv->create('Order_Add', [
    '@t' => [
        'Charges' => [
            'Charge' => [
                [
                    'Type' => 'SHIPPING',
                    'Description' => 'Shipping: UPS Ground',
                    'Amount' => 5.95
                ],
                [
                    'Type' => 'TAX',
                    'Description' => 'Sales Tax',
                    'Amount' => 2.15
                ],
            ],
        ],
    ],
]);

生成的 XML

<Order_Add>
    <Charges>
        <Charge>
            <Type>SHIPPING</Type>
            <Description>Shipping: UPS Ground</Description>
            <Amount>5.95</Amount>
        </Charge>
        <Charge>
            <Type>TAX</Type>
            <Description>Sales Tax</Description>
            <Amount>2.15</Amount>
        </Charge>
    </Charges>
</Order_Add>

自闭合标签

要生成不带属性的空闭合元素,请将数组值传递为 null

$xml = $prv->create('Order_Add', [
    '@t' => [
        'TriggerFulfillmentModules' => null,
    ],
]);

生成的 XML

<Order_Add>
    <TriggerFulfillmentModules />
</Order_Add>

发送配置请求

配置请求通过 send 方法发送。

$response = $prv->send($xml);

默认情况下,send 方法将自动在传递给方法的方法数据前添加 Store(带有当前存储代码)和 Provision 标签。如果您希望省略此功能,只需将 true 作为第二个参数传递。

$response = $prv->send($xml, true);

附加标签助手

以下附加助手可以帮助准备要发送的配置请求 XML。如上所述,send 方法默认会调用 addStoreaddProvision 助手方法,在发送之前自动准备 XML 数据。

// Appends <Domain></Domain> element to xml
$xml = $prv->addDomain($xml);

// Appends <Store code="store code"></Store> element to xml
$xml = $prv->addStore($xml);

// Appends <Provision></Provision> element to xml
$xml = $prv->addProvision($xml);

配置响应

每次通过 send 方法发送配置请求时,都会返回一个响应对象。响应对象是 Zend 框架的 Diactoros 响应对象的一个实例,该对象实现了 PSR-7 HTTP 消息接口。

助手方法

管理实例还包括助手方法,以便在需要时轻松返回或交换存储代码、请求 URL 或访问令牌。助手方法示例

// Get store code
$store_code = $prv->getStore();

// Set store code
$prv->setStore('store code');

// Get provision request url
$url = $prv->getUrl();

// Set provision request url
$prv->setUrl('request url');

// Get provision access token
$token = $prv->getToken();

// Set provision access token
$prv->setToken('access token');

版本说明

版本 2 当前需要 PHP 5.4 或更高版本,但是如果需要支持 PHP 5.3,则可以使用版本 1。