2015-05-07 10 views
6

Ho bisogno REST API per creare cliente in magnete per questo ho seguito questo tutorial http://www.authenticdesign.co.uk/extending-magento-rest-api-v2/personalizzato API REST in Magento

ho seguito passo dopo passo, ma quando ho testare l'API sul cliente resto mi dà: {"messages":{"error":[{"code":404,"message":"Request does not match any route."}]}}

Non ho idea di dove sto sbagliando. Aiutami qui come sono molto nuovo a Magento, nonché per PHP.

I passi sono:

1. Estensione Abilitato al (/ etc/modulo app/Custom_Restapi.xml)

<config> 
    <modules> 
     <Custom_Restapi> 
      <active>true</active> 
      <codePool>local</codePool> 
     </Custom_Restapi_Groups> 
    </modules> 
</config> 

2. config.xml a (app/code/local /Custom/Restapi/etc/config.xml)

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Custom_Restapi> 
      <version>0.1.0.0</version> 
     </Custom_Restapi> 
    </modules> 
    <global> 
     <models> 
      <restapi> 
       <class>Custom_Restapi_Model</class> 
      </restapi> 
     </models> 
    </global> 
</config> 

3. api2.xml a (app/code/local/Custom/RestAPI/etc/api2.xml)

<?xml version="1.0"?> 
<config> 
    <api2> 
     <resource_groups> 
      <restapi translate="title" module="Custom_Restapi"> 
       <title>Custom Rest API</title> 
       <sort_order>10</sort_order> 
      </restapi> 
     </resource_groups> 
     <resources> 
      <restapi translate="title" module="Custom_Restapi"> 
       <group>restapi</group> 
       <model>restapi/api2_restapi</model> 
       <title>Testing My Rest API</title> 
       <sort_order>10</sort_order> 
       <privileges> 
        <admin> 
         <create>1</create> 
        </admin> 
       </privileges> 
       <attributes translate="" module="Custom_Restapi"> 
        <firstname>First Name</firstname> 
        <lastname>Last Name</lastname> 
        <email>Email</email> 
        <password>Password</password> 
       </attributes> 
       <routes> 
        <route> 
         <route>/customer</route> 
         <action_type>collection</action_type> 
        </route> 
       </routes> 
       <versions>1</versions> 
      </restapi> 
     </resources> 
    </api2> 
</config> 

4. Modello Classe Restapi.php a (app/code/local/custom/RestAPI/Modello/API2/Restapi.php)

<?php 

class Custom_Restapi_Model_Api2_Restapi extends Mage_Api2_Model_Resource 
{ 

} 

?> 

5. V1.php a (app/code/local/personalizzato/RestAPI/Modello/API2/RestAPI/riposo/Admin/V1.php)

<?php 
class Custom_Restapi_Model_Api2_Restapi_Rest_Admin_V1 extends Custom_Restapi_Model_Api2_Restapi 
{ 

    /** 
    * Create a customer 
    * @return array 
    */ 

    public function _create() { 

     $requestData = $this->getRequest()->getBodyParams(); 
     $firstName = $requestData['firstname']; 
     $lastName = $requestData['lastname']; 
     $email = $requestData['email']; 
     $password = $requestData['password']; 

     $customer = Mage::getModel("customer/customer"); 

     $customer->setFirstname($firstName); 
     $customer->setLastname($lastName); 
     $customer->setEmail($email); 
     $customer->setPasswordHash(md5($password)); 
     $customer->save(); 

     return json_encode(array("testing","Success")); 
    } 

} 
?> 

E il mio URL è simile a: baseurl/api/rest/customer

risposta

9

Vorrei mettere questo in un commento poiché ritengo che questa non sia una risposta completa, ma non mi è ancora permesso. Alcune cose:

  1. Il tag globale in config.xml non è chiuso.

  2. Non è possibile creare i record utilizzando un URL che fa riferimento a entità, si necessario utilizzare il percorso di raccolta definito nel route_collection nodo api2.xml. Quindi dovresti chiamare/api/rest/customer.

  3. Non c'è bisogno di avere un percorso separato "creare" in quanto il metodo viene scelto con il metodo HTTP (POST/get/delete/etc) e il contenuto del corpo . Vorrei raccomandare un percorso di "cliente /: id" per l'elemento 01_route_entity. Quindi assicurati di inviare un POST HTTP.

non ero in grado di riprodurre l'errore esatto che hai postato, ma ero in grado di ottenere questo lavoro dopo aver corretto gli elementi di cui sopra.

Inoltre, assicurarsi di concedere l'autorizzazione per questa risorsa nell'area di amministrazione e per cancellare le cache di configurazione dei servizi Web.

L'eccezione specifica elencata viene generata in Mage_Api2_Model_Router nel metodo route.

Ho rielaborato questo e creato un repo su github con il modulo di lavoro: https://github.com/themizzi/Custom-Magento-Rest-Api2. Il modulo utilizza l'accesso Guest poiché non ho avuto il tempo di esaminare l'intero accordo oAuth, ma se si aggiorna semplicemente il nodo ospite in api2.xml per l'amministrazione e si aggiorna l'accesso nell'area di amministrazione, funzionerà.

+0

scusate variabile globale ho corretto ieri in sé, ma non aggiornato qui ma non sono sempre il tuo 2 ° punto del tutto si può elabrote po 'di più (sì, sto usando URL come questo www.myweb.com/api/rest/customer in post request) Grazie – Spartan

+0

quindi non stai più usando questo URL? E il mio URL è come: apiurl/customer/create –

+0

Per il secondo punto, suggerisco di guardare attraverso la classe Mage_Api2_Model_Router per vedere come effettivamente sceglie il metodo da chiamare nella propria classe del modello. Si basa su un mix del metodo HTTP e del tipo di dati del corpo. Questo è anche il luogo dove viene generata la tua specifica eccezione. –

0
  • In primo luogo voi hanno fatto piccolo errore in

    Fase 1. Estensione Abilitato al (/ etc/modulo app/Custom_Restapi.xml)

    Hai aperto il tag come <Custom_Restapi> ma chiuso il tag come <Custom_Restapi_Grops> e anche si è perso tag <?xml version="1.0"?> .

  • In secondo luogo è possibile inserire il codice in _retrieveCollection() come in api2.xml è stato definito solo 1 percorso & che per recuperare la raccolta.

    O inserire il codice in _retrieveCollection() o in _retrieveCollection() chiamare il metodo _create.

  • Infine è stato definito cognome, cognome, email & la password come attributo nel api2.xml Non sono POST Parametri, & io non sono né familier con il funzionamento di Metodo getBodyParams()

    O È necessario definire i percorsi per ottenere tutti e 4 i parametri tramite URL in api2.xml o Puoi provare $ _GET [] allegando tutti i tuoi parametri nella stringa di query.

HopeFully ti aiuterà.

Grazie