Adds a read-only Stripe integration so support agents can view customer details, subscriptions, and recent invoices directly in the conversation sidebar without asking a teammate to look them up in Stripe. Account administrators connect through OAuth and manage the connection from Settings → Integrations. Super Admin controls the Stripe app configuration. Sandbox and live connections are supported; Chatwoot's own subscription billing is unchanged. ### Things to know - This is an initial read-only integration. Refunds, payment actions, and webhook-driven updates are not included. - Customer lookup uses the conversation contact's email. When multiple Stripe customers match, the agent selects one. Billing data is scoped to conversations the agent can access. - Customer matching uses Stripe Search with an exact case-insensitive email check. Newly created or edited customers may not appear immediately because of indexing delays. Stripe Search is unavailable to businesses in India; this integration currently shares that limitation. See [Stripe Search limitations](https://docs.stripe.com/search#limitations). - Connections reuse integration hooks, with encrypted OAuth credentials and token refresh. No new database table is required. Active Record encryption must be configured. - Configure the matching OAuth installation link and developer secret in Super Admin → Settings → Stripe. The Stripe app must allow the installation's `/stripe/callback` URL. Each installation uses one credential pair; changing environments requires reconnecting accounts. - Disconnecting removes the local credentials. Uninstall the app in Stripe to revoke provider-side access. - The sandbox flow has been exercised locally. Live-mode behavior has automated coverage, but live credentials, an internal live pilot, deployment, and Marketplace publishing are deferred. ### How to test 1. Configure a sandbox OAuth link and matching developer key in Super Admin → Settings → Stripe, with Active Record encryption enabled. 2. As an account administrator, open Settings → Integrations → Stripe and connect a sandbox. Confirm the connected account, environment, date, and dashboard link. 3. Create a Stripe customer whose email matches a Chatwoot contact, with a subscription and invoices. Open that contact's conversation and expand Stripe to see the customer, subscription status, and recent invoice amounts, dates, and statuses. 4. Check a contact with no email, no matching customer, and multiple matching customers. The sidebar should show the appropriate empty state or customer selector. Use a mixed-case email in Stripe to verify case-insensitive matching, and edit the contact email with the sidebar open to verify it reloads and clears the old customer selection. Allow time for Stripe's search index to update. 5. Confirm agents cannot manage the connection or retrieve Stripe data through an inaccessible conversation. 6. Disconnect and confirm the sidebar is no longer available. Live-account verification is a separate rollout step and has not been performed. --------- Co-authored-by: Muhsin <12408980+muhsin-k@users.noreply.github.com> Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Co-authored-by: iamsivin <iamsivin@gmail.com>
26 lines
528 B
JavaScript
26 lines
528 B
JavaScript
/* global axios */
|
|
import ApiClient from '../ApiClient';
|
|
|
|
class StripeAPI extends ApiClient {
|
|
constructor() {
|
|
super('integrations/stripe', { accountScoped: true });
|
|
}
|
|
|
|
connect() {
|
|
return axios.post(`${this.url}/auth`);
|
|
}
|
|
|
|
disconnect() {
|
|
return axios.delete(this.url);
|
|
}
|
|
|
|
customer(conversationId, customerId, signal) {
|
|
return axios.get(`${this.url}/customer`, {
|
|
params: { conversation_id: conversationId, customer_id: customerId },
|
|
signal,
|
|
});
|
|
}
|
|
}
|
|
|
|
export default new StripeAPI();
|