{"id":18716348,"url":"https://github.com/killbill/killbill-dwolla-plugin","last_synced_at":"2025-10-27T23:10:54.994Z","repository":{"id":66770340,"uuid":"65403890","full_name":"killbill/killbill-dwolla-plugin","owner":"killbill","description":"Plugin to use Dwolla as a gateway","archived":false,"fork":false,"pushed_at":"2017-04-25T13:48:28.000Z","size":99,"stargazers_count":0,"open_issues_count":1,"forks_count":1,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-12-28T10:28:59.767Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://killbill.io","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/killbill.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS","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}},"created_at":"2016-08-10T17:46:15.000Z","updated_at":"2018-06-16T19:17:03.000Z","dependencies_parsed_at":"2023-02-23T17:45:17.042Z","dependency_job_id":null,"html_url":"https://github.com/killbill/killbill-dwolla-plugin","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/killbill%2Fkillbill-dwolla-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/killbill%2Fkillbill-dwolla-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/killbill%2Fkillbill-dwolla-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/killbill%2Fkillbill-dwolla-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/killbill","download_url":"https://codeload.github.com/killbill/killbill-dwolla-plugin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239581802,"owners_count":19662958,"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":[],"created_at":"2024-11-07T13:12:25.444Z","updated_at":"2025-10-27T23:10:49.941Z","avatar_url":"https://github.com/killbill.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"killbill-dwolla-plugin\n======================\n\nPlugin to use [Dwolla](https://www.dwolla.com/) as a gateway. It supports both Dwolla Direct (co-branded product, easier to setup), as well as Dwolla White Label (for deeper integrations). Funding sources can be verified through both IAV (Instant Account Verification) and Micro-deposit verifications. You can even configure it to listen to webhooks, to get real-time notifications of the deposits status.\n\nRelease builds are available on [Maven Central](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.kill-bill.billing.plugin.java%22%20AND%20a%3A%22dwolla-plugin%22) with coordinates `org.kill-bill.billing.plugin.java:dwolla-plugin`.\n\nKill Bill compatibility\n-----------------------\n\n| Plugin version | Kill Bill version |\n| -------------: | ----------------: |\n| 0.1.y          | 0.18.z            |\n\nRequirements\n------------\n\nThe plugin needs a database. The latest version of the schema can be found [here](https://github.com/killbill/killbill-dwolla-plugin/blob/master/src/main/resources/ddl.sql).\n\nMerchants need to create a Dwolla [application](https://developers.dwolla.com/guides/sandbox-setup/02-create-application.html).\nThe first time a token pair needs to be created from Dwolla Application page, and save into plugin database. The plugin offers two endpoints to creante and update this token pair.\n```\n// TO CREATE A NEW TOKEN PAIR\ncurl -v \\\n     -X POST \\\n     -u admin:password \\\n     -H 'X-Killbill-ApiKey: bob' \\\n     -H 'X-Killbill-ApiSecret: lazar' \\\n     -H 'X-Killbill-CreatedBy: admin' \\\n     -H 'Content-Type: text/plain' \\\n     -d '{\n           \"accessToken\": \"\u003cACCESS-TOKEN\u003e\",\n           \"refreshToken\": \"\u003cREFRESH-TOKEN\u003e\"\n         }' \\\n     http://127.0.0.1:8080/plugins/killbill-dwolla\n\n// TO UPDATE AN EXISTING TOKEN PAIR\ncurl -v \\\n     -X PUT \\\n     -u admin:password \\\n     -H 'X-Killbill-ApiKey: bob' \\\n     -H 'X-Killbill-ApiSecret: lazar' \\\n     -H 'X-Killbill-CreatedBy: admin' \\\n     -H 'Content-Type: text/plain' \\\n     -d '{\n           \"accessToken\": \"\u003cACCESS-TOKEN\u003e\",\n           \"refreshToken\": \"\u003cREFRESH-TOKEN\u003e\"\n         }' \\\n     http://127.0.0.1:8080/plugins/killbill-dwolla\n    \n```\n\nA *[Webhook Subscription](https://docsv2.dwolla.com/#webhook-subscriptions)* is needed to receive Dwolla notifications.\n\nBuild\n-----\n\nTo build the plugin locally, see https://github.com/Dwolla/dwolla-swagger-java/blob/master/README.md.\n\nConfiguration\n-------------\n\nThe following properties are required:\n\n* `org.killbill.billing.plugin.dwolla.baseUrl` : REST Payment service url (i.e. `https://api-uat.dwolla.com/` or `https://api.dwolla.com/`)\n* `org.killbill.billing.plugin.dwolla.baseOAuthUrl` : REST Auth service url (i.e. `https://uat.dwolla.com/oauth/v2` or `https://dwolla.com/oauth/v2`)\n* `org.killbill.billing.plugin.dwolla.scopes` : The application scopes (i.e. `Send|AccountInfoFull|Funding`)\n* `org.killbill.billing.plugin.dwolla.clientId` : Your merchant application key.\n* `org.killbill.billing.plugin.dwolla.clientSecret` : Your merchant application secret.\n* `org.killbill.billing.plugin.dwolla.accountId` : Your merchant account id.\n\n\nThese properties can be specified globally via System Properties or on a per tenant basis:\n\n```\ncurl -v \\\n     -X POST \\\n     -u admin:password \\\n     -H 'X-Killbill-ApiKey: bob' \\\n     -H 'X-Killbill-ApiSecret: lazar' \\\n     -H 'X-Killbill-CreatedBy: admin' \\\n     -H 'Content-Type: text/plain' \\\n     -d 'org.killbill.billing.plugin.dwolla.baseUrl=UUU\n     org.killbill.billing.plugin.dwolla.baseOAuthUrl=VVV\n     org.killbill.billing.plugin.dwolla.scopes=WWW\n     org.killbill.billing.plugin.dwolla.clientId=XXX'\n     org.killbill.billing.plugin.dwolla.clientSecret=YYY'\n     org.killbill.billing.plugin.dwolla.accountId=ZZZ' \\\n     http://127.0.0.1:8080/1.0/kb/tenants/uploadPluginConfig/killbill-dwolla\n```\n\n### Kill Bill\n\n\nUsage\n-----\n\nA full end-to-end integration demo is also available [here](https://github.com/killbill/killbill-dwolla-demo).\n\n### Bank account\n\nAdd a payment method:\n\n```\ncurl -v \\\n     -u admin:password \\\n     -H \"X-Killbill-ApiKey: bob\" \\\n     -H \"X-Killbill-ApiSecret: lazar\" \\\n     -H \"Content-Type: application/json\" \\\n     -H \"X-Killbill-CreatedBy: demo\" \\\n     -X POST \\\n     --data-binary '{\n       \"pluginName\": \"killbill-dwolla\",\n       \"pluginInfo\": {\n         \"properties\": [\n           {\n             \"key\": \"fundingSource\",\n             \"value\": \"9ece9660-aa34-41eb-80d7-0125d53b45e8\"\n           },\n           {\n             \"key\": \"customerId\",\n             \"value\": \"ca32853c-48fa-40be-ae75-77b37504581b\"\n           }\n         ]\n       }\n     }' \\\n     \"http://127.0.0.1:8080/1.0/kb/accounts/\u003cACCOUNT_ID\u003e/paymentMethods?isDefault=true\"\n```\n\nNotes:\n* Make sure to replace *ACCOUNT_ID* with the id of the Kill Bill account\n* Details for working payment methods are available here: https://docsv2.dwolla.com/#funding-sources\n\nTo trigger a payment:\n\n```\ncurl -v \\\n     -u admin:password \\\n     -H \"X-Killbill-ApiKey: bob\" \\\n     -H \"X-Killbill-ApiSecret: lazar\" \\\n     -H \"Content-Type: application/json\" \\\n     -H \"X-Killbill-CreatedBy: demo\" \\\n     -X POST \\\n     --data-binary '{\"transactionType\":\"PURCHASE\",\"amount\":\"5\",\"currency\":\"EUR\",\"transactionExternalKey\":\"INV-'$(uuidgen)'-PURCHASE\"}' \\\n    \"http://127.0.0.1:8080/1.0/kb/accounts/\u003cACCOUNT_ID\u003e/payments\"\n```\n\nNotes:\n* Make sure to replace *ACCOUNT_ID* with the id of the Kill Bill account\n\nAt this point, the payment will be in *PENDING* state, until we receive a notification from Dwolla. You can verify the state of the transaction by listing the payments:\n\n```\ncurl -v \\\n     -u admin:password \\\n     -H \"X-Killbill-ApiKey: bob\" \\\n     -H \"X-Killbill-ApiSecret: lazar\" \\\n     -H \"Content-Type: application/json\" \\\n     -H \"X-Killbill-CreatedBy: demo\" \\\n    \"http://127.0.0.1:8080/1.0/kb/accounts/\u003cACCOUNT_ID\u003e/payments?withPluginInfo=true\"\n```\n\nYou can simulate a notification from Dwolla as follows:\n\n```\ncurl -v \\\n     -u admin:password \\\n     -H \"X-Killbill-ApiKey: bob\" \\\n     -H \"X-Killbill-ApiSecret: lazar\" \\\n     -H \"Content-Type: application/json\" \\\n     -H \"X-Killbill-CreatedBy: demo\" \\\n     -X POST \\\n     --data-binary '\n     {\n      \"id\": \"80d8ff7d-7e5a-4975-ade8-9e97306d6c16\",\n      \"topic\": \"customer_transfer_completed\",\n      \"_links\": {\n        \"self\": {\n          \"href\": \"https://api-uat.dwolla.com/events/80d8ff7d-7e5a-4975-ade8-9e97306d6c16\"\n        },\n        \"account\": {\n          \"href\": \"https://api-uat.dwolla.com/accounts/b3153e29-b25a-4ccd-9c1a-5b05b606e50c\"\n        },\n        \"resource\": {\n          \"href\": \"https://api-uat.dwolla.com/transfers/7c8e7484-2184-e611-80e8-0aa34a9b2388\"\n        },\n        \"customer\": {\n          \"href\": \"https://api-uat.dwolla.com/customers/b3153e29-b25a-4ccd-9c1a-5b05b606e50c\"\n        }\n      }\n    }' \\\n    \"http://127.0.0.1:8080/1.0/kb/paymentGateways/notification/killbill-dwolla\"\n```\n\nNotes:\n* Make sure to replace *resource.href* with the Dwolla transfer id reference of your payment (see the *dwolla_responses* table)\n* If *topic* is `customer_transfer_completed`, the payment transaction state will be *SUCCESS* and the payment state *PROCESSED*\n* If *topic* is `customer_transfer_failed` or `customer_transfer_canceled`, the payment transaction state will be *PAYMENT_FAILURE* and the payment state *ERROR*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkillbill%2Fkillbill-dwolla-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkillbill%2Fkillbill-dwolla-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkillbill%2Fkillbill-dwolla-plugin/lists"}