创建新的Stripe源时,错误令牌无效

时间:2018-11-24 22:49:33

标签: asp.net-mvc stripe-payments

使用Stripe元素和Stripe.net。我获得了令牌并创建了一个客户,并使用以下代码向其收取费用-效果很好

            StripeConfiguration.SetApiKey(stripeKey);
            var charges = new StripeChargeService();
            var charge = charges.Create(new StripeChargeCreateOptions
            {
                Amount = thisCharge.Amount,
                Currency = "usd",
                Description = thisCharge.ProductDesc,
                StatementDescriptor = thisCharge.ProductDesc,
                //SourceTokenOrExistingSourceId = source.Id,

                ReceiptEmail = thisCharge.EmailAddress,
                CustomerId = thisCharge.StripeCustomerID,
                Metadata = new Dictionary<String, String>()
                    {
                        { "Name", thisCharge.CardHolderName }, { "Email",thisCharge.EmailAddress }
                    }
            });

然后我尝试使用与同一位客户的另一张卡(5555 5555 5555 4444)进行第二次充电,但是显然我遗漏了一些东西。

使用此代码

    static StripeSource NewSource(string stripeKey, Charge  charge)
    {
        StripeConfiguration.SetApiKey(stripeKey);
        var sourceOptions = new StripeSourceCreateOptions
        {
            Type = StripeSourceType.Card,
            Currency = "usd",
            Amount = charge.Amount,
            Token = charge.Token,              

            Owner = new StripeSourceOwner
            {
                Email = charge.EmailAddress,
                Name = charge.CardHolderName
            }
        };
        var sourceService = new StripeSourceService();
        StripeSource source = sourceService.Create(sourceOptions);
        return source;
    }

但是我得到这个错误:

  

无效的令牌ID:src _....

如果我跳过添加新来源的操作,则收费会通过,但会与原始来源相反。

因此显然缺少了一些东西……感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我还是Du,以防万一其他人遇到同样的问题。

当您从表单提交元素时,它会返回一个令牌,在本例中为源令牌“ src_”。因此,您无需创建新来源,只需将其分配给现有客户即可。

            StripeConfiguration.SetApiKey(stripeKey);
            var options = new StripeCustomerUpdateOptions
            {
                SourceToken = charge.Token,
            };

            var service = new StripeCustomerService();
            StripeCustomer customer = service.Update(charge.StripeCustomerID, options);