{"id":29182512,"url":"https://github.com/mrdhanz/digiflazz-go","last_synced_at":"2025-07-01T20:06:38.191Z","repository":{"id":301765360,"uuid":"1010231456","full_name":"mrdhanz/digiflazz-go","owner":"mrdhanz","description":"SDK Klien Go yang modern, tangguh, dan idiomatis untuk berinteraksi dengan [API Buyer Digiflazz]","archived":false,"fork":false,"pushed_at":"2025-06-28T17:00:24.000Z","size":8,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-06-28T18:19:54.857Z","etag":null,"topics":["client-api","deposit","digiflazz","go","golang","golang-package","payment","ppob","sdk","topup","voucher"],"latest_commit_sha":null,"homepage":"https://developer.digiflazz.com/api/buyer","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mrdhanz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-28T16:22:36.000Z","updated_at":"2025-06-28T17:00:27.000Z","dependencies_parsed_at":"2025-06-28T18:19:56.323Z","dependency_job_id":"55daa14c-42f0-4583-b809-89b5ddba5312","html_url":"https://github.com/mrdhanz/digiflazz-go","commit_stats":null,"previous_names":["mrdhanz/digiflazz-go"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mrdhanz/digiflazz-go","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrdhanz%2Fdigiflazz-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrdhanz%2Fdigiflazz-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrdhanz%2Fdigiflazz-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrdhanz%2Fdigiflazz-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mrdhanz","download_url":"https://codeload.github.com/mrdhanz/digiflazz-go/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrdhanz%2Fdigiflazz-go/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263029214,"owners_count":23402354,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client-api","deposit","digiflazz","go","golang","golang-package","payment","ppob","sdk","topup","voucher"],"created_at":"2025-07-01T20:06:36.947Z","updated_at":"2025-07-01T20:06:38.147Z","avatar_url":"https://github.com/mrdhanz.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Digiflazz Go SDK\n\nSDK Klien Go yang modern, tangguh, dan idiomatis untuk berinteraksi dengan [API Buyer Digiflazz](https://developer.digiflazz.com/api/buyer).\n\n**Disclaimer:** Pustaka ini dikembangkan secara independen dan tidak berafiliasi dengan Digiflazz.\n\n## Fitur\n\n- ✅ **Idiomatis**: Ditulis dengan mengikuti praktik terbaik Go, termasuk penggunaan `context.Context` dan penanganan error yang jelas.\n- 🛡️ **Tipe Aman**: Semua request dan response dimodelkan dengan `struct` Go.\n- 📦 **Tanpa Dependensi**: Hanya menggunakan pustaka standar Go.\n- 🚨 **Penanganan Error Jelas**: Menyediakan `APIError` kustom untuk error dari sisi API.\n- 🌐 **Cakupan Penuh**: Mendukung semua endpoint API Buyer, termasuk deposit dan verifikasi webhook.\n\n## Instalasi\n\n```bash\ngo get github.com/mrdhanz/digiflazz-go\n```\n\n## Penggunaan\n\n### Inisialisasi Klien\n\n```go\nimport (\n    \"context\"\n    \"fmt\"\n    \"log\"\n    \"github.com/mrdhanz/digiflazz-go\"\n)\n\nfunc main() {\n    username := \"USERNAME_ANDA\"\n    apiKey := \"API_KEY_ANDA\"\n\n    client := digiflazz.NewClient(username, apiKey)\n\n    // Contoh: Cek Saldo\n    ctx := context.Background()\n    saldo, err := client.CheckBalance(ctx)\n    if err != nil {\n        log.Fatalf(\"Gagal mengecek saldo: %v\", err)\n    }\n\n    fmt.Printf(\"Saldo Anda saat ini: %.2f\\n\", saldo.Deposit)\n}\n```\n\n### Penanganan Error\n\nLibrary ini membedakan antara error jaringan dan error dari API Digiflazz. Anda dapat menggunakan *type assertion* untuk menangani `APIError` secara spesifik.\n\n```go\n    // Contoh: Transaksi dengan SKU yang salah\n    _, err := client.TopUp(ctx, digiflazz.TransactionRequest{\n        BuyerSkuCode: \"sku-tidak-valid\",\n        CustomerNo:   \"081234567890\",\n        RefID:        \"unique-ref-id-123\",\n    })\n    if err != nil {\n        var apiErr *digiflazz.APIError\n        if errors.As(err, \u0026apiErr) {\n            // Ini adalah error yang dikembalikan oleh API\n            fmt.Printf(\"Error dari API: %s\\n\", apiErr.Message)\n            fmt.Printf(\"Response Code: %s\\n\", apiErr.ResponseCode)\n            if apiErr.ResponseCode == digiflazz.ResponseCodeSKUNotFound {\n                fmt.Println(\"Aksi: Harap periksa kembali SKU produk.\")\n            }\n        } else {\n            // Ini adalah error lain (jaringan, parsing, dll)\n            log.Fatalf(\"Error tak terduga: %v\", err)\n        }\n    }\n```\n\n### Penanganan Webhook\n\nGunakan fungsi `VerifyWebhookSignature` di dalam HTTP handler Anda untuk memvalidasi request yang masuk.\n\n**Contoh dengan `net/http`:**\n\n```go\nfunc webhookHandler(w http.ResponseWriter, r *http.Request) {\n    webhookSecret := \"SECRET_KEY_ANDA\"\n\n    // Baca raw body\n    body, err := io.ReadAll(r.Body)\n    if err != nil {\n        http.Error(w, \"Cannot read body\", http.StatusBadRequest)\n        return\n    }\n\n    // Verifikasi signature\n    signature := r.Header.Get(\"X-Hub-Signature\")\n    if err := digiflazz.VerifyWebhookSignature(webhookSecret, body, signature); err != nil {\n        log.Printf(\"Webhook verification failed: %v\", err)\n        http.Error(w, \"Invalid signature\", http.StatusForbidden)\n        return\n    }\n\n    // Signature valid, proses payload...\n    var payload digiflazz.WebhookTransactionPayload\n    if err := json.Unmarshal(body.Data, \u0026payload); err != nil {\n        http.Error(w, \"Cannot parse payload\", http.StatusBadRequest)\n        return\n    }\n    \n    fmt.Printf(\"Webhook diterima untuk ref_id: %s, status: %s\\n\", payload.RefID, payload.Status)\n\n    w.WriteHeader(http.StatusOK)\n    fmt.Fprintln(w, \"Webhook diterima\")\n}\n\nfunc main() {\n    http.HandleFunc(\"/webhook\", webhookHandler)\n    log.Println(\"Server webhook berjalan di :8080\")\n    http.ListenAndServe(\":8080\", nil)\n}\n```\n\n## Referensi API (Contoh)\n\n- `client.CheckBalance(ctx)`\n- `client.RequestDeposit(ctx, req)`\n- `client.PriceList(ctx, req)`\n- `client.TopUp(ctx, req)`\n- `client.InquiryPasca(ctx, req)`\n- `client.PayPasca(ctx, req)`\n- `client.CheckStatus(ctx, req)`\n- `client.InquiryPln(ctx, req)`\n\n## Lisensi\n\n[MIT](LICENSE)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrdhanz%2Fdigiflazz-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrdhanz%2Fdigiflazz-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrdhanz%2Fdigiflazz-go/lists"}