{"id":25412941,"url":"https://github.com/paydeckco/paydeck-java","last_synced_at":"2025-09-03T05:36:06.044Z","repository":{"id":270166662,"uuid":"907094725","full_name":"PayDeckCo/paydeck-java","owner":"PayDeckCo","description":"The PayDeck Payment abstraction library - A library for multiple african payment providers.","archived":false,"fork":false,"pushed_at":"2025-02-09T01:35:04.000Z","size":27,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-02-09T02:29:03.577Z","etag":null,"topics":["abstraction","africa","java","maven","payment-gateway","payments"],"latest_commit_sha":null,"homepage":"https://paydeck.co","language":"Java","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/PayDeckCo.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":"2024-12-22T19:45:49.000Z","updated_at":"2025-02-09T01:35:07.000Z","dependencies_parsed_at":"2025-02-09T02:26:31.143Z","dependency_job_id":"6d9684f9-2fa6-4d1c-8d96-2c16246fca5d","html_url":"https://github.com/PayDeckCo/paydeck-java","commit_stats":null,"previous_names":["paydeckco/paydeck-java"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PayDeckCo%2Fpaydeck-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PayDeckCo%2Fpaydeck-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PayDeckCo%2Fpaydeck-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PayDeckCo%2Fpaydeck-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PayDeckCo","download_url":"https://codeload.github.com/PayDeckCo/paydeck-java/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239134661,"owners_count":19587494,"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":["abstraction","africa","java","maven","payment-gateway","payments"],"created_at":"2025-02-16T13:39:59.706Z","updated_at":"2025-02-16T13:40:00.530Z","avatar_url":"https://github.com/PayDeckCo.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Paydeck Java SDK\n\n\u003e **Note**: This SDK is in active development. APIs might change without notice. Not recommended for production use yet.\n\nA unified payment gateway integration for multiple payment providers in Africa.\n\n## Table of Contents\n- [Features](#features)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Transaction Types](#transaction-types)\n  - [Deposit](#deposit)\n    - [Provider Initialization](#provider-initialization)\n    - [Creating Checkout Request](#creating-checkout-request)\n    - [Transaction Verification](#transaction-verification)\n    - [Response Handling](#response-handling)\n    - [Error Handling](#error-handling)\n    - [Supported Payment Methods](#supported-payment-methods)\n  - [Withdrawal or Payout (Coming Soon)](#withdrawal)\n- [Supported Providers](#supported-providers)\n- [Upcomming Providers](#upcomming-providers)\n- [Advanced Configuration](#advanced-configuration)\n- [Development Status](#development-status)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Features\n\n- Single API interface for multiple payment providers\n- Support for Flutterwave and Paystack\n- Modular architecture for different transaction types (Deposits, Withdrawals, etc.)\n- Type-safe enum-based provider selection\n- Comprehensive error handling with provider-specific details\n- Transaction status verification\n\n## Installation\n\nAdd to your `pom.xml`:\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003eco.paydeck\u003c/groupId\u003e\n  \u003cartifactId\u003epaydeck-java\u003c/artifactId\u003e\n  \u003cversion\u003e1.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## Quick Start\n\n```java\nimport co.paydeck.ProviderBuilder;\nimport co.paydeck.model.Provider;\nimport co.paydeck.core.BaseDepositProvider;\nimport co.paydeck.model.common.PaydeckResponse;\n\n// Initialize provider\nBaseDepositProvider provider = ProviderBuilder.buildProvider(\n    Provider.FLUTTERWAVE, \n    \"YOUR-SECRET-KEY\"\n);\n\n// Verify transaction\nPaydeckResponse\u003cTransactionResponseData\u003e response = provider.fetchTransaction(\"TXN_REF\");\nif (response.isSuccess()) {\n    TransactionResponseData data = response.getData();\n    System.out.println(\"Status: \" + data.getStatus());\n} else {\n    System.out.println(\"Error: \" + response.getError().getMessage());\n}\n```\n\n## Transaction Types\n\n### Deposit\n\n#### Provider Initialization\n\n```java\nimport co.paydeck.ProviderBuilder;\nimport co.paydeck.model.Provider;\nimport co.paydeck.core.BaseDepositProvider;\n\n// Available providers\nProvider.FLUTTERWAVE\nProvider.PAYSTACK\n\n// Initialize provider\nBaseDepositProvider provider = ProviderBuilder.buildProvider(\n    Provider.FLUTTERWAVE, \n    \"YOUR-SECRET-KEY\"\n);\n```\n\n#### Creating Checkout Request\n\n```java\nimport co.paydeck.model.Customer;\nimport co.paydeck.model.PaymentMethod;\nimport co.paydeck.model.deposit.*;\nimport java.util.EnumSet;\nimport java.util.UUID;\n\n// Build customer details\nCustomer customer = Customer.builder()\n    .email(\"customer@email.com\")\n    .firstName(\"John\")\n    .lastName(\"Doe\")\n    .phoneNumber(\"+2348012345678\")  // Optional\n    .build();\n\n// Build checkout customization\nCheckoutCustomization customization = CheckoutCustomization.builder()\n    .title(\"Payment for Order #123\")  // Optional\n    .description(\"Purchase of items\")  // Optional\n    .logoUrl(\"https://your-domain.com/logo.png\")  // Optional\n    .returnUrl(\"https://your-domain.com/callback\")\n    .build();\n\n// Additional metadata (optional)\nMap\u003cString, String\u003e metadata = new HashMap\u003c\u003e();\nmetadata.put(\"orderId\", \"123456\");\nmetadata.put(\"customerType\", \"regular\");\n\n// Create checkout request\nCheckoutRequest request = CheckoutRequest.builder()\n    .reference(UUID.randomUUID().toString())  // Your unique transaction reference\n    .amount(new BigDecimal(\"5000.00\"))\n    .currency(Currency.NGN)  // Available: NGN, USD, GHS, KES, etc.\n    .paymentMethods(EnumSet.of(\n        PaymentMethod.CARD,\n        PaymentMethod.BANK_TRANSFER,\n        PaymentMethod.USSD,\n        PaymentMethod.MOBILE_MONEY\n    ))\n    .customer(customer)\n    .customization(customization)\n    .metadata(metadata)  // Optional\n    .build();\n\n// Process payment\nPaydeckResponse\u003cCheckoutResponseData\u003e response = provider.initiateCheckout(request);\n```\n\n#### Response Handling\n\n```java\n// Checkout Response Handling\nPaydeckResponse\u003cCheckoutResponseData\u003e response = provider.initiateCheckout(request);\nif (response.isSuccess()) {\n    CheckoutResponseData data = response.getData();\n    String checkoutUrl = data.getCheckoutUrl();  // Redirect customer to this URL\n    String transactionId = data.getTransactionId();\n    String providerRef = data.getProviderTransactionReference();\n    Map\u003cString, String\u003e providerMetadata = data.getProviderMetadata();\n} else {\n    // Handle error\n    PaydeckResponse.ErrorData error = response.getError();\n    String errorCode = error.getCode();            // e.g., PROVIDER_ERROR\n    String errorMessage = error.getMessage();      // Error description\n    String providerCode = error.getProviderCode(); // Provider-specific error code\n    String providerMessage = error.getProviderMessage(); // Provider-specific message\n}\n\n// Transaction Verification Response Handling\nPaydeckResponse\u003cTransactionResponseData\u003e response = provider.fetchTransaction(\"TXN_REF\");\nif (response.isSuccess()) {\n    TransactionResponseData data = response.getData();\n    \n    // Basic transaction info\n    String transactionId = data.getTransactionId();\n    String merchantRef = data.getMerchantTransactionReference();\n    String providerRef = data.getProviderTransactionReference();\n    \n    // Status\n    TransactionStatus status = data.getStatus();  // SUCCESSFUL, FAILED, PENDING, CANCELLED\n    \n    // Amount details\n    BigDecimal amount = data.getAmount();            // Original amount\n    BigDecimal charged = data.getChargedAmount();    // Amount charged to customer\n    BigDecimal settled = data.getSettledAmount();    // Amount to be settled\n    BigDecimal fee = data.getFeeAmount();            // Provider fee\n    String currency = data.getCurrency();\n    \n    // Time and method\n    LocalDateTime txnDate = data.getTransactionDate();\n    String paymentMethod = data.getPaymentMethod();\n    \n    // Provider-specific data\n    Map\u003cString, String\u003e providerMetadata = data.getProviderMetadata();\n} else {\n    PaydeckResponse.ErrorData error = response.getError();\n    // Handle specific error cases\n    switch (error.getCode()) {\n        case \"PROVIDER_ERROR\" -\u003e handleProviderError(error);\n        case \"UNSUPPORTED_PAYMENT_METHOD\" -\u003e handleUnsupportedMethod(error);\n        default -\u003e handleGenericError(error);\n    }\n}\n```\n\n#### Error Handling\n\nPaydeckResponse provides built-in error handling with provider-specific details:\n\n```java\nif (!response.isSuccess()) {\n    PaydeckResponse.ErrorData error = response.getError();\n    \n    // Generic error information\n    String errorCode = error.getCode();\n    String message = error.getMessage();\n    \n    // Provider-specific error details (available when using providerError())\n    String providerCode = error.getProviderCode();\n    String providerMessage = error.getProviderMessage();\n}\n\n// Creating Error Responses:\n// Basic error\nPaydeckResponse\u003cT\u003e errorResponse = PaydeckResponse.error(\n    \"ERROR_CODE\",\n    \"Error description\"\n);\n\n// Provider-specific error\nPaydeckResponse\u003cT\u003e providerErrorResponse = PaydeckResponse.providerError(\n    \"ERROR_CODE\",\n    \"Error description\",\n    \"PROVIDER_CODE\",\n    \"Provider error message\"\n);\n\n// Success response\nPaydeckResponse\u003cT\u003e successResponse = PaydeckResponse.success(data);\n```\n\n#### Supported Payment Methods\n\nProvider-specific payment methods for deposits:\n\n**Flutterwave**\n```java\nEnumSet\u003cPaymentMethod\u003e SUPPORTED_METHODS = EnumSet.of(\n    PaymentMethod.CARD,\n    PaymentMethod.BANK_TRANSFER,\n    PaymentMethod.USSD,\n    PaymentMethod.MOBILE_MONEY\n);\n```\n\n**Paystack**\n```java\nEnumSet\u003cPaymentMethod\u003e SUPPORTED_METHODS = EnumSet.of(\n    PaymentMethod.CARD,\n    PaymentMethod.BANK_TRANSFER,\n    PaymentMethod.USSD,\n    PaymentMethod.QR\n);\n```\n\n### Withdrawal or Payout\n🚧 Coming Soon\n- Bank transfers\n- Mobile Money payouts\n- International transfers\n- Bank Account Verification\n- Bank List Retrieval\n- Account Name Resolution\n\n## Supported Providers\n\nCurrently supports:\n- FLUTTERWAVE (`Provider.FLUTTERWAVE`)\n- PAYSTACK (`Provider.PAYSTACK`)\n\n## Upcomming Providers\n🚧 Coming Soon\n- Korapay\n- Budpay\n- Fincra\n\n## Development Status\n\nCurrent Status: **Alpha**\n\nAvailable Features:\n- ✅ Deposit transactions\n- ✅ Transaction status verification\n- ✅ Multiple provider support (Flutterwave, Paystack)\n- ✅ Error handling with provider-specific details\n- ✅ Builder patterns\n- ✅ Configurable HTTP client\n\nComing Soon:\n- 🚧 Withdrawal transactions\n- 🚧 Bank list retrieval\n- 🚧 Card tokenization\n- 🚧 Webhook handling\n- 🚧 Transfer endpoints\n- 🚧 Comprehensive test coverage\n- 🚧 CI/CD pipeline\n- 🚧 Documentation website\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Submit a pull request\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaydeckco%2Fpaydeck-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpaydeckco%2Fpaydeck-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaydeckco%2Fpaydeck-java/lists"}