Client SOAP en C# à convertir en PHP

Fermé
Profane24 Messages postés 2 Date d'inscription jeudi 10 octobre 2013 Statut Membre Dernière intervention 10 octobre 2013 - 10 oct. 2013 à 09:50
Profane24 Messages postés 2 Date d'inscription jeudi 10 octobre 2013 Statut Membre Dernière intervention 10 octobre 2013 - 10 oct. 2013 à 10:53
Bonjour à tous,

Je suis un développeur PHP. On m'a demandé de réaliser l'appel à un web services via SOAP. Par contre on ne m'a donnée qu'un appel en C# pour pouvoir réaliser mon appel en PHP. Est-ce qu'il y aurait parmi vous une personne avec cette double compétence et avec un peu de temps à m'offrir svp ?

Voici le fameux code C# :


public void TestUpdateCommandesStatut()
{
var commandesStatut =
new CommandeStatut[]
{
new CommandeStatut()
{
FournisseurId =1,
Reference = "1234567890",
EtatsCmd = new EtatCmd[] {
new EtatCmd()
{
Code="01",
Commentaire = "A valider"
},
new LivraisonEtatCmd()
{
Code = "02-1",
Commentaire = "En cours",
LivraisonDate = DateTime.Now,
LivraisonNumber = 1
}
,
new EtatCmd()
{
Code = "10",
Commentaire = "Livree"
},
//200
new CommandeArticleEtatCmd()
{
Code = "20",
Commentaire = "Pas encore livree",
Articles = new Article[]
{
new Article()
{
CmdNumber = "22",
Qtte = 2,
Reference = "123"
}
}

},

//201
new CommandeArticleEtatCmd()
{
Code = "21",
Commentaire = "Livree",
Articles = new Article[]
{
new Article()
{
CmdNumber = "22",
Qtte = 2,
Reference = "123"
}
}

},
//303: Problème technique non résolu
new EtatCmd()
{
Code = "30",
Commentaire = "Jamais arrivee"
},

//400: Retour produit atelier
new EtatCmd()
{
Code = "40",
Commentaire = "Annulee par fournisseur"
},
//400: Réaparation en cours
new EtatCmd()
{
Code = "41",
Commentaire = "Annulee par client"
}
}
}
};
this.proxy.UpdateCommandesStatut(commandesStatut);

}


Merci d'avance à celui ou ceux qui pourront m'aider dans cette tâche.

Bonne journée.

1 réponse

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié par Reivax962 le 10/10/2013 à 10:29
Bonjour,

Ils sont pas cool avec ton C# : ça ne donne aucune info sur le mécanisme, uniquement les paramètres à passer... Car Visual Studio gère lui-même les références au web service et le présente comme une fonction normale (ou presque), masquant l'interface Soap. Et en plus le code est moche et peu clair au possible.

En Php, il faut utiliser une classe comme SoapClient (https://www.php.net/manual/fr/class.soapclient.php
Tu la fais pointer vers l'URL de ton web service (en mode WSDL), qu'il faut connaître (et que le C# te masque... si tu ne la connais pas, il faut que tu la demandes à ton client).

Ensuite, tu construis ton tableau de paramètres sur un modèle proche :

$params = array(
CommandeStatut => array(
'FournisseurId' =>1,
'Reference' => "1234567890",
'EtatsCmd' => array(
array('Code'=>"01", 'Commentaire' => "A valider"),
array('Code'=>"02-1", 'Commentaire' => "En cours",
'LivraisonDate'=>time(), 'LivraisonNumber' => 1),
array([...]),
[...]
);
);
);

Et ensuite tu appelles le service avec ces paramètres :
https://www.php.net/manual/fr/soapclient.soapcall.php

$client->UpdateCommandesStatut($params);
Bon, personnellement je n'ai jamais fait ça en php (mais beaucoup en C#), donc je ne peux pas te garantir que le script que je donne fonctionne tel que. Mais lis la doc que j'ai indiquée, je pense que tout y est.

Dernière chose, pour les dates, en C# le DateTime.Now donne une certaine valeur... J'ai remplacé par time() en PHP, qui donne un timestamp Unix. Je ne suis absolument pas sûr que ce soit la valeur qu'attends le web service. Il faudra sans doute tester un peu et adapter (peut-être attend-il une chaîne de caractère ?)

Bon courage, ça ne s'annonce pas facile !

Xavier
0
Profane24 Messages postés 2 Date d'inscription jeudi 10 octobre 2013 Statut Membre Dernière intervention 10 octobre 2013
10 oct. 2013 à 10:53
Bonjour Reivax et merci pour ta réponse. J'ai fais un test rapidement et pour le moment, je n'ai pas réussi à correctement appeler ce web services. Je viens de finir de lire les liens que tu m'as fourni, ce dont je te remercie, mais à priori je dois avoir un problème avec la retranscription.
L'appel C# a l'air d'être 100% objet et je ne sais pas si l'envoi en tableau ne lui pose pas problème. En tout cas, je te remercie de ton coup de main et je me replonge dedans en partant de ton modèle.
0