Forum d'entraide PHPFrance

Venez poser vos questions PHP, MySQL, HTML, CSS, Javascript, Gestion de serveurs à la communauté PHPfrance

Vers le contenu

» Masquer les résultats de la recherche

Recherche dynamique PHPfrance

  1. Effectuez une recherche, les résultats s'afficheront dynamiquement ici.

Récupérer les données d'un fichier XML par POST sans formulaire

PHP 4 n'est plus supporté depuis le 08/08/2008. Ce forum est fermé mais reste disponible pour consultation. Il est grand temps de s'intéresser à PHP 5...

Récupérer les données d'un fichier XML par POST sans formula

Messagepar gigaben68 27 Mar 2008, 11:18

Bonjour tout le monde,

Tout nouveau sur le forum je sollicite votre aide et vos bonnes idées pour mon problème auquel je ne trouve pas de solution.
Je vais vous expliquer du mieux que je peux.
Voilà, je dois faire pour la société dans laquelle je travaille un traitement automatique des factures d'un fournisseur spécifique pour pouvoir les intégrer en quelques clics dans notre logiciel de gestion.

Les factures sont envoyé au format XML, j'ai créé un parseur XML en PHP, qui permet de ne récupérer que les infos dont j'ai besoin dedans. Cette page PHP créée ensuite un fichier formaté de telle manière qu'elle puisse être compatible avec le soft de gestion, puis elle l'expédie par mail à mon responsable qui se charge de l'importation dans le soft. Jusque ici tout fonctionne impeccablement.

Mon problème est là, jusqu'à présent je travaillais sur un fichier XML de test, alors j'ai créé un petit formulaire HTML qui me permettais de soumettre le fichier à PHP en vue de son traitement par la méthode POST. Maintenant mon contact chez le fournisseur affirme qu'il faut que je lui donne simplement le lien vers la page de traitement, leur système informatique (dont je ne connais pas la technologie) l'expédierais directement sur cette page. A moi simplement de faire en sorte que ma page de traitement récupère ce fichier et le traite.

Je ne sais absolument pas comment faire pour récupérer ce fichier sans formulaire de soumission. J'ai une piste du côté de la méthode "Xform" mais je ne saisie pas comment elle fonctionne. Et c'est là que j'ai besoin de votre aide. Cela plusieurs jours que je planche là dessus sans résultat.

Je ne sais pas si j'ai été très clair.

Je vous remercie tous par avance.
gigaben68
Embryon
 
Messages: 2
Inscription: 27 Mar 2008, 11:16

Messagepar Alkann 27 Mar 2008, 11:29

Je pense que ton fournisseur s'attend à des informations sur un webservice. Tu devrais jeter un oeil par ici dans un premier temps : webservices

Après tu peux voir quelle standard utilisé (XML-RPC ou SOAP), sachant que des librairies externes (en PHP4) ou native (en PHP5) existent. :wink:
Alkann
Ma première boucle
 
Messages: 79
Inscription: 26 Fév 2008, 17:43
Localisation: Paris

Messagepar Ryle 27 Mar 2008, 11:40

C'est surtout ton fournisseur qui à mon avis n'a pas été très clair... c'est bien beau de dire que c'est la machine qui fait tout toute seule, mais ils vous faut également définir d'un protocol d'échange (bon c'est très pompeux comme nom, c'est juste pour dire que vous devez vous mettre d'accord sur comment ça va fonctionner ;))

En effet, c'est bien beau de lui donner un lien, mais c'est à lui (quoi qu'en fait non, c'est plutôt à vous) de définir comment les données sont envoyées et donc de définir s'il faut utiliser la méthode GET, la méthode POST (et donc simuler ton formulaire), et dans ce cas les valeurs à préciser (équivalent du nom des champs), s'il faut passer par une simple connexion http ou une connexion sécurisée https, si le transfert se fait par soap, quel est le port à utiliser, la façon dont les données sont acquitées (comment s'assurer que le fichier a bien été envoyé et récupéré)...

A mon avis, tu as eu affaire à un commercial et non à quelqu'un de technique, et il est fort probable que par "lien vers la page de traitement" il fallait comprendre "adresse et compte ftp où déposer le fichier" mais je peux me tromper, et ça fonctionne peut être bien par un bête http :) (j'espère juste qu'il n'y a pas de données sensibles, genre des noms ou des matricules...)

Dans tous les cas, ils devraient te fournir une documentation technique concernant l'envoi et le traitement de ce fichier (en plus de la structure de celui-ci que tu semble déjà avoir). Il n'y a qu'à partir de là que tu pourras savoir comment traiter le flux.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...
Avatar de l’utilisateur
Ryle
Modérateur PHPfrance
Modérateur PHPfrance
 
Messages: 9740
Inscription: 07 Fév 2006, 17:25
Localisation: Lat: 48°89. Long: 2°30.

Messagepar gigaben68 27 Mar 2008, 11:52

Réponse à Alkann

Super, au début j'avais pas bien compris ce dont tu parlais puis j'ai lu l'article sur ton lien, et je crois que j'ai compris cette fois.
Mais ça m'énerve ça fait déjà plusieurs jours que j'essaie joindre mon contact justement et rien... Je vais lui demander dès qu'il daignera répondre à son téléphone.

Réponse à Ryle

Pour la méthode on a défini POST, (comment un fichier peut-être envoyé par GET , c'est un autre sujet), pour le fait qu'il soit commercial tu as parfaitement raison, et je savais bien qu'il y avait les noms des champs à lui donner grrrr, il disait que non, mais il faut bien une variable !!!!, non il n'y a pas de données sensibles (des chiffres et des codes)

Je vais faire donc faire ce que vous me préconisez, demander une doc, et définir une méthode avec lui.

Merci en tout cas pour ces deux réponses rapides. J'avoue ne pas savoir par où commencer, mais j'ai déjà un fil conducteur et deux objectifs maintenant. :D
gigaben68
Embryon
 
Messages: 2
Inscription: 27 Mar 2008, 11:16

Messagepar caroube 27 Mar 2008, 13:40

Tape "simuler envoi en post" dans Google et tu trouveras des fonctions comme celle-ci qui permettent d'envoyer des données en post à un serveur.

A ton fournisseur de l'adapter s'il ne travaille pas en PHP, mais le principe est là.

Attention également : je crois que la taille des données envoyées par POST est limitée. La limite est assez haute, mais elle existe quand même. De toute façon, il vaut peut-être mieux segmenter l'envoi du XML en paquets de taille raisonnable car en cas de problème de transfert, ce sera toujours plus rapide de ne renvoyer que le paquet défectueux.

Enfin, s'agissant de factures et d'entrées en comptabilité, il est absolument indispensable de contrôler que la réception correspond bien à l'émission. Par exemple au minimum, qu'en plus du détail de chaque facture, le fichier XML contienne un récapitulatif du nombre total de factures et leur montant global. Et avant de faire quoique ce soit, il faut vérifier que les factures reçues correspondent en nombre et en montant au récapitulatif. Idem au niveau de chaque facture, il faut un contrôle sur le nombre de lignes et le montant total des lignes.

Des factures "foireuses" entrées dans la gestion ou la compta, c'est une catastrophe pour rectifier (si en plus on a la chance de s'en apercevoir assez tôt). Il faut donc que des contrôles rigoureux d'intégrité soient effectués le plus vite possible dans la chaîne de traitement.
caroube
Eléphanteau
 
Messages: 422
Inscription: 26 Mar 2008, 10:31

Messagepar Alkann 27 Mar 2008, 15:16

caroube a écrit:Tape "simuler envoi en post" dans Google et tu trouveras des fonctions comme celle-ci qui permettent d'envoyer des données en post à un serveur.

Il y a également Poster pour Firefox qui va te permettre d'effectuer des requêtes HTTP
Alkann
Ma première boucle
 
Messages: 79
Inscription: 26 Fév 2008, 17:43
Localisation: Paris

Messagepar Invité 11 Juin 2008, 09:18

Bah voilà, quelques temps plus tard, je n'ai toujours pas avancé.
Je mets un bout de code en VB fourni par la personne de ce fournisseur.
Je suis un peu perdu ne connaissant rien au VB. :roll:

<%
@ Language=VBScript
%>
<%
strCatalogue = "xxxxx"
%>
<!-- #Include File ="../include/xxxxxxxx" -->
<%
If Request.totalBytes > 0 Then'
 dim xmldoc
 set xmlDoc = Server.CreateObject("Microsoft.FreeThreadedXMLDOM")
 '**************** Charge la requête XML dans un objet XML ***************************
 xmlDoc.Load Request
        ' ************Code lisant le fichier XML et le stockant dans une base de données *****************
  If (xmlDoc.parseError.errorCode <> 0) Then
     Dim myErr
     Set myErr = xmlDoc.parseError
     StrReponse =  myErr.reason
  Else
   StrReponse = xmlDoc.xml
   set oInvoiceType = xmlDoc.selectsinglenode("//Invoice/InvoiceHeader/InvoiceType")
   
   if oInvoiceType.Text="Invoice" then
      set oIMAccountNumber = xmlDoc.selectsinglenode("//Invoice/IMAccountNumber")
      set oCustomerPO = xmlDoc.selectsinglenode("//Invoice/InvoiceHeader/CustomerPO")
      set oInvoiceNumber = xmlDoc.selectsinglenode("//Invoice/InvoiceHeader/InvoiceNumber")
      set oOriginalOrderNumber = xmlDoc.selectsinglenode("//Invoice/InvoiceHeader/OriginalOrderNumber")
      set oInvoiceDate= xmlDoc.selectsinglenode("//Invoice/InvoiceHeader/InvoiceDate")
      SQL = "INSERT INTO [Statut - tracking] (CustNumber,CustomerPO,InvoiceNumber,OriginalOrderNumber,InvoiceDate)"
      SQL = SQL &" VALUES"
      SQL = SQL &" ("&mid(oIMAccountNumber.Text,5,6)&",'"&oCustomerPO.Text&"','"&oInvoiceNumber.Text&"','"&oOriginalOrderNumber.Text&"','"&oInvoiceDate.Text&"')"
      response.write SQL
      Connexion.Execute(SQL)
   end if
   
  End If
  'SQL = "INSERT INTO [XML - Factures] ([Date],[Contenu],[Heure]) VALUES('" & Date() & "','" & StrReponse & "','" & Time() & "')"
  'Response.status SQL
  'Connexion.Execute(SQL)
  Connexion.Close
  Set Connexion = nothing
 
else
  ' Customer's code 
  Response.status = "<Reponse>Aucune donnée de reçue</Reponse>" 
end if
Response.End
 
'xxxxx vérifie juste le statut 200 (valeur retournée par default) pour déterminer
'si le POST a été réussi ou non. Comme il s'agit de la valeur par défaut, ne mettez pas de valeur,
'comme Response.status = "200 OK" ou Response.status = "202 Accepté"
 
%>
Invité
 


Retourner vers PHP 4 (deprecated)

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités