LoginSignup
0
0

More than 5 years have passed since last update.

GAE+GO+echoでpayjpを使う時にhttp.DefaultClient are not available in App Engineで怒られる時の対処

Posted at

実際簡単すぎて特に書くことは無いのだが忘却録的に

エラー内容は以下

ERROR: %!(EXTRA *url.Error=Post https://api.pay.jp/v1/charges: http.DefaultTransport and http.DefaultClient are not available in App Engine. See https://cloud.google.com/appengine/docs/go/urlfetch/)

エラーが出ていた時の初期化処理はこちら

    // 初期化
    pay := payjp.New("秘密鍵", nil)

エラー解消後。

    //通信にGAEのクライアントを使うためここで取得
    ac := appengine.NewContext(c.Request())
    client := urlfetch.Client(ac)

    // 初期化
    pay := payjp.New("秘密鍵", client)

なんのことはなく、GAEから外へ通信を行うにはGAE用のクライアントを使わなければならないということだった。

せっかくなので一通りのコード

package middleware

import (
    "appengine"
    "appengine/urlfetch"
    "github.com/labstack/echo"
    "github.com/payjp/payjp-go/v1"
)

type PayResponse struct {
    Paid     bool
    Captured bool
    Amount   int64
}

func PayJpCharge(c echo.Context, Token string, Amount int, UserName string) (PayResponse, error) {

    //通信にGAEのクライアントを使うためここで取得
    ac := appengine.NewContext(c.Request())
    client := urlfetch.Client(ac)

    // 初期化
    pay := payjp.New("秘密鍵", client)

    // 支払い実行
    charge, err := pay.Charge.Create(Amount, payjp.Charge{
        Currency: "jpy",
        // Tokenを設定
        CardToken: Token,
        Capture:   true,
        // 概要のテキストを設定
        Description: UserName,
    })
    if err != nil {
        return PayResponse{}, err
    }

    // 支払った結果から、Response生成
    res := PayResponse{
        Paid:     charge.Paid,
        Captured: charge.Captured,
        Amount:   int64(charge.Amount),
    }

    return res, nil
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0