条纹-令牌与来源,更改默认来源

时间:2019-03-13 02:07:04

标签: javascript android firebase google-cloud-functions stripe-payments

我正在跟踪Google开发人员制作的教程here

在文章中说:

  

Stripe提供了两种创建付款方式的方式:令牌和来源。令牌是一次性的。与客户建立联系后,可以多次使用这些来源。

我一直在做的事情是,我正在通过Android应用中的Token创建一个stripe.createToken(cardToSave, object : TokenCallback {...},并将其保存到数据库中。这会触发一个云功能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,或将收件人更新为具有新的

所以我尝试更新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});
          });
        });

0 个答案:

没有答案