[{"data":1,"prerenderedAt":993},["ShallowReactive",2],{"navigation_docs":3,"-packages-fluent-php-orders":465,"-packages-fluent-php-orders-surround":988},[4,8,62,115,450],{"title":5,"path":6,"stem":7},"Introduction","\u002Fintroduction","0.introduction",{"title":9,"path":10,"stem":11,"children":12,"page":61},"Guides","\u002Fguides","1.guides",[13,17,21,25,29,33,37,41,45,49,53,57],{"title":14,"path":15,"stem":16},"Quickstart","\u002Fguides\u002Fquickstart","1.guides\u002F1.quickstart",{"title":18,"path":19,"stem":20},"Payouts & Settlement","\u002Fguides\u002Fpayouts","1.guides\u002F10.payouts",{"title":22,"path":23,"stem":24},"Customer Emails","\u002Fguides\u002Fcustomer-emails","1.guides\u002F11.customer-emails",{"title":26,"path":27,"stem":28},"Build your own integration","\u002Fguides\u002Fbuild-your-own-integration","1.guides\u002F2.build-your-own-integration",{"title":30,"path":31,"stem":32},"Selling Workflow","\u002Fguides\u002Fselling-workflow","1.guides\u002F2.selling-workflow",{"title":34,"path":35,"stem":36},"Vatly SDKs","\u002Fguides\u002Fsdks","1.guides\u002F3.sdks",{"title":38,"path":39,"stem":40},"Authentication","\u002Fguides\u002Fauthentication","1.guides\u002F4.authentication",{"title":42,"path":43,"stem":44},"Pagination","\u002Fguides\u002Fpagination","1.guides\u002F5.pagination",{"title":46,"path":47,"stem":48},"Errors","\u002Fguides\u002Ferrors","1.guides\u002F6.errors",{"title":50,"path":51,"stem":52},"Webhooks","\u002Fguides\u002Fwebhooks","1.guides\u002F7.webhooks",{"title":54,"path":55,"stem":56},"Idempotency","\u002Fguides\u002Fidempotency","1.guides\u002F8.idempotency",{"title":58,"path":59,"stem":60},"Testing","\u002Fguides\u002Ftesting","1.guides\u002F9.testing",false,{"title":63,"path":64,"stem":65,"children":66,"page":61},"Api Reference","\u002Fapi-reference","2.api-reference",[67,71,75,79,83,87,91,95,99,103,107,111],{"title":68,"path":69,"stem":70},"Customers","\u002Fapi-reference\u002Fcustomers","2.api-reference\u002F1.customers",{"title":72,"path":73,"stem":74},"Webhook Endpoints","\u002Fapi-reference\u002Fwebhook-endpoints","2.api-reference\u002F10.webhook-endpoints",{"title":76,"path":77,"stem":78},"Test helpers","\u002Fapi-reference\u002Ftest-helpers","2.api-reference\u002F11.test-helpers",{"title":80,"path":81,"stem":82},"Checkouts","\u002Fapi-reference\u002Fcheckouts","2.api-reference\u002F2.checkouts",{"title":84,"path":85,"stem":86},"One-off Products","\u002Fapi-reference\u002Fone-off-products","2.api-reference\u002F3.one-off-products",{"title":88,"path":89,"stem":90},"Subscriptions","\u002Fapi-reference\u002Fsubscriptions","2.api-reference\u002F4.subscriptions",{"title":92,"path":93,"stem":94},"Subscription Plans","\u002Fapi-reference\u002Fsubscription-plans","2.api-reference\u002F5.subscription-plans",{"title":96,"path":97,"stem":98},"Orders","\u002Fapi-reference\u002Forders","2.api-reference\u002F6.orders",{"title":100,"path":101,"stem":102},"Order Refunds","\u002Fapi-reference\u002Frefunds","2.api-reference\u002F7.refunds",{"title":104,"path":105,"stem":106},"Refunds","\u002Fapi-reference\u002Fglobal-refunds","2.api-reference\u002F8.global-refunds",{"title":108,"path":109,"stem":110},"Chargebacks","\u002Fapi-reference\u002Fchargebacks","2.api-reference\u002F9.chargebacks",{"title":112,"path":113,"stem":114},"Webhook Events","\u002Fapi-reference\u002Fwebhook-events","2.api-reference\u002F99.webhook-events",{"title":116,"path":117,"stem":118,"children":119},"Packages","\u002Fpackages","3.packages",[120,122,164,210,244,283,318,366,408],{"title":116,"path":117,"stem":121},"3.packages\u002Findex",{"title":123,"path":124,"stem":125,"children":126,"page":61},"PHP SDK","\u002Fpackages\u002Fphp","3.packages\u002F1.php",[127,131,134,137,140,144,147,151,154,157,160],{"title":128,"path":129,"stem":130},"Getting started","\u002Fpackages\u002Fphp\u002Freadme","3.packages\u002F1.php\u002F00.readme",{"title":68,"path":132,"stem":133},"\u002Fpackages\u002Fphp\u002Fcustomers","3.packages\u002F1.php\u002F02.customers",{"title":80,"path":135,"stem":136},"\u002Fpackages\u002Fphp\u002Fcheckouts","3.packages\u002F1.php\u002F03.checkouts",{"title":88,"path":138,"stem":139},"\u002Fpackages\u002Fphp\u002Fsubscriptions","3.packages\u002F1.php\u002F04.subscriptions",{"title":141,"path":142,"stem":143},"Subscription plans","\u002Fpackages\u002Fphp\u002Fsubscriptionplans","3.packages\u002F1.php\u002F05.subscriptionplans",{"title":96,"path":145,"stem":146},"\u002Fpackages\u002Fphp\u002Forders","3.packages\u002F1.php\u002F06.orders",{"title":148,"path":149,"stem":150},"One-off products","\u002Fpackages\u002Fphp\u002Foneoffproducts","3.packages\u002F1.php\u002F07.oneoffproducts",{"title":104,"path":152,"stem":153},"\u002Fpackages\u002Fphp\u002Frefunds","3.packages\u002F1.php\u002F08.refunds",{"title":108,"path":155,"stem":156},"\u002Fpackages\u002Fphp\u002Fchargebacks","3.packages\u002F1.php\u002F09.chargebacks",{"title":50,"path":158,"stem":159},"\u002Fpackages\u002Fphp\u002Fwebhooks","3.packages\u002F1.php\u002F10.webhooks",{"title":161,"path":162,"stem":163},"Webhook URLs","\u002Fpackages\u002Fphp\u002Fwebhookendpoints","3.packages\u002F1.php\u002F11.webhookendpoints",{"title":165,"path":166,"stem":167,"children":168,"page":61},"PHP Fluent","\u002Fpackages\u002Ffluent-php","3.packages\u002F2.fluent-php",[169,172,176,180,183,186,189,192,196,199,203,207],{"title":128,"path":170,"stem":171},"\u002Fpackages\u002Ffluent-php\u002Freadme","3.packages\u002F2.fluent-php\u002F00.readme",{"title":173,"path":174,"stem":175},"Configuration","\u002Fpackages\u002Ffluent-php\u002Fconfiguration","3.packages\u002F2.fluent-php\u002F01.configuration",{"title":177,"path":178,"stem":179},"Core concepts","\u002Fpackages\u002Ffluent-php\u002Fcoreconcepts","3.packages\u002F2.fluent-php\u002F02.coreconcepts",{"title":68,"path":181,"stem":182},"\u002Fpackages\u002Ffluent-php\u002Fcustomers","3.packages\u002F2.fluent-php\u002F03.customers",{"title":80,"path":184,"stem":185},"\u002Fpackages\u002Ffluent-php\u002Fcheckouts","3.packages\u002F2.fluent-php\u002F04.checkouts",{"title":88,"path":187,"stem":188},"\u002Fpackages\u002Ffluent-php\u002Fsubscriptions","3.packages\u002F2.fluent-php\u002F05.subscriptions",{"title":96,"path":190,"stem":191},"\u002Fpackages\u002Ffluent-php\u002Forders","3.packages\u002F2.fluent-php\u002F06.orders",{"title":193,"path":194,"stem":195},"Customer portal","\u002Fpackages\u002Ffluent-php\u002Fcustomerportal","3.packages\u002F2.fluent-php\u002F07.customerportal",{"title":50,"path":197,"stem":198},"\u002Fpackages\u002Ffluent-php\u002Fwebhooks","3.packages\u002F2.fluent-php\u002F08.webhooks",{"title":200,"path":201,"stem":202},"Webhook event flow","\u002Fpackages\u002Ffluent-php\u002Fwebhook-flow","3.packages\u002F2.fluent-php\u002F09.webhook-flow",{"title":204,"path":205,"stem":206},"Existing tables","\u002Fpackages\u002Ffluent-php\u002Fhost-owns-its-tables","3.packages\u002F2.fluent-php\u002F10.host-owns-its-tables",{"title":58,"path":208,"stem":209},"\u002Fpackages\u002Ffluent-php\u002Ftesting","3.packages\u002F2.fluent-php\u002F11.testing",{"title":211,"path":212,"stem":213,"children":214,"page":61},"Laravel","\u002Fpackages\u002Flaravel","3.packages\u002F3.laravel",[215,218,221,224,227,230,233,236,240],{"title":128,"path":216,"stem":217},"\u002Fpackages\u002Flaravel\u002Freadme","3.packages\u002F3.laravel\u002F00.readme",{"title":173,"path":219,"stem":220},"\u002Fpackages\u002Flaravel\u002Fconfiguration","3.packages\u002F3.laravel\u002F01.configuration",{"title":68,"path":222,"stem":223},"\u002Fpackages\u002Flaravel\u002Fcustomers","3.packages\u002F3.laravel\u002F02.customers",{"title":80,"path":225,"stem":226},"\u002Fpackages\u002Flaravel\u002Fcheckouts","3.packages\u002F3.laravel\u002F03.checkouts",{"title":88,"path":228,"stem":229},"\u002Fpackages\u002Flaravel\u002Fsubscriptions","3.packages\u002F3.laravel\u002F04.subscriptions",{"title":96,"path":231,"stem":232},"\u002Fpackages\u002Flaravel\u002Forders","3.packages\u002F3.laravel\u002F05.orders",{"title":50,"path":234,"stem":235},"\u002Fpackages\u002Flaravel\u002Fwebhooks","3.packages\u002F3.laravel\u002F06.webhooks",{"title":237,"path":238,"stem":239},"Comparison","\u002Fpackages\u002Flaravel\u002Fcomparison","3.packages\u002F3.laravel\u002F07.comparison",{"title":241,"path":242,"stem":243},"Migrating from Cashier","\u002Fpackages\u002Flaravel\u002Fmigrating-to-vatly","3.packages\u002F3.laravel\u002F08.migrating-to-vatly",{"title":245,"path":246,"stem":247,"children":248,"page":61},"JavaScript SDK","\u002Fpackages\u002Fjavascript","3.packages\u002F4.javascript",[249,252,255,258,261,264,267,270,273,276,279],{"title":128,"path":250,"stem":251},"\u002Fpackages\u002Fjavascript\u002Freadme","3.packages\u002F4.javascript\u002F00.readme",{"title":68,"path":253,"stem":254},"\u002Fpackages\u002Fjavascript\u002Fcustomers","3.packages\u002F4.javascript\u002F02.customers",{"title":80,"path":256,"stem":257},"\u002Fpackages\u002Fjavascript\u002Fcheckouts","3.packages\u002F4.javascript\u002F03.checkouts",{"title":88,"path":259,"stem":260},"\u002Fpackages\u002Fjavascript\u002Fsubscriptions","3.packages\u002F4.javascript\u002F04.subscriptions",{"title":141,"path":262,"stem":263},"\u002Fpackages\u002Fjavascript\u002Fsubscriptionplans","3.packages\u002F4.javascript\u002F05.subscriptionplans",{"title":96,"path":265,"stem":266},"\u002Fpackages\u002Fjavascript\u002Forders","3.packages\u002F4.javascript\u002F06.orders",{"title":148,"path":268,"stem":269},"\u002Fpackages\u002Fjavascript\u002Foneoffproducts","3.packages\u002F4.javascript\u002F07.oneoffproducts",{"title":104,"path":271,"stem":272},"\u002Fpackages\u002Fjavascript\u002Frefunds","3.packages\u002F4.javascript\u002F08.refunds",{"title":108,"path":274,"stem":275},"\u002Fpackages\u002Fjavascript\u002Fchargebacks","3.packages\u002F4.javascript\u002F09.chargebacks",{"title":50,"path":277,"stem":278},"\u002Fpackages\u002Fjavascript\u002Fwebhooks","3.packages\u002F4.javascript\u002F10.webhooks",{"title":280,"path":281,"stem":282},"API reference","\u002Fpackages\u002Fjavascript\u002Fapi","3.packages\u002F4.javascript\u002F12.api",{"title":284,"path":285,"stem":286,"children":287,"page":61},"JavaScript Fluent","\u002Fpackages\u002Ffluent-js","3.packages\u002F5.fluent-js",[288,291,294,297,300,303,306,309,312,315],{"title":128,"path":289,"stem":290},"\u002Fpackages\u002Ffluent-js\u002Freadme","3.packages\u002F5.fluent-js\u002F00.readme",{"title":173,"path":292,"stem":293},"\u002Fpackages\u002Ffluent-js\u002Fconfiguration","3.packages\u002F5.fluent-js\u002F01.configuration",{"title":177,"path":295,"stem":296},"\u002Fpackages\u002Ffluent-js\u002Fcoreconcepts","3.packages\u002F5.fluent-js\u002F02.coreconcepts",{"title":68,"path":298,"stem":299},"\u002Fpackages\u002Ffluent-js\u002Fcustomers","3.packages\u002F5.fluent-js\u002F03.customers",{"title":80,"path":301,"stem":302},"\u002Fpackages\u002Ffluent-js\u002Fcheckouts","3.packages\u002F5.fluent-js\u002F04.checkouts",{"title":88,"path":304,"stem":305},"\u002Fpackages\u002Ffluent-js\u002Fsubscriptions","3.packages\u002F5.fluent-js\u002F05.subscriptions",{"title":96,"path":307,"stem":308},"\u002Fpackages\u002Ffluent-js\u002Forders","3.packages\u002F5.fluent-js\u002F06.orders",{"title":193,"path":310,"stem":311},"\u002Fpackages\u002Ffluent-js\u002Fcustomerportal","3.packages\u002F5.fluent-js\u002F07.customerportal",{"title":50,"path":313,"stem":314},"\u002Fpackages\u002Ffluent-js\u002Fwebhooks","3.packages\u002F5.fluent-js\u002F08.webhooks",{"title":58,"path":316,"stem":317},"\u002Fpackages\u002Ffluent-js\u002Ftesting","3.packages\u002F5.fluent-js\u002F11.testing",{"title":319,"path":320,"stem":321,"children":322,"page":61},"Python SDK","\u002Fpackages\u002Fpython","3.packages\u002F6.python",[323,326,329,332,335,338,341,344,347,350,353,356,359,362],{"title":128,"path":324,"stem":325},"\u002Fpackages\u002Fpython\u002Freadme","3.packages\u002F6.python\u002F00.readme",{"title":173,"path":327,"stem":328},"\u002Fpackages\u002Fpython\u002Fconfiguration","3.packages\u002F6.python\u002F01.configuration",{"title":68,"path":330,"stem":331},"\u002Fpackages\u002Fpython\u002Fcustomers","3.packages\u002F6.python\u002F02.customers",{"title":80,"path":333,"stem":334},"\u002Fpackages\u002Fpython\u002Fcheckouts","3.packages\u002F6.python\u002F03.checkouts",{"title":88,"path":336,"stem":337},"\u002Fpackages\u002Fpython\u002Fsubscriptions","3.packages\u002F6.python\u002F04.subscriptions",{"title":141,"path":339,"stem":340},"\u002Fpackages\u002Fpython\u002Fsubscriptionplans","3.packages\u002F6.python\u002F05.subscriptionplans",{"title":96,"path":342,"stem":343},"\u002Fpackages\u002Fpython\u002Forders","3.packages\u002F6.python\u002F06.orders",{"title":148,"path":345,"stem":346},"\u002Fpackages\u002Fpython\u002Foneoffproducts","3.packages\u002F6.python\u002F07.oneoffproducts",{"title":104,"path":348,"stem":349},"\u002Fpackages\u002Fpython\u002Frefunds","3.packages\u002F6.python\u002F08.refunds",{"title":108,"path":351,"stem":352},"\u002Fpackages\u002Fpython\u002Fchargebacks","3.packages\u002F6.python\u002F09.chargebacks",{"title":50,"path":354,"stem":355},"\u002Fpackages\u002Fpython\u002Fwebhooks","3.packages\u002F6.python\u002F10.webhooks",{"title":161,"path":357,"stem":358},"\u002Fpackages\u002Fpython\u002Fwebhookendpoints","3.packages\u002F6.python\u002F11.webhookendpoints",{"title":280,"path":360,"stem":361},"\u002Fpackages\u002Fpython\u002Fapi","3.packages\u002F6.python\u002F12.api",{"title":363,"path":364,"stem":365},"Development","\u002Fpackages\u002Fpython\u002Fdevelopment","3.packages\u002F6.python\u002F13.development",{"title":367,"path":368,"stem":369,"children":370,"page":61},"Python Fluent","\u002Fpackages\u002Ffluent-python","3.packages\u002F7.fluent-python",[371,374,377,380,383,386,389,392,395,398,401,405],{"title":128,"path":372,"stem":373},"\u002Fpackages\u002Ffluent-python\u002Freadme","3.packages\u002F7.fluent-python\u002F00.readme",{"title":173,"path":375,"stem":376},"\u002Fpackages\u002Ffluent-python\u002Fconfiguration","3.packages\u002F7.fluent-python\u002F01.configuration",{"title":177,"path":378,"stem":379},"\u002Fpackages\u002Ffluent-python\u002Fcoreconcepts","3.packages\u002F7.fluent-python\u002F02.coreconcepts",{"title":68,"path":381,"stem":382},"\u002Fpackages\u002Ffluent-python\u002Fcustomers","3.packages\u002F7.fluent-python\u002F03.customers",{"title":80,"path":384,"stem":385},"\u002Fpackages\u002Ffluent-python\u002Fcheckouts","3.packages\u002F7.fluent-python\u002F04.checkouts",{"title":88,"path":387,"stem":388},"\u002Fpackages\u002Ffluent-python\u002Fsubscriptions","3.packages\u002F7.fluent-python\u002F05.subscriptions",{"title":96,"path":390,"stem":391},"\u002Fpackages\u002Ffluent-python\u002Forders","3.packages\u002F7.fluent-python\u002F06.orders",{"title":193,"path":393,"stem":394},"\u002Fpackages\u002Ffluent-python\u002Fcustomerportal","3.packages\u002F7.fluent-python\u002F07.customerportal",{"title":50,"path":396,"stem":397},"\u002Fpackages\u002Ffluent-python\u002Fwebhooks","3.packages\u002F7.fluent-python\u002F08.webhooks",{"title":58,"path":399,"stem":400},"\u002Fpackages\u002Ffluent-python\u002Ftesting","3.packages\u002F7.fluent-python\u002F11.testing",{"title":402,"path":403,"stem":404},"Porting","\u002Fpackages\u002Ffluent-python\u002Fporting","3.packages\u002F7.fluent-python\u002F12.porting",{"title":363,"path":406,"stem":407},"\u002Fpackages\u002Ffluent-python\u002Fdevelopment","3.packages\u002F7.fluent-python\u002F13.development",{"title":409,"path":410,"stem":411,"children":412,"page":61},"Django","\u002Fpackages\u002Fdjango","3.packages\u002F8.django",[413,416,420,423,427,431,434,437,440,444,447],{"title":128,"path":414,"stem":415},"\u002Fpackages\u002Fdjango\u002Freadme","3.packages\u002F8.django\u002F00.readme",{"title":417,"path":418,"stem":419},"Installation","\u002Fpackages\u002Fdjango\u002Finstallation","3.packages\u002F8.django\u002F01.installation",{"title":173,"path":421,"stem":422},"\u002Fpackages\u002Fdjango\u002Fconfiguration","3.packages\u002F8.django\u002F02.configuration",{"title":424,"path":425,"stem":426},"Billable models","\u002Fpackages\u002Fdjango\u002Fbillablemodels","3.packages\u002F8.django\u002F03.billablemodels",{"title":428,"path":429,"stem":430},"Checkout","\u002Fpackages\u002Fdjango\u002Fcheckout","3.packages\u002F8.django\u002F04.checkout",{"title":88,"path":432,"stem":433},"\u002Fpackages\u002Fdjango\u002Fbilling","3.packages\u002F8.django\u002F05.billing",{"title":193,"path":435,"stem":436},"\u002Fpackages\u002Fdjango\u002Fcustomerportal","3.packages\u002F8.django\u002F06.customerportal",{"title":50,"path":438,"stem":439},"\u002Fpackages\u002Fdjango\u002Fwebhooks","3.packages\u002F8.django\u002F07.webhooks",{"title":441,"path":442,"stem":443},"Admin","\u002Fpackages\u002Fdjango\u002Fadmin","3.packages\u002F8.django\u002F08.admin",{"title":58,"path":445,"stem":446},"\u002Fpackages\u002Fdjango\u002Ftesting","3.packages\u002F8.django\u002F09.testing",{"title":363,"path":448,"stem":449},"\u002Fpackages\u002Fdjango\u002Fdevelopment","3.packages\u002F8.django\u002F10.development",{"title":451,"path":452,"stem":453,"children":454},"Integrations","\u002Fintegrations","4.integrations",[455,457,461],{"title":451,"path":452,"stem":456},"4.integrations\u002Findex",{"title":458,"path":459,"stem":460},"Lovable payments with Vatly","\u002Fintegrations\u002Flovable","4.integrations\u002F1.lovable",{"title":462,"path":463,"stem":464},"Bolt payments with Vatly","\u002Fintegrations\u002Fbolt","4.integrations\u002F2.bolt",{"id":466,"title":96,"body":467,"description":981,"extension":982,"links":983,"meta":984,"navigation":985,"path":190,"seo":986,"stem":191,"__hash__":987},"docs\u002F3.packages\u002F2.fluent-php\u002F06.orders.md",{"type":468,"value":469,"toc":977},"minimark",[470,483,594,617,627,632,635,806,809,816,830,834,837,921,956,973],[471,472,473,474,478,479,482],"p",{},"Show an invoice for a local order without rebuilding Vatly's invoice UI. Here ",[475,476,477],"code",{},"$localOrder"," implements ",[475,480,481],{},"OrderInterface"," and belongs to the signed-in account:",[484,485,490],"pre",{"className":486,"code":487,"language":488,"meta":489,"style":489},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","$order = $vatly->order($localOrder);\n$invoiceUrl = $order->invoiceUrl();\n$totalCents = $order->getTotal();\n$currency = $order->getCurrency();\n","php","",[475,491,492,530,552,573],{"__ignoreMap":489},[493,494,497,501,505,508,511,514,517,521,524,527],"span",{"class":495,"line":496},"line",1,[493,498,500],{"class":499},"sMK4o","$",[493,502,504],{"class":503},"sTEyZ","order ",[493,506,507],{"class":499},"=",[493,509,510],{"class":499}," $",[493,512,513],{"class":503},"vatly",[493,515,516],{"class":499},"->",[493,518,520],{"class":519},"s2Zo4","order",[493,522,523],{"class":499},"($",[493,525,526],{"class":503},"localOrder",[493,528,529],{"class":499},");\n",[493,531,533,535,538,540,542,544,546,549],{"class":495,"line":532},2,[493,534,500],{"class":499},[493,536,537],{"class":503},"invoiceUrl ",[493,539,507],{"class":499},[493,541,510],{"class":499},[493,543,520],{"class":503},[493,545,516],{"class":499},[493,547,548],{"class":519},"invoiceUrl",[493,550,551],{"class":499},"();\n",[493,553,555,557,560,562,564,566,568,571],{"class":495,"line":554},3,[493,556,500],{"class":499},[493,558,559],{"class":503},"totalCents ",[493,561,507],{"class":499},[493,563,510],{"class":499},[493,565,520],{"class":503},[493,567,516],{"class":499},[493,569,570],{"class":519},"getTotal",[493,572,551],{"class":499},[493,574,576,578,581,583,585,587,589,592],{"class":495,"line":575},4,[493,577,500],{"class":499},[493,579,580],{"class":503},"currency ",[493,582,507],{"class":499},[493,584,510],{"class":499},[493,586,520],{"class":503},[493,588,516],{"class":499},[493,590,591],{"class":519},"getCurrency",[493,593,551],{"class":499},[471,595,596,597,600,601,604,605,608,609,612,613,616],{},"Render an invoice link only when ",[475,598,599],{},"$invoiceUrl"," is not ",[475,602,603],{},"null",". ",[475,606,607],{},"getTotal()"," and ",[475,610,611],{},"getCurrency()"," read local state. ",[475,614,615],{},"invoiceUrl()"," fetches the live API order; it may have no invoice yet. Escape URLs and text in your templates.",[471,618,619,620,604,623,626],{},"Persist orders through ",[621,622,50],"a",{"href":197},[475,624,625],{},"order.paid"," includes tax details and lines; your order writer owns how they map to your database. Do not create a second local order just because a delivery is retried.",[628,629,631],"h2",{"id":630},"show-refunds-and-chargebacks","Show refunds and chargebacks",[471,633,634],{},"Read the net subtotal returned to the customer, regardless of whether it was a refund or chargeback:",[484,636,638],{"className":486,"code":637,"language":488,"meta":489,"style":489},"$order = $vatly->order($localOrder);\n$reversedCents = $order->reversedSubtotal();\n$remainingCents = $order->refundableSubtotal();\n$partlyReversed = $order->isPartiallyReversed();\n$fullyReversed = $order->isFullyReversed();\n$refunds = $order->refunds();\n$chargebacks = $order->chargebacks();\n$lines = $order->lines();\n",[475,639,640,662,682,702,722,743,764,785],{"__ignoreMap":489},[493,641,642,644,646,648,650,652,654,656,658,660],{"class":495,"line":496},[493,643,500],{"class":499},[493,645,504],{"class":503},[493,647,507],{"class":499},[493,649,510],{"class":499},[493,651,513],{"class":503},[493,653,516],{"class":499},[493,655,520],{"class":519},[493,657,523],{"class":499},[493,659,526],{"class":503},[493,661,529],{"class":499},[493,663,664,666,669,671,673,675,677,680],{"class":495,"line":532},[493,665,500],{"class":499},[493,667,668],{"class":503},"reversedCents ",[493,670,507],{"class":499},[493,672,510],{"class":499},[493,674,520],{"class":503},[493,676,516],{"class":499},[493,678,679],{"class":519},"reversedSubtotal",[493,681,551],{"class":499},[493,683,684,686,689,691,693,695,697,700],{"class":495,"line":554},[493,685,500],{"class":499},[493,687,688],{"class":503},"remainingCents ",[493,690,507],{"class":499},[493,692,510],{"class":499},[493,694,520],{"class":503},[493,696,516],{"class":499},[493,698,699],{"class":519},"refundableSubtotal",[493,701,551],{"class":499},[493,703,704,706,709,711,713,715,717,720],{"class":495,"line":575},[493,705,500],{"class":499},[493,707,708],{"class":503},"partlyReversed ",[493,710,507],{"class":499},[493,712,510],{"class":499},[493,714,520],{"class":503},[493,716,516],{"class":499},[493,718,719],{"class":519},"isPartiallyReversed",[493,721,551],{"class":499},[493,723,725,727,730,732,734,736,738,741],{"class":495,"line":724},5,[493,726,500],{"class":499},[493,728,729],{"class":503},"fullyReversed ",[493,731,507],{"class":499},[493,733,510],{"class":499},[493,735,520],{"class":503},[493,737,516],{"class":499},[493,739,740],{"class":519},"isFullyReversed",[493,742,551],{"class":499},[493,744,746,748,751,753,755,757,759,762],{"class":495,"line":745},6,[493,747,500],{"class":499},[493,749,750],{"class":503},"refunds ",[493,752,507],{"class":499},[493,754,510],{"class":499},[493,756,520],{"class":503},[493,758,516],{"class":499},[493,760,761],{"class":519},"refunds",[493,763,551],{"class":499},[493,765,767,769,772,774,776,778,780,783],{"class":495,"line":766},7,[493,768,500],{"class":499},[493,770,771],{"class":503},"chargebacks ",[493,773,507],{"class":499},[493,775,510],{"class":499},[493,777,520],{"class":503},[493,779,516],{"class":499},[493,781,782],{"class":519},"chargebacks",[493,784,551],{"class":499},[493,786,788,790,793,795,797,799,801,804],{"class":495,"line":787},8,[493,789,500],{"class":499},[493,791,792],{"class":503},"lines ",[493,794,507],{"class":499},[493,796,510],{"class":499},[493,798,520],{"class":503},[493,800,516],{"class":499},[493,802,803],{"class":519},"lines",[493,805,551],{"class":499},[471,807,808],{},"Reversal amounts are net of tax, in integer cents. They come from the live API, not a sum of your local records. The handle fetches the API order once and shares that snapshot with invoice and reversal helpers. Build a new handle when you need a fresh snapshot.",[471,810,811,812,815],{},"The order remains ",[475,813,814],{},"paid"," after a reversal; do not invent a refunded order status. Your application decides what a refund or dispute means for access.",[471,817,818,821,822,825,826,829],{},[475,819,820],{},"refunds()",", ",[475,823,824],{},"chargebacks()",", and ",[475,827,828],{},"lines()"," are local reads. Each returns an empty array if its optional repository is not wired. That does not prove the API has no such records. Wire refund and chargeback repositories to persist their events. Persist lines in your order writer and supply an order-line repository to read them back.",[628,831,833],{"id":832},"find-a-subscriptions-orders","Find a subscription's orders",[471,835,836],{},"List the local lines of every order a subscription generated, including the initial signup order, through the order-line repository you wired:",[484,838,840],{"className":486,"code":839,"language":488,"meta":489,"style":489},"$lines = $orderLines->listForSubscription($subscriptionId);\n$orderIds = array_unique(array_map(fn ($line) => $line->getOrderId(), $lines));\n",[475,841,842,867],{"__ignoreMap":489},[493,843,844,846,848,850,852,855,857,860,862,865],{"class":495,"line":496},[493,845,500],{"class":499},[493,847,792],{"class":503},[493,849,507],{"class":499},[493,851,510],{"class":499},[493,853,854],{"class":503},"orderLines",[493,856,516],{"class":499},[493,858,859],{"class":519},"listForSubscription",[493,861,523],{"class":499},[493,863,864],{"class":503},"subscriptionId",[493,866,529],{"class":499},[493,868,869,871,874,876,879,882,885,887,891,894,896,899,902,904,906,908,911,914,916,918],{"class":495,"line":532},[493,870,500],{"class":499},[493,872,873],{"class":503},"orderIds ",[493,875,507],{"class":499},[493,877,878],{"class":519}," array_unique",[493,880,881],{"class":499},"(",[493,883,884],{"class":519},"array_map",[493,886,881],{"class":499},[493,888,890],{"class":889},"spNyl","fn",[493,892,893],{"class":499}," ($",[493,895,495],{"class":503},[493,897,898],{"class":499},")",[493,900,901],{"class":499}," =>",[493,903,510],{"class":499},[493,905,495],{"class":503},[493,907,516],{"class":499},[493,909,910],{"class":519},"getOrderId",[493,912,913],{"class":499},"(),",[493,915,510],{"class":499},[493,917,803],{"class":503},[493,919,920],{"class":499},"));\n",[471,922,923,924,927,928,931,932,935,936,939,940,942,943,946,947,931,949,608,952,955],{},"Each line's ",[475,925,926],{},"getSubscriptionId()"," names its subscription, whatever its product. An initial signup line keeps referencing the plan (",[475,929,930],{},"productType"," is ",[475,933,934],{},"subscription_plan","); renewals reference the subscription. When your writer stores a line, save ",[475,937,938],{},"$line->relatedResources?->subscriptionId"," with it. It is ",[475,941,603],{}," on one-off lines, on lines Vatly created before it carried the link, and on a signup line whose subscription was not yet available when the order was paid. ",[475,944,945],{},"listForSubscription()"," also returns renewal lines whose ",[475,948,930],{},[475,950,951],{},"subscription",[475,953,954],{},"productId"," is the subscription id, so renewals stored without the link still appear.",[471,957,958,959,962,963,968,969,972],{},"For refund creation, credit-note fields, and the full order schema, use the underlying SDK through ",[475,960,961],{},"getApiClient()"," and the ",[621,964,280],{"href":965,"rel":966},"https:\u002F\u002Fdocs.vatly.com\u002Fapi-reference",[967],"nofollow",". See ",[621,970,971],{"href":201},"Event flow"," for persistence behavior.",[974,975,976],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":489,"searchDepth":532,"depth":532,"links":978},[979,980],{"id":630,"depth":532,"text":631},{"id":832,"depth":532,"text":833},"Show an invoice for a local order without rebuilding Vatly's invoice UI.","md",null,{},{"title":96},{"title":96,"description":981},"aCmdU8IIDUqyd1w9NZqtBLWH09uX5Xz2AmjETzqJmIs",[989,991],{"title":88,"path":187,"stem":188,"description":990,"children":-1},"Change a subscription using a local record that implements SubscriptionInterface.",{"title":193,"path":194,"stem":195,"description":992,"children":-1},"Let a customer manage billing on Vatly's hosted portal instead of building those screens yourself.",1794594926884]