go - 使用 Stripe 将费用与客户相关联

标签 go stripe-payments

我正在创建一个简单的网页,其中 Stripe Checkout将提示用户输入他们的卡信息,生成一个 token ,并将其发送到我的后端 Go 网络服务器,该服务器处理该 token 的付款。我遇到的问题是,当我获得 token 时,我尝试创建一个客户并将源设置为 Stripe 创建的 token ,但我每次都会收到此响应:

charge failed: {"type":"invalid_request_error","message":"Customer cus_######### does not have a linked source with ID tok_#########.","code":"missing","param":"source","request_id":"req_######","status":404}

创建客户并将卡与该客户相关联就可以了。但是,根据 Stripe 生成的 token 对卡进行充电失败。即使在我的 Stripe 仪表板中该客户的日志中,它也显示了尝试的收费。所以,它试图将费用与正确的客户相关联,但失败了,因为 token 是在没有考虑特定客户的情况下生成的?我不太确定发生了什么。

我在后端接受 token 并处理所有内容的代码如下:

stripe.Key = "sk_test_################"

customerParams := &stripe.CustomerParams{
    Desc:          "Customer for xyz.com",
    Email:         "test@email.com",
}

err := customerParams.SetSource("tok_####################")
if err != nil {
    return nil, err
}

cus, err := customer.New(customerParams)
if err != nil {
    return nil, err
}

// Charge the user's card
cp := &stripe.ChargeParams{
    Amount:   100,
    Currency: "usd",
    Desc:     "some description",
    Customer: cus.ID,
}

err = cp.SetSource("tok_####################")
if err != nil {
    return nil, err
}

err = charge.New(cp)

此外,如果我删除此示例的客户部分,则使用上述代码即可正常进行收费。它只是没有明显地将费用与客户联系起来。但是,一旦我尝试向客户收费,它就会失败。

最佳答案

原来问题是在我已经设置了我正在收费的新客户的来源后,在收费参数上设置了 token 来源。以下操作按预期工作以创建新客户并将新费用与客户相关联:

stripe.Key = "sk_test_################"

customerParams := &stripe.CustomerParams{
    Desc:          "Customer for xyz.com",
    Email:         "test@email.com",
}

err := customerParams.SetSource("tok_####################")
if err != nil {
    return nil, err
}

cus, err := customer.New(customerParams)
if err != nil {
    return nil, err
}

// Charge the user's card
cp := &stripe.ChargeParams{
    Amount:   100,
    Currency: "usd",
    Desc:     "some description",
    Customer: cus.ID,
}

err = charge.New(cp)

关于go - 使用 Stripe 将费用与客户相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43545819/

相关文章:

go - 用值作为列表创建字典

go - 将Gorm查询映射到结构列表

json - 将 EasyJSON 与 golang 结合使用

javascript - 更新 Stripe 客户地址而非卡信息

stripe-payments - 如何防止客户添加同一张信用卡

mongodb - mongo.Connect() 在使用 mongo-go-driver 的 Go 中无法按预期工作

go - go语言有RETS包吗?

node.js - 将 Firebase 函数中的 Stripe 响应返回到 Swift 应用程序

javascript - Stripe 自定义结帐未发布

stripe-payments - Stripe 结帐API : setting a statement descriptor for subscriptions