Stripe - токен против источника, смена источника по умолчанию - PullRequest
0 голосов
/ 13 марта 2019

Я следую учебному пособию здесь , сделанному разработчиком из Google.

В статье говорится:

Stripe предлагает два способа созданияспособы оплаты: токены и источники.Токены одноразовые.При подключении к клиенту источники могут использоваться более одного раза.

То, что я делал, я создавал создание Token через stripe.createToken(cardToSave, object : TokenCallback {...} в моем приложении для Android и сохранялэто в мою БД.Это запускает облачную функцию addPaymentSource, которая создает «источник платежа (карту)», который сохраняется в моей БД:

облачная функция addPaymentSource

exports.addPaymentSource = functions.database
    .ref('/stripe_customers/{userId}/sources/{pushId}/token').onWrite((change, context) => {
      const source = change.after.val();
      if (source === null){
        return null;
      }
      return admin.database().ref(`/stripe_customers/${context.params.userId}/customer_id`)
          .once('value').then((snapshot) => {
            return snapshot.val();
          }).then((customer) => {
            return stripe.customers.createSource(customer, {source:source});
          }).then((response) => {
            return change.after.ref.parent.set(response);
          }, (error) => {
            return change.after.ref.parent.child('error').set(userFacingMessage(error));
          }).then(() => {
            return reportError(error, {user: context.params.userId});
          });
        });

Итакэто «Источник», который я могу использовать для оплаты?Я думаю, это потому, что я могу создать несколько charges, используя этот "источник".

Часть, в которой я запутался, это то, что я использовал токен для создания источника (или около того).я думаю это источник).Это правильно?

Кроме того, всякий раз, когда я добавляю другой источник / карту, новая карта добавляется в путь "stripe_customers/$currentUser/sources/" рядом со старой картой.Теперь, когда я нажимаю, чтобы заплатить, он все еще заряжает старую карту.Как переключить карты на новую, которая была добавлена?

РЕДАКТИРОВАТЬ

На веб-сайте Stripe:

Если владелец картыне имеет карты по умолчанию, тогда новая карта станет стандартнойОднако, если у владельца уже есть значение по умолчанию, оно не изменится.Чтобы изменить значение по умолчанию, вы должны либо обновить клиента, чтобы он имел новый источник по умолчанию, либо обновить получателя, чтобы иметь новый

, поэтому я попытался обновить default_source, но это неРабота.Честно говоря, я не обладаю знаниями в JS, и я просто делаю это здесь ... этот код выдает мне ошибку

exports.addPaymentSource = functions.database
    .ref('/stripe_customers/{userId}/sources/{pushId}/token').onWrite((change, context) => {
      const source = change.after.val();
      if (source === null){
        return null;
      }
      return admin.database().ref(`/stripe_customers/${context.params.userId}/customer_id`)
          .once('value').then((snapshot) => {
            return snapshot.val();
          }).then((customer) => {
            return stripe.customers.createSource(customer, {source:source});
          }).then((customer) =>{ // look here
            return stripe.customers.update(customer.customer_id,{default_source: source}) // and here
          }).then((response) => {
            return change.after.ref.parent.set(response);
          }, (error) => {
            return change.after.ref.parent.child('error').set(userFacingMessage(error));
          }).then(() => {
            return reportError(error, {user: context.params.userId});
          });
        });

1 Ответ

0 голосов
/ 13 марта 2019

Посмотрите здесь: https://stripe.com/docs/sources/customers

Ваш код использует токен Stripe и использует его для создания источника, который затем сохраняется у вашего клиента.Затем вы можете повторно использовать Источник для осуществления платежей для этого клиента.

Для вашего второго вопроса stripe.customers.createSource должен автоматически отключить существующий Источник и заменить его тем, который вы создали.Если вы не видите такого поведения, вы можете использовать default_source, чтобы установить новый источник в качестве нового значения по умолчанию для вашего клиента: https://stripe.com/docs/sources/customers#attaching-a-source-to-an-existing-customer-object

...