On this page
Paymos for Drupal Commerce
Connect Paymos to Drupal Commerce, choose Sandbox or Live, and set up payment checks, cron, and module removal.
Requirements
Install the stable 1.0.0 release with Composer: composer require drupal/commerce_paymos:^1.0. Then connect your store to Paymos and add its payment gateway.
Use Drupal ^10.3 || ^11 and Commerce ^3. The module declares PHP ^8.1; follow Drupal's requirement if it needs a newer version. Your store needs a public HTTPS URL.
The native offsite gateway takes customers to the payment page. Drupal Commerce keeps the order and payment records.
Install
Composer is the primary route. After a Drupal.org release becomes available, run this in your Drupal project:
composer require 'drupal/commerce_paymos:^1.0'
For manual installation, use the ZIP from the GitHub release. It bundles the PHP SDK. Extract commerce_paymos into your contributed modules directory, then enable the module in Drupal. The module uses GPL-2.0-or-later; the SDK uses MIT.
Connect
First, open the Paymos dashboard and select your store's project. Then open /admin/commerce/config/payment/paymos in Drupal and choose Connect Paymos. Follow the confirmation link and approve the connection for the current project. Return to Drupal and choose Check approval.
Next, visit /admin/commerce/config/payment-gateways/add. Create a gateway, choose Paymos, and select Sandbox or Live. Creating this gateway is a separate step after connecting the store.
Credentials stay in encrypted Drupal state, protected by the private key and hash_salt, outside configuration exports. Reconnect if your canonical URL changes. The connection sets up /paymos/webhook automatically; you do not enter secrets or register the webhook by hand.
In your existing Paymos project, set Success URL and Fail URL to the addresses displayed in Drupal admin: /paymos/return and /paymos/return?cancel=1, respectively. This is a one-time step. The buyer follows Back to store on the hosted checkout. Return destinations belong to the latest checkout in that browser session and expire after one hour. Missing or expired session data, or a changed order/gateway binding, leads to the store home page. The return itself confirms no payment; status depends on verified webhook/API checks and the native Commerce payment.
After updating the module, rebuild Drupal’s cache: drush --uri=https://your-store.example cache:rebuild.
Payment checks
Signed notifications trigger an API check. The invoice must match the order, project, environment, amount, and currency before a SQL transaction records one completed Commerce payment. Repeated notifications do not create another payment.
Partial, late, or mismatched payments do not release goods automatically. Review mismatches; your Commerce workflow controls fulfillment. The module does not issue automatic refunds.
Cron
Keep Drupal cron running. It checks unresolved invoices in bounded batches. With Drush, supply the store's canonical HTTPS URL:
drush --uri=https://your-store.example cron
Remove
Resolve outstanding invoices before uninstalling; unresolved invoices block removal. Uninstall deletes local encrypted connection data and keeps native Commerce payments.
See the WooCommerce guide for that platform or browse CMS plugins.