2017-04-21 156 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

我在創建客戶請求中設置源。那是什麼不工作。 –