cXML PunchOutSetupRequest
Transaction d'ouverture de session punchout. L'ERP acheteur l'envoie au site fournisseur pour obtenir une URL temporaire qui amènera l'utilisateur dans le catalogue hébergé, déjà authentifié et associé à un cookie de session.
Objet de la transaction
Le punchout permet à un acheteur de magasiner dans le catalogue web hébergé chez le
fournisseur — interface riche, prix négociés, stocks temps réel — tout en restant
dans le workflow de validation de son ERP. Le PunchOutSetupRequest est
l'amorce technique : il identifie l'acheteur, transmet un BuyerCookie
qui sera renvoyé tel quel à la fin de session, et indique l'URL BrowserFormPost
où le fournisseur devra poster le panier rapatrié.
La réponse contient une StartPage : une URL unique, à courte durée
de vie, vers laquelle l'ERP redirige le navigateur de l'utilisateur. Cette URL
constitue un jeton d'authentification — quiconque la possède peut entrer dans la
session du fournisseur.
Structure XML
PunchOutSetupRequest
Le DTD déclare :
PunchOutSetupRequest (BuyerCookie, Extrinsic*, BrowserFormPost?, Contact*,
SupplierSetup?, ShipTo?, SelectedItem?, ItemOut*). L'attribut
operation est #REQUIRED et prend quatre valeurs :
create (nouveau panier), inspect (relire un panier en
lecture seule), edit (modifier un panier existant), source
(créer un RFQ vers un outil de sourcing).
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.069/cXML.dtd">
<cXML payloadID="260513.143000.punchout@buyer.example"
timestamp="2026-05-13T14:30:00+02:00"
version="1.2.069">
<Header>
<From>
<Credential domain="DUNS"><Identity>123456789</Identity></Credential>
</From>
<To>
<Credential domain="DUNS"><Identity>987654321</Identity></Credential>
</To>
<Sender>
<Credential domain="DUNS">
<Identity>123456789</Identity>
<SharedSecret>shared-secret-here</SharedSecret>
</Credential>
<UserAgent>ediverse-buyer/1.0</UserAgent>
</Sender>
</Header>
<Request>
<PunchOutSetupRequest operation="create">
<BuyerCookie>session-abc-12345</BuyerCookie>
<BrowserFormPost>
<URL>https://buyer.example/cxml/punchout/callback</URL>
</BrowserFormPost>
<ShipTo>
<Address>
<Name xml:lang="fr">Acheteur SA — Site Paris</Name>
<PostalAddress>
<Street>10 rue de la Paix</Street>
<City>Paris</City>
<PostalCode>75002</PostalCode>
<Country isoCountryCode="FR">France</Country>
</PostalAddress>
</Address>
</ShipTo>
</PunchOutSetupRequest>
</Request>
</cXML> PunchOutSetupResponse
Le DTD est minimaliste : PunchOutSetupResponse (StartPage). La
seule charge utile est l'URL vers laquelle rediriger l'utilisateur, encapsulée dans
StartPage > URL.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.069/cXML.dtd">
<cXML payloadID="260513.143002.punchout-resp@supplier.example"
timestamp="2026-05-13T14:30:02+02:00"
version="1.2.069">
<Response>
<Status code="200" text="OK"/>
<PunchOutSetupResponse>
<StartPage>
<URL>https://supplier.example/catalog/session/abc-12345</URL>
</StartPage>
</PunchOutSetupResponse>
</Response>
</cXML> Requis vs optionnel
Le seul élément obligatoire dans le contenu de la requête est
BuyerCookie (le DTD le déclare ANY, mais il est
cardinal 1). L'attribut operation est lui aussi
#REQUIRED.
Tout le reste est optionnel : Extrinsic*, BrowserFormPost?,
Contact*, SupplierSetup?, ShipTo?,
SelectedItem?, ItemOut*. En pratique, BrowserFormPost
n'est jamais omis — sans lui, le fournisseur ne sait pas où poster le panier. Et
ShipTo est très courant pour que le catalogue propose les bons stocks
et délais.
Côté réponse, StartPage > URL est l'unique contenu,
donc strictement obligatoire.
Patterns courants
Le BuyerCookie est opaque pour le fournisseur — celui-ci doit le
stocker tel quel et le renvoyer intact dans le futur PunchOutOrderMessage.
C'est la clé qui permet à l'ERP acheteur de réassocier le panier rapatrié à sa
demande de panier d'origine. Le DTD précise que "BuyerCookie est unique par
session PunchOut".
SelectedItem sert au punchout par produit : au lieu d'arriver sur
la home du catalogue, l'utilisateur est amené directement sur la page d'un article
précis (identifié par son ItemID). Utile depuis un panier ERP qui veut
"configurer" un article punchout.
Pour le mode operation="edit" ou "inspect", l'ERP renvoie
les ItemOut* du panier d'origine, ce qui permet au catalogue de
reconstituer l'état précédent.
Flux Punchout
Le punchout complet est une chorégraphie HTTP en deux temps. Phase 1 (synchrone) :
le PunchOutSetupRequest/Response via HTTPS de serveur à
serveur. Phase 2 (asynchrone) : la session web utilisateur, qui se termine par
un PunchOutOrderMessage posté par le navigateur de
l'utilisateur vers la BrowserFormPost URL.
Acheteur (ERP) Hub réseau Fournisseur (catalogue)
│ │ │
│ 1. PunchOutSetupRequest │ │
│ (operation=create) │ │
├─────────────────────────►│ │
│ │ 2. relais HTTPS POST │
│ ├─────────────────────────►│
│ │ │
│ │ 3. PunchOutSetupResponse│
│ │ <StartPage><URL/> │
│ │◄─────────────────────────┤
│ 4. relais HTTP 200 │ │
│◄─────────────────────────┤ │
│ │ │
│ 5. redirige le navigateur utilisateur vers StartPage│
│═══════════════════════════════════════════════════►│
│ │
│ (l'utilisateur navigue dans le catalogue) │
│ │
│ 6. PunchOutOrderMessage (POST navigateur → BrowserFormPost URL)
│◄════════════════════════════════════════════════════┤ Documentation
- Fulfill.dtd — version courante
— chercher
ELEMENT PunchOutSetupRequestetELEMENT PunchOutSetupResponse. - cXML Reference Guide (PDF) — chapitre Punchout, exemples et négociation des secrets.
- PunchOutOrderMessage — le message qui clôt la session et rapatrie le panier.