Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
erp5 erp5
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Labels
    • Labels
  • Merge requests 141
    • Merge requests 141
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Environments
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Jobs
  • Commits
Collapse sidebar
  • nexedi
  • erp5erp5
  • Merge requests
  • !1656

Merged
Created Aug 12, 2022 by Gabriel Monnerat@gabrielDeveloper

erp5_stripe: introduce new module and features to handle Stripe checkout and payments in ERP5

  • Overview 65
  • Commits 2
  • Changes 104

This business template contains a framework to integrate stripe checkout payments in ERP5.

To configure the connector:

  • Create an account on stripe.com
  • In stripe.com's dashboard: Developers / API keys use "Create restricted key" to create a key with write access to "All Checkout resources".
  • Create a stripe connector in portal_web_services. Set URL to https://api.stripe.com/v1/ and the restricted key created in the previous step
  • In stripe.com's dashboard: Developers / Webhooks use "Add endpoint", with "Endpoint URL" set to https://your.erp5.public.hostname/ERP5Site_receiveStripeWebHook and "Events to send" including all events from "checkout.session" category.

To integrate in an ERP5 project:

  • Implement a custom script to start a checkout session. The script should call StripePaymentSessionModule_createStripeSession to initiate the session and redirect the end user to stripe checkout page.
  • Implement an interaction workfow on Stripe Payment Session.complete which inspects the value of state_change['kwargs']['payment_status'] and implement the logic (such as create a payment transaction) depending on the status "paid" or "unpaid".

Example script to create session

web_site = context.getWebSiteValue()
data = {
  # custom web sections for success and cancel URLs
  "success_url": web_site.stripe_payment_session_success.absolute_url(),
  "cancel_url": web_site.stripe_payment_session_cancel.absolute_url(),
  "line_items": {
      "price_data": {
        "currency": "EUR",
        "unit_amount": 2000, # for 20.00 EUR
        "product_data": {
          "name": "Product Name",
        }
      },
      "quantity": 1
    }
}

 # this will redirect the user to stripe checkout page
return module.StripePaymentSessionModule_createStripeSession(
  connector,
  data,
  context.getRelativeUrl(),
  resource="service_module/...",
)

Example interaction workflow script

if state_change['kwargs']['payment_status'] == 'paid':
  portal.accounting_module.newContent(
    portal_type='Payment Transaction',
    causality_value=state_change['object'],
    description="Stripe checkout ...",
    ...
  )

Implementation notes:

  • Add new stripe connector in ERP5 to access retrieve Stripe session
  • New ERP5 functional module to handle Stripe Payment Sessions
  • Stripe Payment Session reflects a payment transaction/session initiated using the Stripe Checkout solution.
  • Workflow associated with Stripe Payment Sessions provides for the "draft", "open", "completed" and "expired" states in order to reflect the existing states on Stripe.
  • Each Stripe Payment Session offers a history and complete traceability of the HTTP exchanges carried out between ERP5 and Stripe from the start and the end of the payment transaction. All Stripe API calls (createSession, retrieveSession) and Stripe webhook POSTs are logged as system events (HTTP Exchange ERP5) related to a Stripe Payment Session.
  • Add alarm to handle Stripe Payment Sessions open whose date are expired
  • Set web service as source in Stripe Payment Session
Edited Nov 07, 2022 by Jérome Perrin
Assignee
Assign to
Reviewer
Request review from
None
Milestone
None
Assign milestone
Time tracking
Source branch: stripe_payment_session
GitLab Nexedi Edition | About GitLab | About Nexedi | 沪ICP备2021021310号-2 | 沪ICP备2021021310号-7