我正在创建一个简单的网页,其中Stripe Checkout将提示用户提供卡信息,生成令牌,并将其发送到我的后端Go网络服务器,处理该令牌的付款。我遇到的问题是,当我获得令牌时,我尝试创建一个客户并将源设置为Stripe创建的令牌,但我每次都会收到此响应:
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生成的卡充电失败。即使在我的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)
此外,如果我删除此示例的客户部分,则使用上述代码收取费用。它显然不会将费用与客户联系起来。但是,一旦我尝试将客户设置为收费,它就会失败。
答案 0 :(得分:2)
原来问题是在我已经设置了我正在充电的新客户的来源之后,在充电参数上设置了令牌源。以下工作按预期创建新客户并将新费用与客户关联:
https://localhost/wp-json/wc/v1/orders?consumer_key=ck_xxxxxxxxxxxxxx&consumer_secret=xxxxxxxxxxxxxxx
答案 1 :(得分:0)
预计:您刚刚创建的客户没有附加付款来源,因此他们无法支付1.00美元的费用。例如,在创建客户时使用其中一个测试令牌可以使上述成功:
/customers/new
有关测试卡和来源的更多信息,请访问:https://stripe.com/docs/testing#cards
您当然希望使用Elements或Checkout来标记生产应用程序中的卡号,这样可以确保原始信用卡号仅传递给Stripe而不是您的应用程序服务器: https://stripe.com/docs/elements
答案 2 :(得分:0)
我对条带订阅有同样的问题。
底线,如果客户已经存在而没有有效的付款来源;
使用新令牌更新现有客户,作为结帐来源,即 update customer
func updateCustomer(custID, email, source string) (cus *stripe.Customer, err error){
params := &stripe.CustomerParams{
Email:email,
}
params.SetSource(source)
cus, err = customer.Update(custID, params)
return
}