Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Authorize Net Aim Laravel Package

payum/authorize-net-aim

Payum gateway for Authorize.Net AIM (Advanced Integration Method), enabling direct payment processing through Authorize.Net's API within Payum. Install it to add Authorize.Net support to your Payum-based payment workflow, though the package is small and lightly maintained.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Bottom line: This is a ~10-class adapter, not a payment platform. The code risk is low; the dependency and compliance risk is high. Do not adopt it as a greenfield Authorize.Net integration in 2024+. The only defensible use case is an existing Payum-based application that already speaks AIM and needs a maintained-adjacent path while a migration is planned.

Architecture fit

  • payum/authorize-net-aim is a thin gateway adapter for Payum, a framework-agnostic payment abstraction (Gateway → Actions → Request/Reply). It implements Authorize.Net AIM (Advanced Integration Method), the legacy server-to-server POST to transact.dll.
  • Fit is only good if Payum is already the payment orchestration layer. Laravel has no first-party Payum integration; the official payum/payum-bundle is Symfony-specific. In Laravel you would wire AuthorizeNetAimGatewayFactory manually in a service provider and implement Payum's StorageInterface over Eloquent. That is real integration work, not a composer require.
  • The adapter covers authorize, capture (prior-auth capture), refund/credit, void, and status. It does not cover CIM vaulting, ARB/recurring, Accept.js tokenization, webhooks, or settlement/batch reporting. Any product requirement touching subscriptions, saved cards, or reconciliation falls outside this package.

Integration feasibility

  • Mechanically straightforward: build a gateway via the factory, hand it config (loginId, transactionKey, sandbox flag), and issue Payum requests. Authorize.Net still operates a public sandbox, so a POC is achievable in days, not weeks.
  • The blocker is version compatibility, not difficulty. The last tag in this repo is 2016-09-16, which predates PHP 7.2+ and Payum 2.x. You must confirm whether a Payum 2.x-compatible build of this component exists and whether it runs on PHP 8.1/8.2. If not, you are pinned to Payum 1.x and an EOL PHP runtime — a non-starter for a new Laravel 10/11 app.
  • The package is a read-only subtree split. Bugs and PRs cannot be fixed here; they must go upstream to payum/payum and be re-split. That is a governance constraint, not just a workflow quirk — it means your patch turnaround is gated on a maintainer who may not be active.

Technical risk

Risk Severity Notes
PCI scope Critical AIM means raw PAN/CVV traverse your server → SAQ D-Merchant. Accept.js or Accept Hosted moves you to SAQ A-EP. This alone often justifies a different integration.
Abandonment High 2 stars, 0 dependents, no release since 2016. No community blast radius means no one else is finding the bugs for you.
PHP/runtime compat High 2016-era release; verify against your PHP version and Payum major.
Legacy API surface Medium Authorize.Net supports AIM but steers new integrations to the modern Transaction API / Accept.js. Assume eventual deprecation pressure; the SHA-512 signature and TLS 1.2 requirements already broke older AIM-era clients.
No async events Medium AIM is synchronous, no webhooks. Settlement, declines-after-auth, and chargebacks must be reconciled out-of-band.
Vendor SDK dependency Medium Verify which Authorize.Net SDK the adapter wraps and whether it is maintained.

Key questions to answer before committing

  1. Does a Payum 2.x / PHP 8.x-compatible tag exist for this component? If not, is the target app on Payum 1.x + PHP 7.x, and is that acceptable?
  2. What is our PCI DSS SAQ target? If SAQ A-EP or A is required, AIM is disqualified regardless of code quality.
  3. Do we need tokenization, recurring billing, or stored credentials? If yes, this package is insufficient — CIM/ARB are separate APIs.
  4. Is our Authorize.Net merchant account a hard constraint (rate grandfathering, existing relationships)? If not, evaluate Stripe/Braintree/Adyen and skip this entirely.
  5. Does the business need settlement reconciliation and chargeback ingestion? If so, budget for Transaction Reporting API / SFTP report integration that this package will not provide.

Integration Approach

Stack fit

  • Target stack must be Laravel + Payum core (not the Symfony bundle). Expect to write: a service provider registering the gateway factory, an Eloquent-backed StorageInterface implementation, config/secret management for loginId/transactionKey, and a domain-level port interface so the rest of the app never imports Payum\AuthorizeNet\Aim\*.
  • Do not let Payum's Payment/Request types leak into controllers or domain services. Wrap them. The single most valuable architectural decision here is making the gateway swappable in one file, because the probability of replacing it within 24 months is high.

Migration path

  • Greenfield: do not use this package. Integrate Authorize.Net via the modern Transaction API using the official SDK, or via Accept.js/Accept Hosted for tokenization, and keep Payum out of the stack unless it already exists.
  • Existing Payum + AIM: keep the merchant account, keep Payum as orchestration, and replace only the transport layer over time — move card capture to Accept.js (browser-side tokenization) and submit the opaque token server-side. This preserves Payum actions while collapsing PCI scope from SAQ D to SAQ A-EP.
  • Off AIM entirely: extract a PaymentGateway port first, dual-write-shadow against the new provider in the sandbox, then cut over per-currency/per-region.

Compatibility

  • Pin exact versions in composer.json and commit the lockfile. This package has no meaningful semver safety net.
  • Verify transitive deps: payum/core major, the Authorize.Net SDK version, and whether any of them declare php: >=7.x constraints that block your runtime.
  • Run the full matrix in CI: your PHP version × lowest and highest supported Payum. A 2016 package will not have been tested against modern PHP deprecations (dynamic properties, mcrypt, nullability).

Sequencing

  1. Week 1 — Feasibility spike (2 days). Composer-install against the target PHP/Laravel, run one sandbox authorize + capture + refund. If install fails or PHP 8 errors surface, stop and escalate; the answer is "do not proceed."
  2. Week 1 — PCI scoping decision. Confirm SAQ tier with security/compliance. A SAQ D answer changes the entire plan.
  3. Week 2 — Port definition. Define PaymentGateway interface (authorize, capture, refund, void, status) in domain terms. Write a fake implementation and wire the app against it.
  4. Week 2–3 — Adapter implementation. Implement the port over Payum; implement Eloquent StorageInterface; add structured logging and idempotency keys at the boundary.
  5. Week 3 — Reconciliation. Build Transaction Reporting API polling or SFTP report ingestion — assume this package gives you none of it.
  6. Week 4 — Hardening. Timeout/retry policy, duplicate-transaction handling, sandbox regression suite, runbook.

Operational Impact

Maintenance

  • Bus factor of effectively zero. 2 stars, 0 dependents, no release in ~8 years. Treat this as vendored code you own, not a dependency you consume. Budget for forking it into your repo (or a private VCS path) so you can patch PHP-version breakage without waiting on upstream.
  • Because it is a read-only subtree split, forks will diverge from payum/payum and cannot be upstreamed cleanly. Accept divergence explicitly or don't adopt.
  • Quarterly dependency audit should include a "does this still install?" check — abandonware tends to fail silently on transitive updates rather than announcing itself.

Support

  • No vendor support. Authorize.Net supports the API, not this PHP adapter. Escalation path is: your team → upstream maintainer (best-effort, may be unresponsive) → fork it yourself.
  • Authorize.Net merchant support can help with declined transactions and API behavior but will not debug your integration. Ensure the team can read raw AIM response codes independently.
  • Keep the raw AIM request/response (with PAN redacted) logged and retrievable — dispute and support workflows will need it.

Scaling

  • The HTTP path scales trivially: stateless outbound POSTs, so scale horizontally. Real constraints are upstream: Authorize.Net rate limits and per-account transaction velocity.
  • The non-trivial scaling surface is Payum storage. Every payment requires persisted Payment state. Under load this becomes a hot table with lock contention on capture/refund. Plan row-level locking and a queue for non-interactive operations (refunds, voids, reconciliation).
  • Synchronous capture means API latency sits in the request path. Front with a queue + polling/polling-free status endpoint for anything not user-initiated.

Failure modes

  • Indeterminate responses. AIM returns approved / declined / error / held for review. Held-for-review must be modelled as unknown, not success or failure — it requires manual or scheduled resolution. Same for network timeouts mid-POST: you cannot assume the charge did not happen.
  • Duplicate charges. Retries against AIM can double-charge unless you pass an idempotency/duplicate-suppression key and reconcile by transaction ID. This is your responsibility, not the library's.
  • Silent settlement failures. Auth succeeds, settlement later fails. With no webhooks, you learn about it only via reporting — potentially days later, after goods ship.
  • Refund semantics. Void works pre-settlement; post-settlement you issue a credit (a new transaction), not a reversal. Refund logic must branch on settlement state, which this package does not track for you.
  • Credential/rotation failure. transactionKey rotation or expired API login surfaces as generic errors; add explicit auth-failure alerting.
  • PCI incident exposure. Card data in application logs or error traces is the classic AIM failure. Enforce log scrubbing at the handler level, not by convention.

Ramp-up

  • Learning curve: low for the package, moderate for the domain. A mid-level PHP developer can read the entire adapter in an afternoon. The hard parts are Payum's request/reply action pipeline, PCI-scoped data handling, and Authorize.Net's transaction lifecycle (auth → capture → settle → credit) — none of which the package documents.
  • Estimate 3–5 days for a developer new to Payum to be productive with the pipeline, plus 1–2 days for Authorize.Net lifecycle and reconciliation semantics.
  • Onboarding artifact to produce: a one-page transaction-state diagram (auth, capture, settle, void, credit, expired auth) plus a runbook for held-for-review and settlement mismatch. Do not rely on this repo's README.
  • Given the abandonment profile, designate a named owner for this integration. Un-owned abandonware dependencies are how PCI-scoped systems silently rot.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle