## Summary - Makes Stripe Terminal card payment intents always use 25% moms in the API, independent of any client-supplied `tax_percentage`. - Updates amount calculation, metadata persistence, stored-intent reuse matching, the authoritative OpenAPI contracts, and operation-specific Writerside outputs. - Prevents double charging and false order closure across stale, concurrently succeeded, partially recorded, or mismatched intents. - Serializes payment create/capture/closure with order-item changes and every order-to-invoice-collection reassignment through shared database locks. - Converts expected lock contention and reconciliation cases into deliberate 409 responses. ## Exact-head evidence Current head: `3a0f70d315a94d2efe586a2188d2c54f8ff11cd4` - PHP syntax passed for all changed runtime files. - Focused Orders suite: **42 tests / 293 assertions passed**. - `git diff --check` passed. - Fresh exact-head Tests and Qodana are running. - Every Codex finding has a concrete reply; a fresh exact-head review is requested below. ## Safety behavior - Caller-controlled VAT is absent from request contracts; fixed 25% moms is server-owned. - A succeeded payment is preserved, requires the full expected `amount_received`, and cannot close a changed/mismatched or already-claimed collection. - A compatible partially recorded Stripe closure is completed idempotently; conflicting partial state fails closed for manual reconciliation. - Every cancellation/delete caller honors a concurrent-success result and never falsely reports a completed payment as cleared. - Price changes and invoice-collection reassignment share the payment lock through validation, capture, post-capture reload, and closure. - Reader changes are persisted only for reusable matching intents, so stale intent cancellation targets the original terminal. - Accepted legacy succeeded intents normalize stored tax to 25% before response construction. --------- Co-authored-by: Jeppe Bundgaard <jb@truckwash.dk>
56 lines
2.0 KiB
XML
56 lines
2.0 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE topic
|
|
SYSTEM "https://resources.jetbrains.com/writerside/1.0/xhtml-entities.dtd">
|
|
<topic xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
xsi:noNamespaceSchemaLocation="https://resources.jetbrains.com/writerside/1.0/topic.v2.xsd"
|
|
title="Create Stripe payment intent" id="createStripePaymentIntent">
|
|
|
|
<!-- AUTO-GENERATED, DO NOT EDIT -->
|
|
<p>This endpoint documentation is generated directly from <code>openapi.yaml</code>.</p>
|
|
<chapter title="Endpoint" id="endpoint">
|
|
<code-block lang="http">POST /orders/module/stripe/payment_intent</code-block>
|
|
</chapter>
|
|
<chapter title="Operation" id="operation">
|
|
<p>Operation ID: <code>createStripePaymentIntent</code></p>
|
|
<p>Creates a Stripe Terminal card payment intent with fixed 25% moms.</p>
|
|
</chapter>
|
|
<chapter title="Authentication" id="authentication">
|
|
<p>Security requirements:</p>
|
|
<table>
|
|
<tr><td>Scheme</td><td>Scopes</td></tr>
|
|
<tr><td>BearerAuth</td><td>-</td></tr>
|
|
</table>
|
|
</chapter>
|
|
<chapter title="Request Body" id="request-body">
|
|
<p>Required: yes.</p>
|
|
<p>Content type: <code>application/json</code></p>
|
|
<code-block lang="json">
|
|
{
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"reader": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"reader"
|
|
],
|
|
"type": "object"
|
|
}
|
|
</code-block>
|
|
</chapter>
|
|
<chapter title="Responses" id="responses">
|
|
<table>
|
|
<tr><td>Status</td><td>Description</td><td>Content Types</td></tr>
|
|
<tr><td>200</td><td>Success</td><td>application/json</td></tr>
|
|
</table>
|
|
<p>Schema for response <code>200</code> (<code>application/json</code>):</p>
|
|
<code-block lang="json">
|
|
{}
|
|
</code-block>
|
|
</chapter>
|
|
</topic>
|