Payments — Go SDK

Create a transaction

tx, err := client.Transactions.Create(&simiz.TransactionParams{
    Amount:        5000,
    Currency:      "XAF",
    PaymentMethod: "ORANGE_MONEY",
    Payer: &simiz.Payer{
        Phone: "237690000000",
        Name:  "John Doe",
        Email: "john@example.com",
    },
    Description: "Order #12345",
    Reference:   "ORDER-123",
    Metadata: map[string]string{
        "order_id": "123",
    },
    CallbackURL: "https://your-site.com/webhooks/simiz",
    ReturnURL:   "https://your-site.com/success",
})

if err != nil {
    log.Fatal(err)
}

fmt.Printf("Transaction ID: %s\n", tx.ID)
fmt.Printf("Status: %s\n", tx.Status)

Retrieve a transaction

tx, err := client.Transactions.Retrieve("tx_xxx")
if err != nil {
    log.Fatal(err)
}

if tx.Status == "COMPLETED" {
    fmt.Println("Payment successful!")
}

List transactions

transactions, err := client.Transactions.List(&simiz.ListParams{
    Limit:        20,
    Status:       "COMPLETED",
    CreatedAfter: "2024-01-01",
})

for _, tx := range transactions.Data {
    fmt.Printf("%s: %d %s\n", tx.ID, tx.Amount, tx.Currency)
}

Create a refund

refund, err := client.Refunds.Create(&simiz.RefundParams{
    TransactionID: "tx_xxx",
    Amount:        2500,
    Reason:        "Item returned",
})

Webhook verification

func webhookHandler(w http.ResponseWriter, r *http.Request) {
    payload, _ := io.ReadAll(r.Body)
    signature := r.Header.Get("X-Simiz-Signature")

    ok := client.Webhooks.VerifySignature(payload, signature, webhookSecret)
    if !ok {
        http.Error(w, "Invalid signature", http.StatusUnauthorized)
        return
    }

    var event simiz.WebhookEvent
    json.Unmarshal(payload, &event)

    switch event.Type {
    case "payment.succeeded":
        fmt.Printf("Payment received: %s\n", event.Data.ID)
    case "payment.failed":
        fmt.Printf("Payment failed: %s\n", event.Data.ID)
    }

    w.WriteHeader(http.StatusOK)
    json.NewEncoder(w).Encode(map[string]bool{"received": true})
}