2017-05-01 3 views
0

J'essaie Braintree en mode bac à sable en utilisant la fonction Drop-in. Je crée un jeton client en utilisant un customerID existant. Mais quand je fais transaction.sale appel avec cette customerId et l'option storeInVault = true donne erreur l'erreur suivante:Braintree sandbox transaction.sale donne une erreur: "Le code client de vente a déjà été pris"

Sale Customer ID has already been taken.

Selon la documentation, il doit mettre à jour le client avec le nonce de paiement.

Voici le code:

gateway.transaction.sale({ 
    amount: '10.00', 
    paymentMethodNonce: nonceFromTheClient, // Generated nonce passed from client 
    customer: { 
    id: 232057823, //this customer exist in the vault 
    email : user.emails[0].address 
    }, 
    options: { 
    submitForSettlement: true, 
    storeInVault: true 
    //storeInVaultOnSuccess: true 
    } 
}, function (err, result) { 
    if (err) { 
    console.log(err); 
    } else { 
    if (result.success) { 
     return result.success; 
    } else { 
      console.log('ERR Sale '+result.message); 
      return result.success; 
    } 
    } 
}); 

J'utilise Meteor avec le package patrickml:braintree.

Répondre

1

Vous semblez utiliser le Braintree Transaction Sale API Call, dans lequel vous avez inclus l'option storeInVault: true. Cela consiste à créer une transaction avec la méthode de paiement incluse nonce et à tenter de créer un identifiant client de 232057823, ce qui explique pourquoi vous rencontrez cette erreur.

Si votre objectif est simplement de mettre à jour un client existant, vous voudrez utiliser le Customer Update API call.

+0

Je pense que c'est ce que je dois faire. Toutefois, selon la documentation: ** Client existant avec nouveau mode de paiement ** Pour associer le mode de paiement de cette transaction à un client existant, transmettez un customerId avec options.storeInVault ou options.storeInVaultOnSuccess comme vrai. Node.js 'gateway.transaction.sale ({ montant: "10.00", paymentMethodNonce: nonceFromTheClient, customerId: "theCustomerId", Options: { storeInVaultOnSuccess: true} }, la fonction (err, résultat) { }); ' –

+0

La documentation est correcte, mais je peux voir la confusion. Vous imbriquez l'attribut 'id' dans les options client. Dans l'exemple que vous avez lié, l'attribut customerId est spécifié au niveau supérieur. – ThinkAboutIt

+1

Aha le moment Eureka !!! Bonne prise, ça aide toujours d'avoir une deuxième paire d'yeux! Merci beaucoup. –