{"id":21445217,"url":"https://github.com/revenuemonster/rm-go-sdk","last_synced_at":"2025-07-14T18:32:23.257Z","repository":{"id":37720786,"uuid":"165585660","full_name":"RevenueMonster/rm-go-sdk","owner":"RevenueMonster","description":"Revenue Monster SDK","archived":false,"fork":false,"pushed_at":"2024-11-22T05:57:32.000Z","size":210,"stargazers_count":3,"open_issues_count":2,"forks_count":12,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-11-22T06:28:00.658Z","etag":null,"topics":["go","rm","rm-sdk"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RevenueMonster.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2019-01-14T02:56:54.000Z","updated_at":"2024-11-22T05:56:47.000Z","dependencies_parsed_at":"2023-07-15T07:18:37.012Z","dependency_job_id":"a152b5dd-3fce-406d-abc0-458a2112790a","html_url":"https://github.com/RevenueMonster/rm-go-sdk","commit_stats":null,"previous_names":["revenuemonster/rm-sdk-go"],"tags_count":98,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RevenueMonster%2Frm-go-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RevenueMonster%2Frm-go-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RevenueMonster%2Frm-go-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RevenueMonster%2Frm-go-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RevenueMonster","download_url":"https://codeload.github.com/RevenueMonster/rm-go-sdk/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225992490,"owners_count":17556481,"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":["go","rm","rm-sdk"],"created_at":"2024-11-23T02:24:57.683Z","updated_at":"2024-11-23T02:24:58.266Z","avatar_url":"https://github.com/RevenueMonster.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# API-SDK-Go\nThis is an Go SDK that maps some of the RESTful methods of Open API that are documented at [doc.revenuemonster.my](https://doc.revenuemonster.my/).\n\n## Getting Started\nThese instructions will get you a copy of the project up and running on your local machine for development and testing purposes.\n\nThe golang version 1.11 and above\n\n### Covered Functions\n- [x] Signature Algorithm\n- [x] Client Credentials (Authentication)\n- [x] Refresh Token (Authentication)\n- [ ] Get Merchant Profile\n- [x] Get Merchant Subscriptions\n- [x] Get Stores\n- [ ] Get Stores By ID\n- [ ] Create Store\n- [ ] Update Store\n- [ ] Delete Store\n- [x] Get User Profile\n- [x] Payment (Transaction QR) - Create Transaction QRCode/URL\n- [] Payment (Transaction QR) - Get Transaction QRCode/URL\n- [x] Payment (Transaction QR) - Get Transaction QRCode/URL By Code\n- [x] Payment (Transaction QR) - Get Transactions By Code\n- [x] Payment (Quick Pay) - Payment\n- [x] Payment (Quick Pay) - Refund\n- [x] Payment (Quick Pay) - Reverse\n- [ ] Payment (Quick Pay) - Get All Payment Transactions\n- [x] Payment (Quick Pay) - Get All Payment Transaction By ID\n- [] Payment (Quick Pay) - Get All Payment Transaction By OrderID\n- [ ] Payment (Quick Pay) - Daily Settlement Report\n- [x] Register Loyalty Member\n- [ ] Give Loyalty Point\n- [ ] Get Loyalty Members\n- [x] Get Loyalty Member\n- [ ] Get Loyalty Member Point History\n- [ ] Issue Voucher\n- [ ] Void Voucher\n- [x] Get Voucher By Code\n- [x] Get Voucher Batches\n- [x] Get Voucher Batch By Key\n- [ ] Send Notification (Merchant)\n- [x] Send Notification (Store)\n- [ ] Send Notification (User)\n- [x] Sms Sending\n- [x] Create Delivery\n- [x] Get Delivery By Id\n- [x] Calculate Delivery Fee\n- [x] Ekyc - MyKad Recognition\n- [x] EKyc - Face Comparison\n- [x] Ekyc - Liveness Verification\n\n### Usage\n1. \"sandbox\" is for sandbox environment.\n2. \"production\" is for production environment.\n3. Get Client ID and Client Secret from portal.\n![ClientIDClientSecret](https://storage.googleapis.com/rm-portal-assets/img/rm-landing/clientIDclientSecret.png)\n4. Generate private key and publci key from portal.\n![PrivateKeyPublicKey](https://storage.googleapis.com/rm-portal-assets/img/rm-landing/privateKeypublicKey.PNG)\n5. Store private key for own use and public key at portal.\n![PastePublicKey](https://storage.googleapis.com/rm-portal-assets/img/rm-landing/pastePublicKey.png)\n6. Set environment variables at begining of the project before using any of the library functions.\n```\nEnvironment environment = new Environment();\nenvironment.setEnvironment(clientId, clientSecret, \"sandbox\");\n```\n\n* Sample to read private key file\n```\n\n```\n\n* Client Credentials (Authentication)\n    * To get refresh token and access token(expired after 2 hours) with using provided clientId and clientSecret\n```\n\n```\n\n* Authorization Code (Authentication)\n    * To get authorization code which a partner wants to request permission to develop an application of a merchant and exchange authorization code into access token and refresh token\n```go\n  oauthURL := sdk.NewClient(sdk.Client{\n    ID:         \"123456789\",\n    Secret:     \"123456789\",\n    IsSandbox:  true,\n    PrivateKey: []byte(`---private key---`),\n    PublicKey:  []byte(`---public key---`),\n  }).GetAuthorizationCodeURL(\n    \"123456789\",\n    \"http://google.com\",\n    \"manage_payment\",\n    \"manage_store\",\n  )\n```\n\n* Refresh Token (Authentication)\n    * To get new access token(expired after 2 hours) with using provided clientId and clientSecret (recommended to schedule to run this fucntion on every less than 2 hours) in order to avoid expired access token error\n```\n```\n\n* Create Transaction QRCode/URL (TransactionQR)\n    * To create static/dynamic QR code for user scanning merchant's displayed QR\n```\n```\n\n* Get Transaction QRCode/URL (TransactionQR)\n    * To get all QR Code(s) generated previously in the system\n```\n```\n\n* Get Transaction QRCode/URL By Code (TransactionQR)\n    * To get specific QR Code generated previously in the system, by passing in code in query parameter (/qrcode/...)\n```\n\n```\n\n* Get Transactions By Code (TransactionQR)\n    * To get all transactions under existing QR code, by passing in code in query parameter (/qrcode/.../transactions)\n```\n\n```\n\n* Payment (Quick Pay) - Payment\n    * To make payment by scanning barcode/authcode from user\n```\n```\n\n* Payment (Quick Pay) - Refund\n    * To refund the successful transactions\n```\n```\n\n* Payment (Quick Pay) - Reverse\n    * To reverse time-out or problematic transaction\n```\n```\n\n* Payment (Quick Pay) - Get Payment Transaction By ID\n    * To get details of a transaction by using transactionId\n```\n```\n\n* Payment (Quick Pay) - Get Payment Transaction By Order ID\n    * To get details of a transaction by using orderId\n```\n```\n\n* Push Notification ( Store ) - Send Notificaiton To Store By Store ID\n```go\nsdk.NewClient(sdk.Client{\n    ID:         \"123456789\",\n    Secret:     \"123456789\",\n    IsSandbox:  true,\n    PrivateKey: []byte(`---private key---`),\n    PublicKey:  []byte(`---public key---`),\n}).PushNotificationToStore(sdk.RequestPushNotificationToStore{\n    StoreID: \"123123123\",\n    Title:   \"Notification Title\",\n    Body:    \"Notification Body\",\n})\n```\n\n* Sms Sending - Send Sms To Specified Phone Number\n```go\nsdk.NewClient(sdk.Client{\n    ID:         \"123456789\",\n    Secret:     \"123456789\",\n    IsSandbox:  true,\n    PrivateKey: []byte(`---private key---`),\n    PublicKey:  []byte(`---public key---`),\n}).SendSms(sdk.RequestSendSms{\n    CountryCode: \"60\",\n    PhoneNumber: \"187824152\",\n    Message: \"Some message\",\n    Type: sdk.MessageTypeTAC,\n})\n```\n\n* Create Delivery - Create delivery \n```go\npointOne := sdk.DeliveryPoint{\n    Address: \"\",\n    EntraceNumber: \"\",\n    FloorNumber: \"\",\n    BuildingNumber: \"\",\n    Remark: \"\",\n    Contact: sdk.DeliveryPointContact{\n        Name: \"\",\n        PhoneNumber: \"\",\n    },\n}\n\npointTwo := sdk.DeliveryPoint{\n    Address: \"\",\n    EntraceNumber: \"\",\n    FloorNumber: \"\",\n    BuildingNumber: \"\",\n    Remark: \"\",\n    Contact: sdk.DeliveryPointContact{\n        Name: \"\",\n        PhoneNumber: \"\",\n    },\n}\n\nsdk.NewClient(sdk.Client{\n    ID:         \"123456789\",\n    Secret:     \"123456789\",\n    IsSandbox:  true,\n    PrivateKey: []byte(`---private key---`),\n    PublicKey:  []byte(`---public key---`),\n}).CreateDelivery(sdk.RequestCreateDelivery{\n    DeliveryVendor: sdk.DeliveryVendor{\n        Vendor: sdk.VendorTypeMrSpeedy,\n        Credential: \"\",\n    },\n    VehicleType: sdk.VehicleTypeMotobike,\n    Type: sdk.DeliveryTypeDocument,\n    IsCashAccount: true,\n    Points: []sdk.DeliveryContact{pointOne, pointTwo},\n})\n```\n\n* Calculate Delivery Fee - Calculate delivery fee before delivery is made \n```go\npointOne := sdk.DeliveryPoint{\n    Address: \"\",\n    EntraceNumber: \"\",\n    FloorNumber: \"\",\n    BuildingNumber: \"\",\n    Remark: \"\",\n    Contact: sdk.DeliveryPointContact{\n        Name: \"\",\n        PhoneNumber: \"\",\n    },\n}\n\npointTwo := sdk.DeliveryPoint{\n    Address: \"\",\n    EntraceNumber: \"\",\n    FloorNumber: \"\",\n    BuildingNumber: \"\",\n    Remark: \"\",\n    Contact: sdk.DeliveryPointContact{\n        Name: \"\",\n        PhoneNumber: \"\",\n    },\n}\n\nsdk.NewClient(sdk.Client{\n    ID:         \"123456789\",\n    Secret:     \"123456789\",\n    IsSandbox:  true,\n    PrivateKey: []byte(`---private key---`),\n    PublicKey:  []byte(`---public key---`),\n}).CalculateDeliveryFee(sdk.RequestCalculateDeliveryFee{\n    DeliveryVendor: sdk.DeliveryVendor{\n        Vendor: sdk.VendorTypeMrSpeedy,\n        Credential: \"\",\n    },\n    VehicleType: sdk.VehicleTypeMotobike,\n    Type: sdk.DeliveryTypeDocument,\n    IsCashAccount: true,\n    Points: []sdk.DeliveryContact{pointOne, pointTwo},\n})\n```\n\n* Get Delivery - Get delivery by id\n```go\nsdk.NewClient(sdk.Client{\n    ID:         \"123456789\",\n    Secret:     \"123456789\",\n    IsSandbox:  true,\n    PrivateKey: []byte(`---private key---`),\n    PublicKey:  []byte(`---public key---`),\n}).GetDeliveryByID(\"1\")\n```\n\n* Ekyc - MyKad Recognition\n```go\nsdk.NewClient(sdk.Client{\n    ID:         \"123456789\",\n    Secret:     \"123456789\",\n    IsSandbox:  true,\n    PrivateKey:  []byte(`---private key---`),\n    AccessToken: `access token`,\n}).EkycMyKad(sdk.RequestEkycMykad{\n    Image: `base64 image`, // an image that contains MyKad\n    NotifyUrl: `https://your-backend-notify-path` // a POST request handler to receive ekyc result\n})\n```\n\n* Ekyc - Face Comparison\n```go\nsdk.NewClient(sdk.Client{\n    ID:         \"123456789\",\n    Secret:     \"123456789\",\n    IsSandbox:  true,\n    PrivateKey:  []byte(`---private key---`),\n    AccessToken: `access token`,\n}).EkycMyKad(sdk.RequestEkycFaceCompare{\n    Image1: `base64 image`, // an image that contains a face\n    Image2: `base64 image`, // an image that contains a face\n})\n```\n\n* Ekyc - Liveness Verification\n```go\nsdk.NewClient(sdk.Client{\n    ID:         \"123456789\",\n    Secret:     \"123456789\",\n    IsSandbox:  true,\n    PrivateKey:  []byte(`---private key---`),\n    AccessToken: `access token`,\n}).EkycLiveness(sdk.RequestEkycLiveness{\n    Image:          `base64 image`, // an image that contains a face\n    MykadRequestID: `123456789`, // request ID from MyKad Recognition\n})\n```\n\n* Ekyc - Get Mykad Result\n```go\nsdk.NewClient(sdk.Client{\n    ID:         \"123456789\",\n    Secret:     \"123456789\",\n    IsSandbox:  true,\n    PrivateKey:  []byte(`---private key---`),\n    AccessToken: `access token`,\n}).GetMykadResult(sdk.RequestGetMykadResult{\n    ID:          `123456789`, // the mykad request id\n})\n```\n\n* Ekyc - Get Landmarks Info\n```go\nsdk.NewClient(sdk.Client{\n    ID:         \"123456789\",\n    Secret:     \"123456789\",\n    IsSandbox:  true,\n    PrivateKey:  []byte(`---private key---`),\n    AccessToken: `access token`,\n}).GetLandmarkInfo(sdk.RequestGetLandmarkInfo{\n    ID:          `123456789`, // the mykad request id\n    Includes: [\"msc_logo\", \"malaysia_flag\"], // optional parameter to specify landmark types to be acquired\n})\n```\n\n* Ekyc - Get eKYC Result\n```go\nsdk.NewClient(sdk.Client{\n    ID:         \"123456789\",\n    Secret:     \"123456789\",\n    IsSandbox:  true,\n    PrivateKey:  []byte(`---private key---`),\n    AccessToken: `access token`,\n}).GetEkycResult(sdk.RequestGetEkycResult{\n    ID:          `123456789`, // the ekycId obtained after liveness verification\n    Includes: [\"mykadImage\", \"selfieImage\"], // optional parameter to obtain request images\n})\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frevenuemonster%2Frm-go-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frevenuemonster%2Frm-go-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frevenuemonster%2Frm-go-sdk/lists"}