CorvusPay Payment Provider
Hosted card and IBAN/PIS checkout for Odoo 19, with signed results, independent status reconciliation, preauthorization, capture, void, and full or partial refunds.
Core capabilities
Hosted checkout
Redirects the buyer to the CorvusPay secure form and returns them to Odoo after payment or cancellation. No card data ever reaches Odoo.
Secure message handling
Signs outgoing data with HMAC-SHA256 and verifies every signed return before it is allowed to change payment state.
Status reconciliation
A manual status action and a scheduled catch-up for pending and authorized payments, including the case where the buyer never returns.
Transaction management
Preauthorization, full or partial capture, void, and full or partial refund, each recorded as a related Odoo child transaction.
IBAN / PIS
Keeps asynchronous bank payments pending until CorvusPay reports a final result, so an invoice is never paid prematurely.
Localization
English source terms with Bosnian, Croatian, Serbian Cyrillic and Serbian Latin translations.
Installation
- Place or mount the repository so Odoo can discover
payment_corvuspay. - Add the containing directory to the Odoo
addons_path. - Update the Apps list and install CorvusPay Payment Provider.
- Open Accounting / Invoicing → Configuration → Payment Providers.
The module depends only on the standard Payment module and the Python
cryptography package.
Provider configuration
Credentials and environment
- Use Test Mode with matching test credentials during development and certification.
- Enter the Store ID and Secret Key of the selected Merchant Portal store.
- Upload the matching CorvusPay.p12 client certificate and its password.
- Switch to Enabled only after production credentials and return URLs are verified.
Payment behaviour and availability
- Select the payment journal used for Odoo post-processing.
- Optionally restrict countries, currencies and the maximum amount.
- Keep Capture Amount Manually off for a regular sale and for IBAN/PIS.
- Turn it on only for preauthorization, later capture and void.
Store ID, Secret Key, certificate and password. Odoo masks the secrets.
Methods, manual capture, availability, journal and refund support.
.p12 file and
private keys must never be committed, logged or shown in a screenshot.
Standard card payment
- The buyer selects CorvusPay on a validated invoice or order.
- They complete the hosted CorvusPay form.
- Odoo verifies the signed result, reference, amount and currency.
- The transaction is confirmed and the invoice is post-processed as paid.
If the buyer closes the browser before returning, scheduled or manual reconciliation still recovers the authoritative CorvusPay result.
What the buyer sees before the redirect.
Preauthorization, capture and void
Capture
- Enable Capture Amount Manually.
- Complete checkout and verify the transaction is Authorized.
- Choose Capture Transaction for the full or a partial amount.
- Review the confirmed child transaction and what remains capturable.
Void
- Open an unused authorized transaction.
- Choose Void Transaction.
- Confirm and review the child transaction.
- The authorization is released and the invoice stays unpaid.
Full and partial refunds
Operator workflow
- Open the original confirmed CorvusPay transaction.
- Start the full or partial refund action.
- Enter an amount up to the remaining refundable balance.
- Review the refund child transaction and the provider response.
Safety controls
- A refund can never exceed the captured amount.
- Earlier partial refunds reduce the remaining balance.
- Simultaneous refunds of one payment are serialized.
- A failed response never marks a refund as successful.
A confirmed payment with its refund actions.
The wizard refuses anything above the remaining amount.
Reconciliation and monitoring
- Use Check CorvusPay Status for any uncertain transaction.
- A scheduled action revisits pending and authorized payments on its own.
- Reference, amount, currency and state are validated before an outcome is applied.
- Review Pending and Error records first, and compare them with the Merchant Portal rather than forcing a state by hand.
Pending payments are revisited every 15 minutes.
CorvusPay by IBAN / PIS
Customer flow
- The buyer selects Pay with IBAN on the hosted form.
- They choose a supported bank and accept the terms.
- The bank completes the order or asks for further authentication.
- Odoo stays pending until a final CorvusPay status arrives.
Configuration notes
- The method must be enabled on the CorvusPay store.
- The implemented flow targets supported EUR PIS payments.
- A valid creditor reference is generated and signed.
- Manual capture must be disabled, and only a final result pays the invoice.
Credentials and client certificate
Where they come from
- Open the store API settings in the CorvusPay Merchant Portal.
- Copy the Store ID and Secret Key of that same environment.
- Generate a private key and CSR, and send only the CSR through the approved process.
- Bundle the returned certificate and key into
CorvusPay.p12and upload it.
Handling
- Test and production credentials are not interchangeable.
- Keep the private key in a protected directory outside version control.
- Odoo reads the certificate in memory for each API call.
- Monitor the expiry date and plan renewal before it lapses.
State reference
| Odoo state | Meaning and operator action |
|---|---|
| Pending | No final result yet. Wait for reconciliation or run Check CorvusPay Status. |
| Authorized | Funds are reserved but not captured. Use Capture or Void. |
| Confirmed | The payment or management operation is finalized. |
| Canceled | The buyer or provider cancelled it. The invoice is not paid. |
| Error | Declined or failed. Review the provider message and the Merchant Portal. |
Security and go-live checklist
- Production Store ID, Secret Key and certificate come from the same production store.
- Production endpoints are confirmed with CorvusPay.
- The Odoo return URL uses HTTPS and is reachable.
- Journal, methods, currencies, countries and amount limits are reviewed.
- Scheduled reconciliation is enabled and its interval is acceptable.
- Capture, void and refund are restricted to authorized operators.
- A controlled first live payment and refund are verified.
- No test credentials or certificates remain in the production configuration.
Maintainer
Developed and maintained by Wolfinne IT, wolfinne.com.
Author: Bojan Nišević <bojan@wolfinne.com>
Support and customizations: hello@wolfinne.com
Source and issue tracker: github.com/Wolfinne-IT/corvuspay
CorvusPay is a trademark of Corvus Pay d.o.o. This module is an independent integration and is not affiliated with or endorsed by Corvus Pay. A CorvusPay merchant account is required and is not included.
This module is provided as is, without warranty of any kind, express or implied, and its authors accept no liability arising from its use, as set out in sections 15 and 16 of the GNU LGPL v3 under which it is distributed. Payments are real money: the merchant remains responsible for their agreement with Corvus Pay, for confirming the production endpoints before going live, for verifying a controlled first live payment, refund and reconciliation, and for reconciling Odoo against the CorvusPay Merchant Portal, which is the authoritative record of what was charged. The full disclaimer is in the repository README.
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Lines of code | 1749 |
| Technical Name |
payment_corvuspay |
| License | LGPL-3 |
| Website | https://wolfinne.com |
Please log in to comment on this module