Ajouter un header (Authorization et Content-Type) lors de l'appel d'un webservic

Résolu
mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention   -  
mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous et à toutes,

Je rencontre un petit problème avec les webservices.. Pour vous mettre dans le contexte, j'ai un site e-commerce et j'aimerai modifier le statut de ma commande (chez BPOST ou mondialRelay).

Mondial Relay a fourni dans sa documentation, un exemple d'appel à l'un de ses webservices. Bpost non. Le soucis est que je n'arrive pas à adapter l'exemple de MondialRelay pour le faire fonctionner chez Bpost.

J'utilise la librairie nusoap.php

Voici les consignes que je retrouve dans la documentation de chez Bpost + un exemple de l'xml request attendu :

Type of request:
POST

URL PROD:
https://api.bpost.be/services/shm/{accountID}/orders/{orderReference}

Headers:
Authorization: Basic AccountID:pass-phrase (base64)
Content-Type: application/vnd.bpost.shm-orderUpdate-v3+XML


<?xml version="1.0"?>
<orderUpdate xmlns="http://schema.post.be/shm/deepintegration/v3/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schema.post.be/shm/deepintegration/v3/ ">
<status>OPEN</status>
</orderUpdate>


Je connais mon accountID et ma pass-phrase. Je sais également transformer cela en base 64.

Voici à présent, l'exemple de chez Mondial Relay que je n'arrive pas à adapter pour Bpost :

$client = new nusoap_client("http://api.mondialrelay.com/Web_Services.asmx?WSDL", true);
$client->soap_defencoding = 'utf-8';
$params = array(
      ... => ...,
);

$result = $client->call('WSI4_PointRelais_Recherche', $params, 'http://api.mondialrelay.com/', 'http://api.mondialrelay.com/WSI4_PointRelais_Recherche');


Ce sont les seuls infos dont je dispose..

En espérant que quelqu'un m'aide, je vous souhaite une excellente journée,

Mikis
A voir également:

2 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, tu dois commencer par trouver le wsdl de bpost. n'as-tu vraiment aucune autre information?
0
mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

C'est possible qu'il n'y en ai pas ? Ou alors la partie commune à chaque opération 'https://api.bpost.be/services/shm' et rajouter '?wsdl' à la fin ?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention  
 
je pense que tu dois obtenir le contenu de la page wsdl.
bizarre que tu n'aies pas reçu l'information de bpost: travailles-tu vraiment avec eux?
0
mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai trouvé finalement. Ton commentaire m'a fait réfléchir et j'ai essayé de traiter la demande plutôt comme une requête HTTP et non comme un appel webservice (voir mon commentaire ci-dessous)
0
mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention  
 
Ou alors, je vois trop loin et je n'ai qu'à effectuer une requête HTTP en mode POST ?
0
mikis69 Messages postés 168 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai finalement réussi en utilisant les requêtes HTTP plutôt que l'appel Webservice que j'ai mentionné plus haut.

// Set status to open !
$document = new \DOMDocument('1.0', 'utf-8');
$document->preserveWhiteSpace = false;
$document->formatOutput = true;
$order_update = $document->createElement('orderUpdate');
$order_update->setAttribute('xmlns', 'http://schema.post.be/shm/deepintegration/v3/');
$order_update->setAttribute('xmlns:xsi', '"http://www.w3.org/2001/XMLSchema-instance');
$order_update->appendChild(
	$document->createElement('status', $status) // Le status voulu : OPEN, CANCELLED, ...
);
$document->appendChild($order_update);
		
$headers = array(
				'Content-Type: application/vnd.bpost.shm-orderUpdate-v3+XML',
				'Authorization: Basic ' . base64_encode('ACCOUNTID:PASSPHRASE'),
		   );
// set options
$options = array();
$options[CURLOPT_URL] = 'https://api.bpost.be/services/shm/ACCOUNTID/orders/ORDERID';
$options[CURLOPT_RETURNTRANSFER] = true;
$options[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_1_1;
$options[CURLOPT_HTTPHEADER] = $headers;
$options[CURLOPT_SSL_VERIFYPEER] = false;
$options[CURLOPT_POST] = true;
$options[CURLOPT_POSTFIELDS] = $document->saveXML();

// init
$curl = curl_init();
// set options
curl_setopt_array($curl, $options);
// execute
$response = curl_exec($curl);
		
var_dump($response);
0