无法通过应用引擎Golang获取条带费用

时间:2017-11-15 09:08:40

标签: google-app-engine go stripe-payments

所以这是我的问题,我一直在关注app引擎用户的github自述文件,以便将条带实现到我的应用程序但事情是我无法使其工作,因为它似乎是http.DefaultTransport和http .DefaultClient在App Engine中不可用。

我已经看到,在自述文件中,您向我们展示了如何使用应用程序引擎初始化Stripe客户端,但我找不到任何计费卡示例,因此这就是我实现此实现的原因。

我已经习惯了这个问题,因为我一直在使用app引擎很长一段时间但由于某种原因我仍然会遇到这个问题:

cannot use stripe.BackendConfiguration literal (type stripe.BackendConfiguration) as type stripe.Backend in assignment: stripe.BackendConfiguration does not implement stripe.Backend (Call method has pointer receiver)

以下是代码:

func setStripeChargeClient(context context.Context, key string) *charge.Client {
    c := &charge.Client{}

    var b stripe.Backend
    b = stripe.BackendConfiguration{
        stripe.APIBackend, 
        "https://api.stripe.com/v1",
        urlfetch.Client(context),
    }

    c.Key = key
    c.B = b

    return c
}

在b分配上获取错误...

我无法弄清楚的是为什么这个例子似乎在网络上工作并且在我的应用程序中不起作用,如果你能在这一点上取悦我,我会在你的债务哈哈哈

然后以这种方式调用

stripeClient := setStripeChargeClient(context, "sk_live_key »)

3 个答案:

答案 0 :(得分:0)

错误消息告诉您问题。 stripe.BackendConfiguration类型不实现stripe.Backend接口。错误消息还提供了有用的提示,即缺少的Call方法在指针接收器上。

修复方法是使用指针值:

b = &stripe.BackendConfiguration{  // note the &
    stripe.APIBackend, 
    "https://api.stripe.com/v1",
    urlfetch.Client(context),
}

请参阅specification regarding method sets。值接收器的方法集不包括指针接收器方法。

答案 1 :(得分:0)

好的,最后通过这样做得到了解决方案:

func setStripeChargeClient(context context.Context, key string) *charge.Client {
       c := &charge.Client{}

       //SETTING THE CLIENT WITH URL FETCH PROPERLY
       fetch := &http.Client{
              Transport: &urlfetch.Transport{
              Context: context,
        },
       }

     //USE SetHTTPClient method to switch httpClient
     stripe.SetHTTPClient(fetch)

     var b stripe.Backend
     b = &stripe.BackendConfiguration{stripe.APIBackend, 
     "https://api.stripe.com/v1",fetch}

     c.Key = key
     c.B = b

     return c
}

答案 2 :(得分:0)

根据Stripe的GAE建议,这是我的解决方案:

func myHandler(w http.ResponseWriter, r *http.Request) {
    c := appengine.NewContext(r)
    myStripeKey := "pk_test_ABCDEF..."
    httpClient := urlfetch.Client(c)
    stripeClient := client.New(myStripeKey, stripe.NewBackends(httpClient))
    chargeParams := &stripe.ChargeParams{
        Amount:    uint64(totalCents),
        Currency:  "usd",
        Desc:      description,
        Email:     email,
        Statement: "MyCompany",
    }
    chargeParams.SetSource(token)
    charge, chargeErr := stripeClient.Charges.New(chargeParams)