2017-04-04 94 views
1

我是新来的,并且我遇到了webservice的问题。webservice中的Prestashop过滤器date_add

当我尝试检索客户通过过滤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); 

我坚持,我不知道该怎么办! !任何帮助表示赞赏

回答

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循环中使用。

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

请求应该是:

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

如果只添加一个日期过滤器,它会尝试只匹配日期。

然后,你需要改变PSWebServiceLibrary.php在284行,并添加字段“日期”:

$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(); 
} 
?> 
+0

谢谢合作,但仍然有 –

+0

你有什么想法的问题? –

+0

你在'filter [date_add]'里面有''date = 1''。尝试添加到数组。因为在webservice中如果不是'(!empty($ this-> urlFragments ['date'])&& $ this-> urlFragments ['date'])'它将从可用字段中删除date_add – sadlyblue

0

首先:感谢

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

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'), 
/** inizio modifica aggiunta per il webservice */ 
     'date_add' => array(), 
/** fine della modifica */ 
    ), 
    'associations' => array(
     'groups' => array('resource' => 'group'), 
    ) 
); 

我无法理解