2017-04-21 157 views
-1

我正在创建一个简单的网页,其中Stripe Checkout将提示用户输入他们的卡信息,生成令牌并将其发送给我的后端Go webserver,该服务器处理该令牌的付款。我遇到的问题是,当我得到的令牌,我尝试创建一个客户,设置源通过条纹产生的原因,但我得到这个响应每次:将费用与带有条纹的客户相关联

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:   "[email protected]", 
} 

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

问题寻求帮助调试(“?为什么不是这个代码工作”)必须包括所期望的行为,一个具体问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者无益。请参阅:[如何创建一个最小,完整和可验证的示例。](http://stackoverflow.com/help/mcve) – peterSO

回答

1

原来的问题是设置令牌源上的电荷PARAMS后我已经设定了他是我正在收费的新客户的来源。以下为预计将创造新的客户和准与客户新的收费工作:

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

customerParams := &stripe.CustomerParams{ 
    Desc:   "Customer for xyz.com", 
    Email:   "[email protected]", 
} 

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) 
0

这是预期的:您刚创建的客户没有附加付款源,因此他们无法支付1.00美元的费用。您可以在创建客户上述成功通过,例如,使用测试的一个标记:

customerParams := &stripe.CustomerParams{ 
    Desc:   "Customer for xyz.com", 
    Email:   "[email protected]", 
    Source:  "test_visa" 
} 

更多关于测试卡和来源这里:https://stripe.com/docs/testing#cards

你当然会希望使用元素或Google Checkout来标记卡号在生产中的应用,这可以确保原料信用卡号码只传递到条纹,而不是你的应用程序服务器: https://stripe.com/docs/elements

+0

那么,如何为该新客户创建一个付款源,然后将其与费用绑定?我已经有Checkout标记卡号。 –

+0

通过在“创建客户”请求中的'source'参数中传递令牌,您可以同时创建客户的付款来源。由于它是一个新客户,他们将只有一个支付来源,您可以通过传递'customer = cus.ID'来收取该来源,如同您在下面所做的那样。如果稍后您有一个拥有多个来源的客户,则可以通过将'customer'和'source'传递给“创建费用”来指定使用哪一个客户: https://stripe.com/docs/api/ #create_charge-customer https://stripe.com/docs/api/#create_charge-source – hpar

+0

我在创建客户请求中设置源。那是什么不工作。 –