Prestashop在webservice中过滤date_add

时间:2017-04-04 11:10:29

标签: prestashop

我是新手,我的网络服务存在问题。

当我尝试通过date_add检索客户过滤时,我收到此错误:

<message><![CDATA[This filter does not exist. Did you mean: "deleted"? The full list is: "id", "id_default_group", "id_lang", "newsletter_date_add", "ip_registration_newsletter", "last_passwd_gen", "secure_key", "deleted", "passwd", "lastname", "firstname", "email", "id_gender", "birthday", "newsletter", "optin", "website", "company", "siret", "ape", "outstanding_allow_amount", "show_public_prices", "id_risk", "max_payment_days", "active", "note", "is_guest", "id_shop", "id_shop_group"]]></message>

这是我的代码:

$yesterday = date("Y-m-d H:i:s", time() - 60 * 60 * 24);

$webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG);

// Qui imposto le opzion dell'array per il Webservice: in questo caso i clienti e setto che il formato è json
$opt = array( 'resource' => 'customers',
                        'filter[date_add]' => '['.$yesterday.']&date=1',
                        'display'  => 'full',
                        'output_format' => 'JSON'
                        );

// faccio la chiamata
$xml = $webService->get($opt);

我被卡住了,我不知道该怎么办!!!任何帮助表示赞赏

2 个答案:

答案 0 :(得分:0)

查看Customer类webservice参数,没有date_add:

protected $webserviceParameters = array(
        'fields' => array(
            'id_default_group' => array('xlink_resource' => 'groups'),
            'id_lang' => array('xlink_resource' => 'languages'),
            'newsletter_date_add' => array(),
            'ip_registration_newsletter' => array(),
            'last_passwd_gen' => array('setter' => null),
            'secure_key' => array('setter' => null),
            'deleted' => array(),
            'passwd' => array('setter' => 'setWsPasswd'),
        ),
        'associations' => array(
            'groups' => array('resource' => 'group'),
        )
    );

如果您有权访问服务器安装,则可以将date_add字段添加到webserviceParameters。 或者函数getWebserviceObjectList来改变行为。

如果您无权访问服务器安装,则可以使用sort获取最新客户,直至找到您已有的客户。您可以使用limit在foreach或while循环中使用。

编辑经过一些测试并检查发生了什么: 首先,我们不需要将字段date_add添加到$webserviceParameters

请求应为:

$opt = array( 'resource' => 'customers',
               'filter[date_add]' => '['.$begin.','.$finish.']',
               'date' => 1,
               'display'  => 'full',
               'output_format' => 'JSON'
              );

如果您只向过滤器添加一个日期,它将尝试仅匹配该日期。

然后你需要更改第284行的PSWebServiceLibrary.php并添加字段'date':

$params = array('filter', 'display', 'sort', 'limit', 'id_shop', 'id_group_shop', 'date');

现在它应该工作了。我测试了自己。

编辑2: 这是我的完整测试,在更改了我在PSWebserviceLibrary.php中提到的行之后,这将在间隔日期使用date_add检索我的客户。

<?php
require_once( 'PSWebServiceLibrary.php' );

echo 'starting<br />'.PHP_EOL;

try {
    // creating web service access
    $webService = new PrestaShopWebservice(MY_BASE_URL, WS_KEY, true);

    $yesterday = date("Y-m-d", time() - 60 * 60 * 24);
    $begin = date("Y-m-d", time() - 60 * 60 * 24 * 30);

    $opt = array( 'resource' => 'customers',
                        'filter[date_add]' => '['.$begin.','.$yesterday.']',
                        'date' => 1,
                        'display'  => 'full',
                        'output_format' => 'JSON'
                        );

    //Retrieving the XML data
    $xml = $webService->get($opt);
}
catch (PrestaShopWebserviceException $ex) {
    // Shows a message related to the error
    echo 'Other error: <br />' . $ex->getMessage();
}
?>

答案 1 :(得分:0)

首先:谢谢

我修改了你的指示,但结果没有改变,仍然给我同样的错误。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    self.view.endEditing(true)
    resultLabel.text = ""
}

我无法理解