Go 将费用与带条纹的客户关联
我正在创建一个简单的网页,其中将提示用户输入他们的卡信息,生成一个令牌,并将其发送到我的后端Go web服务器,该服务器处理该令牌的付款。我遇到的问题是,当我获得令牌时,我尝试创建一个客户,并将源设置为Stripe创建的令牌,但每次我都会得到以下响应:Go 将费用与带条纹的客户关联,go,stripe-payments,Go,Stripe Payments,我正在创建一个简单的网页,其中将提示用户输入他们的卡信息,生成一个令牌,并将其发送到我的后端Go web服务器,该服务器处理该令牌的付款。我遇到的问题是,当我获得令牌时,我尝试创建一个客户,并将源设置为Stripe创建的令牌,但每次我都会得到以下响应: charge failed: {"type":"invalid_request_error","message":"Customer cus_######### does not have a linked source with ID tok_
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 Dashboard中该客户的日志中显示了尝试充电。因此,它试图将费用与正确的客户相关联,但是失败了,因为令牌是在没有考虑特定客户的情况下生成的?我真的不确定发生了什么事
我在后端拥有的接受令牌并处理所有内容的代码如下:
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)
另外,如果我删除了这个示例中的客户部分,那么使用上面的代码就可以正常地支付费用。它只是没有明显地将费用与客户联系起来。然而,一旦我试图让客户付费,它就失败了 这是意料之中的:您刚刚创建的客户没有附加付款来源,因此他们无法支付您1美元的费用。例如,您可以通过在创建客户时使用其中一个测试令牌使上述操作成功:
customerParams := &stripe.CustomerParams{
Desc: "Customer for xyz.com",
Email: "test@email.com",
Source: "test_visa"
}
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)
有关测试卡和来源的更多信息,请参见:
您当然希望在生产应用程序中使用元素或签出来标记卡号,从而确保原始信用卡号只传递给Stripe而不是应用程序服务器:
原来问题是在我已经设置了我正在收费的新客户的来源之后,在收费参数上设置了令牌来源。以下各项按预期工作,以创建新客户并将新费用与客户关联:
customerParams := &stripe.CustomerParams{
Desc: "Customer for xyz.com",
Email: "test@email.com",
Source: "test_visa"
}
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)
我对条带订阅也有同样的问题 底线,如果客户已经存在,但没有有效的付款来源
func updateCustomer(客户ID、电子邮件、源字符串)(cus*stripe.Customer,err error){
参数:=&stripe.CustomerParams{
电邮:电邮,,
}
参数设置源(源)
cus,err=customer.Update(custID,params)
返回
}
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:那么我如何为新客户创建付款来源,然后将其与费用挂钩?我已经将签出令牌化了卡号。通过在“创建客户”请求中的
source
参数中传递令牌,您可以同时创建客户的支付源。由于是新客户,他们只有一个付款来源,您可以通过传递customer=cus.ID
对该来源进行收费,如下所述。如果以后您有一个拥有多个来源的客户,那么您可以通过将customer
和source
传递到“创建费用”来指定使用哪一个来源:我正在创建客户请求中设置来源。我强烈建议使用以下链接写入条带支持:如果您有来自日志的请求ID,这将非常有用。当你查看仪表板日志时,它是URL中的req_XXX。我有类似的代码,去年用于订阅,但今天给了我相同的错误。