Search code examples
javascriptstripe-paymentsstripe-connect

Updating Stripe accounts returns "Error: Stripe: "id" must be a string, but got: object"


I am trying to update a Stripe account to add an external account token to be charged later as shown in the example here.

var stripe = require("stripe")("sk_test_xxxxxxxxxxxxx"),    
    knex   = require("knex")(config);

router.post("/paymentcardinfo",middleware.isLoggedIn,function(req,res){
      knex("users.stripe").select("stripe_id_key")
      .then((stripeID) => {
          stripeID = stripeID[0].stripe_id_key;
          console.log("My Stripe ID: "stripeID);
          console.log("stripeID var type:", typeof stripeID);
          stripe.accounts.update({
            stripeID,
            external_account: req.body.stripeToken,
        }, function(err,acct) {
          if(err){
            console.log(err);
          } else {
          console.log("SUCCESS ********",acct);
      // asynchronously called
        }})
      })
      .catch((e) => {
          console.log(e);
          res.redirect("/paymentcardinfo")
      });
    });

Which returns the following

     My Stripe ID:  acct_xxxxxxxxxxxxx
     stripeID var type:  string
    [Error: Stripe: "id" must be a string, but got: object (on API request to `POST /accounts/{id}`)]

where acct_xxxxxxxxxxx is the user's stored account ID. Based on the first console.log value, it would appear that stripeID is a string and not an object, which makes me unsure of how to proceed with this error.


Solution

  • Although the documentation specifies

     stripe.accounts.update({
      {CONNECTED_STRIPE_ACCOUNT_ID},
      metadata: {internal_id: 42},
    }).then(function(acct) {
      // asynchronously called
    });`
    

    The following worked for me

    stripe.accounts.update(
               CONNECTED_STRIPE_ACCOUNT_ID,
               {
                metadata: {internal_id:42},
              }
              ).then((account) => {
             // response to successful action