Stripe ACH works for automatic billing, but not manual payments?

Stripe ACH payments for auto-bill are working fine on our self-hosted InvoiceNinja v5 instance, but manual payments via ACH are getting ran with an allowed_source_types of card which I think is making them languish at a status of Incomplete since Stripe can’t process the transaction.

image

I will confirm with Stripe Support what the allowed_source_types should be set to, we also appear to be hitting a different endpoint (/v1/charges for recurring billing and /v1/payment_intents for these failed payments):
image


  "object": {
    "id": "REDACTED",
    "object": "payment_intent",
    "allowed_source_types": [
      "card"
    ],
    "amount": 11570,
    "amount_capturable": 0,
    "amount_details": {
      "tip": {
      }
    },
    "amount_received": 0,
    "application": null,
    "application_fee_amount": null,
    "automatic_payment_methods": null,
    "canceled_at": null,
    "cancellation_reason": null,
    "capture_method": "automatic",
    "charges": {
      "object": "list",
      "data": [
      ],
      "has_more": false,
      "total_count": 0,
      "url": "/v1/charges?payment_intent=REDACTED"
    },
    "client_secret": "REDACTED",
    "confirmation_method": "automatic",
    "created": 1675199185,
    "currency": "usd",
    "customer": "REDACTED",
    "description": "Invoice REDACTED for $115.70 for REDACTED",
    "invoice": null,
    "last_payment_error": null,
    "latest_charge": null,
    "livemode": true,
    "metadata": {
      "gateway_type_id": "1",
      "payment_hash": "REDACTED"
    },
    "next_action": null,
    "next_source_action": null,
    "on_behalf_of": null,
    "payment_method": null,
    "payment_method_options": {
      "card": {
        "installments": null,
        "mandate_options": null,
        "network": null,
        "request_three_d_secure": "automatic"
      }
    },
    "payment_method_types": [
      "card"
    ],
    "processing": null,
    "receipt_email": null,
    "review": null,
    "setup_future_usage": "off_session",
    "shipping": null,
    "source": null,
    "statement_descriptor": null,
    "statement_descriptor_suffix": null,
    "status": "requires_source",
    "transfer_data": null,
    "transfer_group": null
  }
}

Hi,

@david do you have any thoughts?

Just to confirm. Are you attempting the auto bill from the admin panel or via the client portal?

Our clients are attempting to pay via Stripe ACH from the client portal using saved bank accounts that have been verified with 2 deposits.

Triggering Auto Bill on an invoice in the admin panel works, but InvoiceNinja is hitting the /v1/charges Stripe endpoint when I manually trigger Auto Bill.

@dan0

I can’t recreate this.

Are you on the latest version of the app?

When i execute an auto bill from the admin portal on a client with a bank Token attached, it processes as expected. Using a Payment Intent, not the charges endpoint.

{

“description”: “Invoice 0024 for $5,087.26 for client Kertzmann and Sons”,

“metadata”: {

“payment_hash”: “fRQZesBLVjJZicNYcASNAufYYNgXfvXIi7lThYY661dD6xSo5Y6JMXMEhP9kdple”,

“gateway_type_id”: “2”

},

“currency”: “USD”,

“customer”: “cus_NH8LiNkt0c6Ajb”,

“payment_method”: “pm_1MWa4zFCfxpFPpttb7tWHYqV”,

“confirm”: “true”,

“amount”: “508726”,

“payment_method_types”: {

“0”: “us_bank_account”

}

}

I am using InvoiceNinja v5.5.49-C103, looks like I should upgrade as Release v5.5.52 · invoiceninja/invoiceninja · GitHub upgraded Stripe ACH support.

Let me go give that a spin!

Upgrading appears to have taken away the ability to pay with the verified Bank Account in the customer portal. The bank account shows under Payment Methods in the customer’s portal though…

image

@dan0

Can you double check bank transfer is enabled on the stripe gateway client currency = usd + client country = USA and that the invoice is for > $1

The client’s country was not set to USA, as soon as I set this the Bank Account option shows up :smiley:

Is there a way to set the country by default and also to set the country across all clients?

dan0

if you have command line access run

php artisan ninja:check-data --fix=true

I ran it twice and it fixed the country set for many of our clients :smiley:

Still seeing some accounting errors, any suggestions on resolving those?

2023-02-01 11:04:50 2023-02-01 11:04:50 Running CheckData... on Connected to Default DB Fix Status = Fixing Issues
2023-02-01 11:04:50 # 980 Test Account  - 0014 - Balance Failure - Invoice Balances = 35.000000 Client Balance = -68.340000 Ledger Balance = 35.000000
2023-02-01 11:04:50 1 clients with incorrect balances
2023-02-01 11:04:50 # 1707 # Redacted, PLLC 574.600000 is invalid should be -0
2023-02-01 11:04:50 Redacted, PLLC id = # 1707 - Client Paid To Date = 4125.630000 != Invoice Payments = 7573.23 - 7573.230000 + 
2023-02-01 11:04:50 1 clients with incorrect paid to dates
2023-02-01 11:04:50 0 contacts without a contact_key
2023-02-01 11:04:50 0 clients without any contacts
2023-02-01 11:04:50 0 contacts without a contact_key
2023-02-01 11:04:50 0 vendors without any contacts
2023-02-01 11:04:50 0 wrong invoices with bad balance state
2023-02-01 11:04:50 0 users with duplicate oauth ids
2023-02-01 11:04:50 Done: FAILURE
2023-02-01 11:04:50 Total execution time in seconds: 0.32464194297791

@dan0

if you run

php artisan check-data --fix=true --client_balance=true --paid_to_date=true

it will correct the issues with those balances.

Hmm, is the command one of the two suggessted for check-data?

dan@billing:/var/www/invoiceninja# php artisan check-data --fix=true --client_balance=true --paid_to_date=true

   ERROR  Command "check-data" is not defined. Did you mean one of these?

  ⇂ ninja:check-data
  ⇂ ninja:pcheck-data

Edit: This did the trick, thanks @david !

php artisan ninja:check-data --fix=true --client_balance=true --paid_to_date=true
1 Like