{"id":13414012,"url":"https://github.com/Kachit/dusupay-sdk-go","last_synced_at":"2025-03-14T20:31:01.223Z","repository":{"id":80551748,"uuid":"458756664","full_name":"Kachit/dusupay-sdk-go","owner":"Kachit","description":"Golang SDK for Dusupay payment gateway API (Unofficial)","archived":false,"fork":false,"pushed_at":"2022-12-06T19:43:08.000Z","size":65,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-04-22T13:32:23.514Z","etag":null,"topics":["api","api-client","dusupay","golang","payment-gateway","payment-integration","sdk","sdk-go","unofficial"],"latest_commit_sha":null,"homepage":"https://docs.dusupay.com","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/Kachit.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}},"created_at":"2022-02-13T08:53:24.000Z","updated_at":"2023-01-20T15:45:55.000Z","dependencies_parsed_at":"2023-06-09T05:15:21.571Z","dependency_job_id":null,"html_url":"https://github.com/Kachit/dusupay-sdk-go","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kachit%2Fdusupay-sdk-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kachit%2Fdusupay-sdk-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kachit%2Fdusupay-sdk-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kachit%2Fdusupay-sdk-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Kachit","download_url":"https://codeload.github.com/Kachit/dusupay-sdk-go/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243642073,"owners_count":20323954,"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":["api","api-client","dusupay","golang","payment-gateway","payment-integration","sdk","sdk-go","unofficial"],"created_at":"2024-07-30T20:01:55.177Z","updated_at":"2025-03-14T20:31:00.922Z","avatar_url":"https://github.com/Kachit.png","language":"Go","funding_links":[],"categories":["Third-party APIs","第三方api"],"sub_categories":["Utility/Miscellaneous","实用程序/Miscellaneous","Fail injection"],"readme":"# Dusupay API SDK GO (Unofficial)\n[![Build Status](https://app.travis-ci.com/Kachit/dusupay-sdk-go.svg?branch=master)](https://app.travis-ci.com/github/Kachit/dusupay-sdk-go)\n[![Codecov](https://codecov.io/gh/Kachit/dusupay-sdk-go/branch/master/graph/badge.svg)](https://codecov.io/gh/Kachit/dusupay-sdk-go)\n[![Go Report Card](https://goreportcard.com/badge/github.com/kachit/dusupay-sdk-go)](https://goreportcard.com/report/github.com/kachit/dusupay-sdk-go)\n[![Version](https://img.shields.io/github/go-mod/go-version/Kachit/dusupay-sdk-go)](https://go.dev/doc/go1.14)\n[![Release](https://img.shields.io/github/v/release/Kachit/dusupay-sdk-go.svg)](https://github.com/Kachit/dusupay-sdk-go/releases)\n[![License](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/kachit/dusupay-sdk-go/blob/master/LICENSE)\n[![GoDoc](https://pkg.go.dev/badge/github.com/kachit/dusupay-sdk-go)](https://pkg.go.dev/github.com/kachit/dusupay-sdk-go)\n[![Mentioned in Awesome Go](https://awesome.re/mentioned-badge.svg)](https://github.com/avelino/awesome-go#third-party-apis)\n\n## Description\nUnofficial Dusupay payment gateway API Client for Go\n\n## API documentation\nhttps://docs.dusupay.com\n\n## Installation\n```shell\ngo get -u github.com/kachit/dusupay-sdk-go\n```\n\n## Usage\n```go\npackage main\n\nimport (\n    \"fmt\"\n    \"context\"\n    dusupay \"github.com/kachit/dusupay-sdk-go\"\n)\n\nfunc main(){\n    // Create a client instance\n    cfg := dusupay.NewConfig(\"Your public key\", \"Your secret key\")\n    client, err := dusupay.NewClientFromConfig(cfg, nil)\n    if err != nil {\n        fmt.Printf(\"config parameter error \" + err.Error())\n        panic(err)\n    }\n}\n```\n### Get balances list\n```go\nctx := context.Background()\nbalances, response, err := client.Merchants().GetBalances(ctx)\n\nif err != nil {\n    fmt.Printf(\"Wrong API request \" + err.Error())\n    panic(err)\n}\n\n//Dump raw response\nfmt.Println(response)\n\n//Dump result\nfmt.Println(balances.Status)\nfmt.Println(balances.Code)\nfmt.Println(balances.Message)\nfmt.Println((*balances.Data)[0].Currency)\nfmt.Println((*balances.Data)[0].Balance)\n```\n\n### Get banks list\n```go\nctx := context.Background()\nfilter := \u0026dusupay.BanksFilter{TransactionType: dusupay.TransactionTypePayout, Country: dusupay.CountryCodeGhana}\nbanks, response, err := client.Banks().GetList(ctx, filter)\n\nif err != nil {\n    fmt.Printf(\"Wrong API request \" + err.Error())\n    panic(err)\n}\n\n//Dump raw response\nfmt.Println(response)\n\n//Dump result\nfmt.Println(banks.Status)\nfmt.Println(banks.Code)\nfmt.Println(banks.Message)\nfmt.Println((*banks.Data)[0].Id)\nfmt.Println((*banks.Data)[0].Name)\nfmt.Println((*banks.Data)[0].BankCode)\n```\n\n### Get banks branches list\n```go\nctx := context.Background()\nfilter := \u0026dusupay.BanksBranchesFilter{Country: dusupay.CountryCodeGhana, Bank: \"BankCode\"}\nbranches, response, err := client.Banks().GetBranchesList(ctx, filter)\n\nif err != nil {\n    fmt.Printf(\"Wrong API request \" + err.Error())\n    panic(err)\n}\n\n//Dump raw response\nfmt.Println(response)\n\n//Dump result\nfmt.Println(branches.Status)\nfmt.Println(branches.Code)\nfmt.Println(branches.Message)\nfmt.Println((*branches.Data)[0].Name)\nfmt.Println((*branches.Data)[0].Code)\n```\n\n### Get providers list\n```go\nctx := context.Background()\nfilter := \u0026dusupay.ProvidersFilter{Country: dusupay.CountryCodeUganda, Method: dusupay.TransactionMethodMobileMoney, TransactionType: dusupay.TransactionTypeCollection}\nproviders, response, err := client.Providers().GetList(ctx, filter)\n\nif err != nil {\n    fmt.Printf(\"Wrong API request \" + err.Error())\n    panic(err)\n}\n\n//Dump raw response\nfmt.Println(response)\n\n//Dump result\nfmt.Println(providers.Status)\nfmt.Println(providers.Code)\nfmt.Println(providers.Message)\nfmt.Println((*providers.Data)[0].ID)\nfmt.Println((*providers.Data)[0].Name)\n```\n\n### Create collection request\n```go\nctx := context.Background()\nrequest := \u0026dusupay.CollectionRequest{\n    Currency:          dusupay.CurrencyCodeUGX,\n    Amount:            10000,\n    Method:            dusupay.TransactionMethodMobileMoney,\n    ProviderId:        \"airtel_ug\",\n    MerchantReference: \"1234567891\",\n    RedirectUrl:       \"http://foo.bar\",\n    Narration:         \"narration\",\n    AccountNumber:         \"256752000123\",\n    MobileMoneyHpp:         true,\n}\nresult, response, err := client.Collections().Create(ctx, request)\n\nif err != nil {\n    fmt.Printf(\"Wrong API request \" + err.Error())\n    panic(err)\n}\n\n//Dump raw response\nfmt.Println(response)\n\n//Dump result\nfmt.Println(result.Status)\nfmt.Println(result.Code)\nfmt.Println(result.Message)\nfmt.Println((*result.Data).ID)\nfmt.Println((*result.Data).PaymentURL)\n```\n\n### Create payout request\n```go\nctx := context.Background()\nrequest := \u0026dusupay.PayoutRequest{\n    Currency:          dusupay.CurrencyCodeUGX,\n    Amount:            10000,\n    Method:            dusupay.TransactionMethodMobileMoney,\n    ProviderId:        \"airtel_ug\",\n    MerchantReference: \"1234567892\",\n    Narration:         \"narration\",\n    AccountNumber:         \"256752000123\",\n    AccountName:         \"Foo Bar\",\n}\nresult, response, err := client.Payouts().Create(ctx, request)\n\nif err != nil {\n    fmt.Printf(\"Wrong API request \" + err.Error())\n    panic(err)\n}\n\n//Dump raw response\nfmt.Println(response)\n\n//Dump result\nfmt.Println(result.Status)\nfmt.Println(result.Code)\nfmt.Println(result.Message)\nfmt.Println((*result.Data).ID)\n```\n\n### Create refund request\n```go\nctx := context.Background()\nrequest := \u0026dusupay.RefundRequest{\n    Amount:            100,\n    InternalReference:            \"DUSUPAY5FNZCVUKZ8C0KZE\",\n}\nresult, response, err := client.Refunds().Create(ctx, request)\n\nif err != nil {\n    fmt.Printf(\"Wrong API request \" + err.Error())\n    panic(err)\n}\n\n//Dump raw response\nfmt.Println(response)\n\n//Dump result\nfmt.Println(result.Status)\nfmt.Println(result.Code)\nfmt.Println(result.Message)\nfmt.Println((*result.Data).ID)\n```\n\n### Verify webhook signature\n```go\nrequestPayload := `\n{\n    \"id\": 226,\n    \"request_amount\": 10,\n    \"request_currency\": \"USD\",\n    \"account_amount\": 737.9934,\n    \"account_currency\": \"UGX\",\n    \"transaction_fee\": 21.4018,\n    \"total_credit\": 716.5916,\n    \"customer_charged\": false,\n    \"provider_id\": \"mtn_ug\",\n    \"merchant_reference\": \"76859aae-f148-48c5-9901-2e474cf19b71\",\n    \"internal_reference\": \"DUSUPAY405GZM1G5JXGA71IK\",\n    \"transaction_status\": \"COMPLETED\",\n    \"transaction_type\": \"collection\",\n    \"message\": \"Transaction Completed Successfully\"\n}\n`\nrequestUri := \"https://www.sample-url.com/callback\"\nsignature := \"value from 'dusupay-signature' http header\"\n\nvar webhook dusupay.CollectionWebhook\n_ = json.Unmarshal(requestPayload, \u0026webhook)\n\nrawBytes, _ := ioutil.ReadFile(\"path/to/dusupay-public-key.pem\")\n\nvalidator, _ := dusupay.NewSignatureValidator(rawBytes)\nerr := validator.ValidateSignature(webhook, requestUri, signature)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FKachit%2Fdusupay-sdk-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FKachit%2Fdusupay-sdk-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FKachit%2Fdusupay-sdk-go/lists"}