実際簡単すぎて特に書くことは無いのだが忘却録的に
エラー内容は以下
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
}