Documentation Index
Fetch the complete documentation index at: https://waffo.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
動作要件
- Go 1.20+
- 外部依存なし(標準ライブラリのみ)
インストール
go get github.com/waffo-com/waffo-go
初期化
package main
import (
"log"
waffo "github.com/waffo-com/waffo-go"
"github.com/waffo-com/waffo-go/config"
)
func main() {
cfg, err := config.NewConfigBuilder().
APIKey("your-api-key").
PrivateKey("your-base64-encoded-private-key").
WaffoPublicKey("waffo-public-key").
MerchantID("your-merchant-id").
Environment(config.Sandbox).
Build()
if err != nil {
log.Fatal(err)
}
client := waffo.New(cfg)
}
決済
import (
"context"
"github.com/google/uuid"
"github.com/waffo-com/waffo-go/types/order"
)
ctx := context.Background()
paymentRequestID := uuid.New().String()[:32]
resp, err := client.Order().Create(ctx, &order.CreateOrderParams{
PaymentRequestID: paymentRequestID,
MerchantOrderID: "ORDER-" + uuid.New().String()[:8],
OrderAmount: "99.99",
OrderCurrency: "USD",
OrderDescription: "Premium Subscription",
NotifyURL: "https://your-site.com/webhook",
}, nil)
if err != nil {
log.Fatal(err)
}
if resp.IsSuccess() {
data := resp.GetData()
fmt.Printf("Order ID: %s\n", data.AcquiringOrderID)
}
Webhook の処理
import "github.com/waffo-com/waffo-go/core"
handler := client.Webhook().
OnPayment(func(n *core.PaymentNotification) {
fmt.Printf("Payment %s: %s\n", n.PaymentRequestID, n.OrderStatus)
}).
OnRefund(func(n *core.RefundNotification) {
fmt.Printf("Refund %s: %s\n", n.RefundRequestID, n.RefundStatus)
})
// HTTP ハンドラ
func webhookHandler(w http.ResponseWriter, r *http.Request) {
body, _ := io.ReadAll(r.Body)
signature := r.Header.Get("X-SIGNATURE")
result := handler.HandleWebhook(string(body), signature)
w.Header().Set("X-SIGNATURE", result.ResponseSignature)
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(200)
w.Write([]byte(result.ResponseBody))
}
エラーハンドリング
import "github.com/waffo-com/waffo-go/core"
resp, err := client.Order().Create(ctx, params, nil)
if err != nil {
var unknownErr *core.WaffoUnknownStatusError
if errors.As(err, &unknownErr) {
// 重要: 決済が成功している可能性があります。照会 API で確認してください。
}
var waffoErr *core.WaffoError
if errors.As(err, &waffoErr) {
// クライアント側のエラー
}
}