Skip to main content
X402 implique HTTP, SDK, signatures, Facilitator et transactions on-chain. Lors du dépannage de problèmes de signature ou de règlement, il est recommandé de confirmer couche par couche dans l’ordre « entrée publique -> réponse 402 -> SDK payment handler -> settlement on-chain ». Ce tutoriel explique les méthodes de vérification pour chaque couche et répertorie les erreurs courantes.

Vérifier l’entrée publique

Déclaration des capacités du Facilitator :
Si facilitator, supportedKinds et les points de terminaison du protocole sont renvoyés, les métadonnées de capacité sont normales. La découverte des ressources API a été retirée ; appelez directement l’API cible et référez-vous à la réponse 402 en temps réel. Capacités prises en charge par le Facilitator :
Si kinds est renvoyé, l’entrée du Facilitator fonctionne normalement.

Vérifier les accepts de 402

Envoyez une requête non authentifiée qui ne sera pas facturée :
Vérifiez si les accepts renvoyés contiennent le réseau que vous souhaitez utiliser. network est un identifiant CAIP-2 :
  • eip155:8453 + exact (Base)
  • eip155:8453 + upto (Base, mesure postérieure)
  • eip155:1187947933 + exact (SKALE)
  • solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp + exact (Solana)
Si le réseau cible est absent, cela indique que cette API ou l’environnement actuel n’a pas configuré le mode d’encaissement X402 correspondant.

Exécuter les outils avancés de validation X402Client

Le dépôt X402Client fournit des outils avancés de validation, qui peuvent être utilisés pour confirmer la sélection de réponse 402, la génération de signatures, le paid retry et le settlement on-chain. Ils nécessitent un portefeuille approvisionné, un RPC, une clé privée et des dépendances de développement. Pour une intégration métier normale, il est recommandé de privilégier le SDK TypeScript ou Python ; exécutez ces outils uniquement lorsqu’il est nécessaire de localiser des problèmes de signature ou de règlement on-chain. Adresse du dépôt : https://github.com/AceDataCloud/X402Client
Base :
SKALE :
Solana :
Les outils de validation affichent généralement :
  1. La réponse 402 de la première requête.
  2. Le payment requirement sélectionné.
  3. Le résumé du PAYMENT-SIGNATURE après signature.
  4. Le statut HTTP et le corps de réponse après nouvelle tentative.
  5. La transaction de settlement on-chain, ou la cause de l’erreur Facilitator en cas d’échec.
N’envoyez pas de clés privées ni de PAYMENT-SIGNATURE complets vers le système de logs ou dans les tickets. Exemple de résultats de validation de l’API publique :
Explications :
  • exact de SKALE, exact de Base, exact de Solana et upto de Base ont tous effectué un paid retry de HTTP 402 à HTTP 200.
  • La transaction on-chain de exact sur SKALE peut être consultée dans le SKALE explorer, et le montant du règlement est de 0.095215 USDC.
  • La transaction on-chain de exact sur Base peut être consultée dans BaseScan, et le montant du règlement est de 95215 atomic USDC.
  • La limite de signature de upto sur Base est de 95215 atomic USDC, mais le settlement on-chain réel est de 3 atomic USDC, ce qui indique que la mesure postérieure facture selon l’utilisation réelle.
  • Le chemin Solana a confirmé le paid retry et la sortie du modèle. Le RPC public peut être soumis à une limitation de débit ; lorsqu’un rapprochement on-chain strict est nécessaire, utilisez votre propre RPC Solana ou les enregistrements de règlement côté plateforme pour confirmer la signature de transaction.

SDK smoke test

Les outils avancés de validation servent à vérifier les signatures et le règlement on-chain. Côté métier, un SDK smoke test doit également être exécuté afin de confirmer que le code d’application peut gérer automatiquement 402 via le payment handler. Seuls les extraits principaux sont présentés ci-dessous ; le code complet doit compléter le portefeuille, le provider et les imports. TypeScript :
Python :
Si le modèle renvoie la chaîne fixe comme demandé, cela indique que le SDK, le payment handler, le Gateway, le Facilitator et l’API cible sont reliés. Les deux smoke tests ci-dessus utilisent SKALE exact. SKALE ne fournit actuellement que exact, qui est réglé sur le montant fixe coté par 402 et ne sera pas réduit en fonction de l’utilisation réelle de tokens. La complétion de chat est un scénario facturé au token ; lors de l’intégration en production, il est recommandé de passer à Base et de transmettre preferScheme: 'upto', afin de régler selon l’utilisation réelle. Résultat d’exécution du programme de smoke test du SDK :
Explication des résultats :
  • Le SDK TypeScript traite automatiquement 402, la signature et la nouvelle tentative via createX402PaymentHandler, et obtient finalement ADC_TS_SDK_X402_OK.
  • Le SDK Python réalise la même chaîne via create_x402_payment_handler, et obtient finalement ADC_PY_SDK_X402_OK.
  • Les deux smoke tests utilisent le payeur SKALE 0xd0479FA9FD8C678303d477433d24C15e3723CC1C.
  • L’objet retourné par le SDK Python est un dict ; dans l’exemple, vous pouvez utiliser res["choices"][0]["message"]["content"] pour lire le contenu.

E2E de paiement de commande

Le paiement de commande utilise l’API de plateforme de platform.acedata.cloud et nécessite un jeton de compte de plateforme. La chaîne complète est : créer une commande Pending, déclencher 402 avec POST /api/v1/orders/{order_id}/pay/, puis effectuer une nouvelle tentative avec PAYMENT-SIGNATURE. Exemple de résultat de vérification de paiement de commande de faible montant :
Les enregistrements de transaction suivants sont des échantillons historiques de tests réels sous l’ancienne politique ; les montants et les hachages de transaction sont conservés tels quels. Les nouvelles commandes X402 ne bénéficient plus de remises selon le mode de paiement ; utilisez le amount de la réponse 402 actuelle comme base pour la signature et le paiement.
Explication des résultats :
  • Après la création de la commande, son état est Pending et son prix est 1.26.
  • La première requête pay/ renvoie HTTP 402 ; accepts contient Base exact et Solana exact, avec un montant de 1200000 atomic USDC pour les deux.
  • Après une nouvelle tentative avec Base PAYMENT-SIGNATURE, HTTP 200 est renvoyé, l’état de la commande devient Finished et pay_way est X402.
  • Après décodage de PAYMENT-RESPONSE, il affiche success=True, network=base et fournit le même hachage de transaction.
  • Sur BaseScan, l’état de la transaction est 1, et le montant du transfert est de 1200000 atomic USDC, soit 1.2 USDC.
  • Le prix de création de 1.26 a été payé pendant la période de l’ancienne politique de réduction pour les paiements X402 ; le montant final signé et réglé est de 1.2 USDC.
Si le paiement de commande ne contient pas Authorization: Bearer {platform_token}, ou si la commande n’appartient pas au compte actuel, il échouera au niveau des autorisations de la plateforme ; cela diffère de l’API X402 sans compte appelée directement sur x402.acedata.cloud.

Erreurs courantes

Liste de contrôle Base upto

upto n’est actuellement fourni que sur Base (eip155:8453). SKALE ne fournit que exact. Étant donné que la signature upto lie davantage de paramètres EVM typed data, lors de l’intégration, il faut particulièrement vérifier que les champs en temps réel de la réponse 402 correspondent exactement à la signature du client.
Si Base upto renvoie invalid_upto_evm_payload_invalid_signature, vérifiez en priorité :
  1. Le extra.chainId (doit être 8453) dans l’entrée eip155:8453 + upto renvoyée par l’API.
  2. Le extra.facilitatorAddress renvoyé par l’API.
  3. L’adresse du facilitator Base upto renvoyée par https://facilitator.acedata.cloud/supported.
  4. Le domaine Permit2, le spender, le contrat USDC et le compte signataire.
  5. Si le portefeuille a déjà approuvé Permit2 pour l’USDC sur Base.
Le digest de signature de upto lie simultanément le domaine Permit2, le chain ID, le spender, l’adresse du destinataire, l’adresse du facilitator et validAfter. Si l’un d’eux ne correspond pas, le Facilitator récupérera un mauvais signer, renvoyant ainsi invalid signature. Si tous ces éléments correspondent mais que 402 est toujours renvoyé, vérifiez ensuite l’allowance Permit2 ; lorsqu’il n’est pas autorisé, PERMIT2_ALLOWANCE_REQUIRED est renvoyé.

Enregistrer les informations de vérification

Une validation complète enregistre au minimum :
  • le chemin API et le résumé du corps de la requête ;
  • le network et le scheme sélectionnés ;
  • maxAmountRequired ;
  • l’adresse du portefeuille du payeur ;
  • le statut HTTP final ;
  • la sortie du modèle ou l’ID de tâche dans la réponse ;
  • le lien de la transaction de settlement ;
  • l’ID de trace Gateway ou l’ID d’enregistrement d’utilisation de la plateforme.
Ne sauvegardez pas les clés privées, le PAYMENT-SIGNATURE complet, la signature EIP-712 complète ou la phrase mnémonique.

Erreurs de paiement structurées

Les échecs X402 après signature renverront un code stable, des paramètres d’interpolation sécurisés, une phase et un indicateur de possibilité de nouvelle tentative dans extensions.acedatacloud.paymentError. Privilégiez cette structure pour le diagnostic, ne parsez pas l’error anglais de niveau supérieur, et ne demandez pas aux utilisateurs de fournir des signatures de portefeuille ou le texte original des simulations on-chain.
  • charged: false : la validation a explicitement refusé avant le settlement, aucun débit n’a été initié cette fois-ci.
  • Sans charged : le résultat est inconnu ou est déjà entré dans la phase de settlement ; vérifiez d’abord la commande et l’état on-chain, il est interdit de répéter directement le paiement.
  • settlement_pending : ne répétez pas le paiement pour le moment ; actualisez d’abord la commande ou contactez le support.
  • Code non reconnu : traitez-le comme payment_failed et conservez le code technique public afin que le service client puisse le rechercher.