Jump to content

Création d'un webservice pour appel API externe à Prestashop


Recommended Posts

Bonjour,

Je souhaite pour un client utiliser un appel (en ajax) à une API externe à Prestashop (prestataire externe).

Pour ce faire, j'ai créé :

  • un nouveau fichier php (assembly_check.php) dans le dossier /api/ du serveur (faisant appel à l'API externe)
  • un champ input sur la page produit pour demander un code postal (voir code numéro 1) conditionné à une valeur (montage dans mon cas)
  • un appel Ajax lors de la sortie du champ input (fonction "blur" du Javascript) précédemment cité (voir code numéro 2)

Code numéro 1 :

          	{if $montage != null}
		  		  <hr>
		  		  <h5>
					  NOUVEAU : Simplifiez-vous la vie !
				  </h5>
				  <p>
					  <b>{$montage.name}</b><br>
					  par un expert certifié
				  </p>
				  <p>
		            Veuillez indiquer votre code postal afin de vérifier si nous avons des Experts disponibles dans votre ville pour réaliser ce service :
					</p>
					<p>
					<input type="text" data-offerId="{$montage.reference}" id="cp_assembly_input" name="cp_assembly" placeholder="Code postal" class="input-group form-control" />
				  </p>
				  <div class="product-price">
					  <div class="current-price">
						  {$montage.price}€
					  </div>
				  </div>
				  <button class="btn btn-secondary" id="accessorie_btn_assembly" data-toggle="modal" data-target="#assembly-modal" disabled> 
				      Ajouter le service
				  </button>
		  		  <hr>
  			{/if}

Code numéro 2 :

$('button#accessorie_btn_assembly').on('click', function(e) {
	e.preventDefault();
});

$('input#cp_assembly_input').blur(function(e) {
	var params = {
		offerId: $(this).data('offerid'),
		zipCode: $(this).val(),
		'client_id': 1,
	};
	
	console.log(params);
	
	$.ajax({
		type: "POST",
		url: "/api/assembly_check.php&ws_key=XXX_ICI_SE_TROUVE_MA_CLE_API_PRESTASHOP_XXX",
		data: params,
		success: function (data) {
			console.log(data);
			alert(data);
		},
		error: function (data) {
			console.log(data);
			alert('error');
		}
	});
	
}).keyup(function(e) {
  if (/\D/g.test(this.value)) {
    this.value = this.value.replace(/\D/g, '');
  }
});

En gros, toute la partie affichage du champ + gestion au "blur" de l'appel Ajax fonctionne, j'ai bien un appel qui va se faire, par contre, j'ai un message d'erreur car je n'utilise pas les "fonctions" des webservices prestashop (products, orders...) et il me renvoie que mon fichier n'existe pas.

Voici le retour XML (en réponse) que j'ai lorsque mon Ajax de type POST s’exécute :

<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<errors>
<error>
<code><![CDATA[27]]></code>
<message><![CDATA[Resource of type "assembly_check.php" does not exists. Did you mean: "supply_orders"? The full list is: "addresses", "attachments", "carriers", "cart_rules", "carts", "categories", "combinations", "configurations", "contacts", "content_management_system", "countries", "currencies", "customer_messages", "customer_threads", "customers", "customizations", "deliveries", "employees", "groups", "guests", "image_types", "images", "languages", "manufacturers", "messages", "order_carriers", "order_cart_rules", "order_details", "order_histories", "order_invoices", "order_payments", "order_slip", "order_states", "orders", "price_ranges", "product_customization_fields", "product_feature_values", "product_features", "product_option_values", "product_options", "product_suppliers", "products", "search", "shop_groups", "shop_urls", "shops", "specific_price_rules", "specific_prices", "states", "stock_availables", "stock_movement_reasons", "stock_movements", "stocks", "stores", "suppliers", "supply_order_details", "supply_order_histories", "supply_order_receipt_histories", "supply_order_states", "supply_orders", "tags", "tax_rule_groups", "tax_rules", "taxes", "translated_configurations", "warehouse_product_locations", "warehouses", "weight_ranges", "zones"]]></message>
</error>
</errors>
</prestashop>

Ma question est donc la suivante :

Quote

Comment puis-je créer un nouveau webservice dans ce dossier /api/ de Prestashop et y faire appel en Ajax pour appeler une API externe ?

Merci d'avance.

Cordialement,

Guillaume BOUAUD

Link to comment
Share on other sites

  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...