Skip to main content
En plus de payer directement par requête API, Ace Data Cloud prend également en charge le paiement des commandes via X402. Le protocole principal du paiement des commandes et des appels API est le même : la première requête renvoie 402, le client signe PAYMENT-SIGNATURE, puis réessaie avec la même requête. La différence est que le paiement des commandes appartient à l’API de la plateforme et nécessite un jeton de compte ; tandis que l’appel direct à l’API IA de x402.acedata.cloud peut utiliser uniquement X402, sans nécessiter d’API Token.

Préparer la commande

Accédez à la console Ace Data Cloud, sélectionnez la commande à payer, et notez l’ID de la commande. Si vous n’avez pas encore de commande, vous pouvez créer une commande en attente de paiement sur la page des forfaits. Le prix de la commande est celui affiché sur la page, et le amount dans la réponse X402 402 est la base finale de signature.

Créer un jeton de compte

Les requêtes de paiement des commandes nécessitent un jeton de compte. Ouvrez la page des Token de la plateforme, et créez un token au format platform-v1-.... Les requêtes suivantes utilisent :
Le jeton de compte est différent d’un API Token ordinaire. Un API Token ordinaire est utilisé pour consommer le quota API ; le jeton de compte est utilisé pour représenter votre compte lors de l’opération de ressources de la plateforme, comme le paiement de commandes.

Déclencher 402

Envoyez d’abord une requête sans PAYMENT-SIGNATURE :
Le statut renvoyé est 402, et la réponse contient accepts :
Le paiement des commandes utilise x402 v2 officiel : x402Version est 2, network utilise l’identifiant CAIP-2, et le champ du montant est amount. Résultat d’exécution du programme après création d’une commande de 10 Credits et déclenchement de 402 :
Les enregistrements de transaction suivants sont des exemples de tests historiques 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 moyen de paiement ; veuillez utiliser le amount de cette réponse 402 comme base pour la signature et le paiement.
Explication des résultats :
  • Après la création réussie de la commande, l’état est Pending, et aucun paiement on-chain n’a encore été effectué.
  • La première requête pay/ ne contient pas PAYMENT-SIGNATURE, elle renvoie donc HTTP 402.
  • accepts fournit simultanément Base exact et Solana exact, ce tutoriel sélectionne ensuite Base.
  • Le prix lors de la création de la commande est 1.26, et lors du paiement durant l’ancienne politique de remise de paiement X402, le montant réel de signature et de règlement est de 1.2 USDC, correspondant à 1200000 atomic USDC.
Notez ici que resource est un champ renvoyé par le serveur et participant à la signature, le client ne doit pas réécrire lui-même le protocole, le chemin ou l’ID de commande qu’il contient.

Signer et réessayer

Le paiement des commandes peut réutiliser @acedatacloud/x402-client ou la fonction de signature de bas niveau de acedatacloud-x402. Voici un exemple TypeScript :
Résultat d’exécution du programme après signature et nouvel essai de la même commande avec Base exact :
Résultat de confirmation on-chain :
Explication des résultats :
  • status 200 indique que l’interface de paiement des commandes de la plateforme a accepté cette PAYMENT-SIGNATURE.
  • has_x_payment_response True indique que l’en-tête de réponse contient le reçu PAYMENT-RESPONSE encodé en Base64.
  • settle_header.success=True et network=base indiquent que le Facilitator a terminé le règlement Base.
  • Le statut final de la commande est Finished, le pay_way est X402, et le pay_id enregistre le hachage de la transaction on-chain.
  • L’événement Transfer sur BaseScan montre que l’adresse de paiement a transféré 1200000 USDC atomic à l’adresse de réception de la plateforme, soit 1.2 USDC.

Réponse réussie et reçu

Après le succès du paiement de la commande, le corps de la réponse contient les informations de la commande. La plateforme inclut également dans l’en-tête de réponse PAYMENT-RESPONSE une settlement response encodée en Base64 ; après décodage, les champs courants incluent : Si vous avez besoin d’effectuer un rapprochement, il est recommandé de conserver simultanément l’ID de la commande, l’adresse du portefeuille payeur, transaction et le statut final de la commande.

Points d’attention

  • Le paiement de la commande nécessite un jeton de compte de plateforme et ne peut pas être effectué uniquement avec une signature de portefeuille X402.
  • amount utilise les USDC atomic units ; 1200000 représente 1.2 USDC.
  • Ne composez pas vous-même l’adresse de réception ou l’adresse de l’actif ; référez-vous à accepts dans la réponse 402.
  • Si la même PAYMENT-SIGNATURE est soumise à plusieurs reprises, le Facilitator appliquera une protection contre la relecture basée sur le nonce.

Réponse en cas d’échec du paiement

Le premier HTTP 402 sans PAYMENT-SIGNATURE est un défi de paiement normal et ne représente pas un échec de paiement. En cas d’échec de vérification ou de règlement après signature, la chaîne standard error est toujours conservée comme solution de compatibilité, et une structure d’erreur stable est renvoyée dans extensions.acedatacloud.paymentError :
Le client doit prioritairement localiser selon code, et revenir à un échec de paiement générique pour les codes inconnus. charged est un champ à trois états : false n’est renvoyé que lorsqu’un refus est explicitement effectué avant le règlement ; l’absence du champ indique que l’état du débit est inconnu et ne peut pas être interprétée comme « non débité ». Une fois que la commande est passée à Failed, elle ne peut pas être réessayée avec la même commande ; veuillez créer une nouvelle commande après avoir corrigé le problème du portefeuille. N’enregistrez ni ne soumettez la PAYMENT-SIGNATURE complète, la signature du portefeuille, le payload d’autorisation, les diagnostics bruts du Facilitator ou les réponses RPC. Pour le dépannage du service client, seuls l’ID de la commande et le code d’erreur public sont nécessaires.