{"id":137491,"date":"2024-05-23T14:45:04","date_gmt":"2024-05-23T05:45:04","guid":{"rendered":"https:\/\/support.questetra.com\/?p=137491"},"modified":"2024-05-23T14:47:16","modified_gmt":"2024-05-23T05:47:16","slug":"service-task-stripe-invoice-item-add","status":"publish","type":"post","link":"https:\/\/support.questetra.com\/en\/bpmn-icons\/service-task-stripe-invoice-item-add\/","title":{"rendered":"Stripe: Add Item to Draft Invoice"},"content":{"rendered":"\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"58\" data-attachment-id=\"113160\" data-permalink=\"https:\/\/support.questetra.com\/en\/developer-blog\/how-to-use-timer-start-event\/attachment\/advanced-banner-new-en\/\" data-orig-file=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/05\/advanced-banner-new-en.png?fit=1200%2C68&amp;ssl=1\" data-orig-size=\"1200,68\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"advanced-banner-new-en\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/05\/advanced-banner-new-en.png?fit=1024%2C58&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/05\/advanced-banner-new-en-1024x58.png?resize=1024%2C58&#038;ssl=1\" alt=\"\" class=\"wp-image-113160\" srcset=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/05\/advanced-banner-new-en.png?resize=1024%2C58&amp;ssl=1 1024w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/05\/advanced-banner-new-en.png?resize=600%2C34&amp;ssl=1 600w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/05\/advanced-banner-new-en.png?resize=768%2C44&amp;ssl=1 768w, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2021\/05\/advanced-banner-new-en.png?w=1200&amp;ssl=1 1200w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-background\" style=\"background-color:#ccffcc;margin-top:var(--wp--preset--spacing--30);margin-right:0;margin-bottom:0;margin-left:0;padding-top:0;padding-right:var(--wp--preset--spacing--20);padding-bottom:0;padding-left:var(--wp--preset--spacing--20)\"><strong>Stripe: Add Item to Draft Invoice<\/strong><\/h4>\n\n\n\n<p class=\"has-text-align-right has-background has-small-font-size mt-0 pt-0 wp-block-paragraph\" style=\"background-color:#ccffcc;margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;padding-top:0;padding-right:var(--wp--preset--spacing--30);padding-bottom:0;padding-left:var(--wp--preset--spacing--30)\"><a href=\"https:\/\/support.questetra.com\/en\/bpmn-icons\/service-task-stripe-invoice-item-add\/\">Stripe: \u8acb\u6c42\u66f8\u30c9\u30e9\u30d5\u30c8\u306b\u9805\u76ee\u3092\u8ffd\u52a0<\/a><\/p>\n\n\n\n<p class=\"has-background mt-0 pt-0 wp-block-paragraph\" style=\"background-color:#f0fff0;margin-top:0;margin-right:0;margin-bottom:var(--wp--preset--spacing--60);margin-left:0;padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--40)\">This item adds an invoice item to a draft invoice on Stripe.<\/p>\n\n\n\n<figure class=\"wp-block-image alignright has-custom-border is-style-default\"><img decoding=\"async\" src=\"data:image;base64,\n        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAvJJREFUWEfF\n        l19I01EUxz\/XKZqWNbVS6cH+UfSUGQlCD0EQRCkoFDkDUzENi6IgkB4sKEgjDStFnVlzalC9+BBR\n        IEFBEeVbFP3R\/lhRpLRpKHO78dtv021u+pszfnv87Zzv+dxzzj33XoHOP6E1fvleGe9KJF\/CDiSZ\n        CDIAo8d\/BMkggn4BfVE27rX0ir9atOcEKC6WqdEOTkuoAOK0iALjAponY7jY0SF+zOYzK0CJSVYI\n        uAQkaAwcaDYm4VS7VTSH8g8JUFokryOpnGdgfzdBk7lTHAmmFRSgxCS7BBxYkOAeEQnd7VZRGKg5\n        A2BBVz4z2oxM+AF4at60kCsP1JJQ6dsTUwBKtxscvI+g4bRyjzljWOfdHVMAZSZZL+G4VpVI7AQ0\n        tFnFCUXDDaAMGWciv8PY55HEV3zHDTaSlWHlBigzySIJlvmoxsbBxHj4ngIOtllFpxug1CTNQMls\n        MjnbIS0d7t6etmpshe9DcKEmfACg3WwVpSpAoXyFIDNQZuMm2J2rfk1Ng6XL4NlTSE4Blwt6LOB0\n        QtEhkBKGvsCdHli9FnLzoe8h9L8MASfpN3eJLd4MDPscLFMeTTcgOhocDjXNi5fAr5+wYqUa+NOA\n        ClF9FiYnVdtHD2DnLpiYgNhYqKmGr5+DQoyYrSLJCyCDmdQ1gtEIdpv6r7LKbgscroKr9ZC\/Dzpa\n        VIBr9VBeBYYoiDKotkLA\/V7\/svnGMVuFYuLugaAAx05C+ipIWa4KShe8eA7ZOdB4GQr2TwMMfoSM\n        NfDuLazfALY\/YLdD9y148zp4GXwBgpag9goYk2BkGJ48hj15MDoK8QnQUAtZ26DrJrRaVMBRO9Sd\n        h7wC2JylAp87A9+G5ipBiCbU0ttbs6HiqFqCkA0XTCigCefchqFgFsWrO2TggxZcP5vpbRjJIAo7\n        rMfBbxDpPoo941i\/w0gB0P04ViB0vZB4m0nXK5kXQtdL6X\/JRLjXcp9M6Pcw8ULo+jTznXK6PU7n\n        O2q1+v0D2nRCMMki7aoAAAAASUVORK5CYII=\n    \" alt=\"Auto Step icon\" class=\"has-border-color has-ast-global-color-6-border-color\" style=\"border-width:0.5em\"\/><\/figure>\n\n\n\n<div class=\"wp-block-coblocks-accordion\">\n<div class=\"wp-block-coblocks-accordion-item\"><details open><summary class=\"wp-block-coblocks-accordion-item__title\">Basic Configs<\/summary><div class=\"wp-block-coblocks-accordion-item__content\">\n<dl style=\"0 0 -0.7em 0\">\n<dt style=\"font-weight: 300; font-size: 50%; margin: -1em 0 0 0; color: #C3C3C3;\"><\/dt><dd style=\"margin: -0.5em 0 0.1em 1em\">Step Name<\/dd>\n<dt style=\"font-weight: 300; font-size: 50%; margin: -1em 0 0 0; color: #C3C3C3;\"><\/dt><dd style=\"margin: -0.5em 0 0.1em 1em\">Note<\/dd>\n<\/dl>\n<\/div><\/details><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-coblocks-accordion\">\n<div class=\"wp-block-coblocks-accordion-item\"><details open><summary class=\"wp-block-coblocks-accordion-item__title\">Configs for this Auto Step<\/summary><div class=\"wp-block-coblocks-accordion-item__content\">\n<dl style=\"0 0 -0.7em 0\">\n<dt style=\"font-weight: 300; font-size: 50%; margin: -1em 0 0 0; color: #aaa;\">conf_Auth<\/dt><dd style=\"margin: -0.5em 0 0.1em 1em\">C1: Authorization Setting in which API Secret Key is set<span style=\"color:#990000;\"> *<\/span><\/dd>\n<dt style=\"font-weight: 300; font-size: 50%; margin: -1em 0 0 0; color: #aaa;\">conf_InvoiceId<\/dt><dd style=\"margin: -0.5em 0 0.1em 1em\">C2: Draft Invoice ID<span style=\"color:#990000;\"> *<\/span><\/dd>\n<dt style=\"font-weight: 300; font-size: 50%; margin: -1em 0 0 0; color: #aaa;\">conf_PriceId<\/dt><dd style=\"margin: -0.5em 0 0.1em 1em\">C3-A: Price ID (when blank, C3-B1 and C3-B2 are required)<\/dd>\n<dt style=\"font-weight: 300; font-size: 50%; margin: -1em 0 0 0; color: #aaa;\">conf_ItemName<\/dt><dd style=\"margin: -0.5em 0 0.1em 1em\">C3-B1: Item name<span style=\"color:#000099;\"><sup style=\"font-style:italic;\">#{EL}<\/sup><\/span><\/dd>\n<dt style=\"font-weight: 300; font-size: 50%; margin: -1em 0 0 0; color: #aaa;\">conf_UnitAmount<\/dt><dd style=\"margin: -0.5em 0 0.1em 1em\">C3-B2: Unit amount (in the smallest unit. For USD, in cents)<\/dd>\n<dt style=\"font-weight: 300; font-size: 50%; margin: -1em 0 0 0; color: #aaa;\">conf_Quantity<\/dt><dd style=\"margin: -0.5em 0 0.1em 1em\">C4: Quantity<span style=\"color:#990000;\"> *<\/span><\/dd>\n\n<\/dl>\n<\/div><\/details><\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><i class=\"fal fa-lightbulb-exclamation\"><\/i> Notes<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>To get Stripe\u2019s API Secret Key, visit\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/dashboard.stripe.com\/apikeys\" target=\"_blank\">https:\/\/dashboard.stripe.com\/apikeys<\/a><\/li><li>Configure the item detail either by <strong>C3-A: Price ID<\/strong> or by the combination of <strong>C3-B1: Item name<\/strong> and <strong>C3-B2: Unit amount<\/strong><ul><li>Price ID is the ID of a Price object attached to a Product object on Stripe, which starts with price<\/li><li>Unit amounts must be provided in the currency\u2019s smallest unit<ul><li>For example, to charge 10 USD, provide 1000 (that is, 1000 cents)<\/li><li>For more details, see the\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/stripe.com\/docs\/currencies\" target=\"_blank\">Stripe Documentation<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><i class=\"fal fa-images\"><\/i> Capture<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"84005\" data-permalink=\"https:\/\/support.questetra.com\/en\/bpmn-icons\/onedrive-file-upload\/attachment\/setting-service-task-pdf-generation-en\/\" data-orig-file=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2020\/01\/setting-service-task-pdf-generation-en.png?fit=959%2C833&amp;ssl=1\" data-orig-size=\"959,833\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"setting-service-task-pdf-generation-en\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2020\/01\/setting-service-task-pdf-generation-en.png?fit=725%2C630&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/10\/stripe-invoice-item-add_capture_en.png?ssl=1\" alt=\"\" class=\"wp-image-84005\" style=\"border:10px solid #aaaaaa; padding:5px; margin:5px;\"><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><i class=\"fal fa-balance-scale\"><\/i> See also<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/support.questetra.com\/en\/bpmn-icons\/service-task-stripe-invoice-create\/\" target=\"_blank\" rel=\"noreferrer noopener\">Stripe: Create Draft Invoice<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/support.questetra.com\/en\/bpmn-icons\/intermediate-error-catch-event-boundary-type\/\" target=\"_blank\">Intermediate Error Catch Event (Boundary Type)<\/a><\/li><\/ul>\n\n\n\n<div class=\"wp-block-coblocks-accordion\">\n<div class=\"wp-block-coblocks-accordion-item\"><details><summary class=\"wp-block-coblocks-accordion-item__title\">Script (click to open)<\/summary><div class=\"wp-block-coblocks-accordion-item__content\">\n<ul class=\"wp-block-list\">\n<li>An XML file that contains the code below is available to download\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/raw.githubusercontent.com\/Questetra\/Addon-XML\/release-2024-04-30\/stripe-invoice-item-add.xml\" target=\"_blank\" rel=\"noreferrer noopener\">stripe-invoice-item-add.xml<\/a> (C) Questetra, Inc. (MIT License)<\/li>\n\n\n\n<li>If you are using Professional, you can modify the contents of this file and use it as your own add-on auto step<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>\n\nconst STRIPE_API_VERSION = &apos;2022-08-01&apos;;\n\nfunction main(){\n    \/\/\/\/ == Config Retrieving \/ \u5de5\u7a0b\u30b3\u30f3\u30d5\u30a3\u30b0\u306e\u53c2\u7167 ==\n    const auth = configs.getObject(&apos;conf_Auth&apos;);\n    const invoiceId = retrieveInvoiceId();\n    const itemPropertyMap = retrieveItemPropertyMap();\n\n    \/\/\/\/ == Calculating \/ \u6f14\u7b97 ==\n    const customerId = getCustomerFromInvoice(auth, invoiceId);\n    attachInvoiceItem(auth, customerId, invoiceId, itemPropertyMap); \/\/ customerId \u306e\u6307\u5b9a\u304c\u5fc5\u9808\n}\n\n\/**\n  * config \u304b\u3089\u8acb\u6c42\u66f8\u30c9\u30e9\u30d5\u30c8\u306e ID \u3092\u8aad\u307f\u51fa\u3059\u3002\u7a7a\u6587\u5b57\u5217\u306e\u5834\u5408\u306f\u30a8\u30e9\u30fc\n  * @return {String} invoiceId \u8acb\u6c42\u66f8\u30c9\u30e9\u30d5\u30c8\u306e ID\n  *\/\nfunction retrieveInvoiceId() {\n    const invoiceId = engine.findData(configs.getObject(&apos;conf_InvoiceId&apos;));\n    if (invoiceId === null) {\n        throw new Error(&apos;Invoice ID is blank.&apos;);\n    }\n    return invoiceId;\n}\n\n\/**\n  * config \u304b\u3089\u30e9\u30a4\u30f3\u30a2\u30a4\u30c6\u30e0\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u8aad\u307f\u51fa\u3057\u3001Map \u306b\u683c\u7d0d\u3057\u3066\u8fd4\u3059\n  * @return {Map&lt;String, String&gt;} itemPropertyMap \u30e9\u30a4\u30f3\u30a2\u30a4\u30c6\u30e0\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u306e Map\n  *\/\nfunction retrieveItemPropertyMap() {\n    const itemPropertyMap = new Map();\n    const priceId = retrievePriceId();\n    const itemName = configs.get(&apos;conf_ItemName&apos;);\n    const unitAmountDef = configs.getObject(&apos;conf_UnitAmount&apos;);\n    if (priceId !== null &amp;&amp; priceId !== &apos;&apos;) { \/\/ \u4fa1\u683c ID \u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\n        if (itemName !== null &amp;&amp; itemName !== &apos;&apos;) {\n            throw new Error(&apos;Price ID and item name cannot be set at the same time.&apos;);\n        }\n        if (unitAmountDef !== null) {\n            throw new Error(&apos;Price ID and unit amount cannot be set at the same time.&apos;);\n        }\n        itemPropertyMap.set(&apos;price&apos;, priceId);\n    } else { \/\/ \u4fa1\u683c ID \u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\n        checkItemName(itemName);\n        const unitAmount = findAndParseUnitAmount(unitAmountDef);\n        itemPropertyMap.set(&apos;description&apos;, itemName);\n        itemPropertyMap.set(&apos;unit_amount&apos;, unitAmount);\n    }\n    itemPropertyMap.set(&apos;quantity&apos;, retrieveQuantity());\n    return itemPropertyMap;\n}\n\n\/**\n  * config \u304b\u3089\u4fa1\u683c ID \u3092\u8aad\u307f\u51fa\u3059\u3002\u30c7\u30fc\u30bf\u9805\u76ee\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u306e\u306b\u5024\u304c\u7a7a\u306e\u5834\u5408\u306f\u30a8\u30e9\u30fc\n  * @return {String} priceId \u4fa1\u683c ID\n  *\/\nfunction retrievePriceId() {\n    const dataDef = configs.getObject(&apos;conf_PriceId&apos;);\n    if (dataDef === null) { \/\/ \u56fa\u5b9a\u5024\u306e\u5834\u5408\n        return configs.get(&apos;conf_PriceId&apos;);\n    }\n    if (dataDef.matchDataType(&apos;SELECT_SINGLE&apos;)) { \/\/ \u9078\u629e\u578b\u30c7\u30fc\u30bf\u9805\u76ee\u306e\u5834\u5408\n        const select = engine.findData(dataDef);\n        if (select === null || select.size() === 0) { \/\/ \u672a\u9078\u629e\n          throw new Error(&apos;Price ID is not selected.&apos;);\n        }\n        return select.get(0).getValue();\n    }\n    \/\/ \u6587\u5b57\u578b\u30c7\u30fc\u30bf\u9805\u76ee\u306e\u5834\u5408\n    const priceId = engine.findData(dataDef);\n    if (priceId === null) {\n        throw new Error(&apos;Price ID is blank.&apos;);\n    }\n    return priceId;\n}\n\n\/**\n  * \u5546\u54c1\u540d\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3001\u4ee5\u4e0b\u306e\u5834\u5408\u306f\u30a8\u30e9\u30fc\n  * - \u7a7a\u6587\u5b57\u5217\u306e\u5834\u5408\n  * - \u9577\u3055\u304c maxLength \u3092\u8d85\u3048\u308b\u5834\u5408\n  * @param {String} itemName \u5546\u54c1\u540d\n  *\/\nfunction checkItemName(itemName) {\n    if (itemName === null || itemName === &apos;&apos;) {\n        throw new Error(&apos;Item name is blank. It is required when Price ID is not set.&apos;);\n    }\n    const maxLength = 250;\n    if (itemName.length &gt; maxLength) {\n        throw new Error(`Item name must be at most ${maxLength} characters.`);\n    }\n}\n\n\/**\n  * \u30b9\u30af\u30ea\u30d7\u30c8\u30a8\u30f3\u30b8\u30f3\u304b\u3089\u5546\u54c1\u5358\u4fa1\u3092\u53d6\u5f97\u3057\u3001String \u306b\u30d1\u30fc\u30b9\u3057\u3066\u8fd4\u3059\n  * \u5546\u54c1\u5358\u4fa1\u306e\u4e0a\u9650\u5024\u3092\u8d85\u3048\u308b\u5834\u5408\u306f\u30a8\u30e9\u30fc\n  * @param {DataDefinitionView} dataDef\n  * @return {String} unitAmount \u5546\u54c1\u5358\u4fa1\uff08\u975e\u8ca0\u6574\u6570\uff09\n  *\/\nfunction findAndParseUnitAmount(dataDef) {\n    if (dataDef === null) {\n        throw new Error(&apos;Unit amount is not set. It is required when Price ID is not set.&apos;);\n    }\n    const longValue = findAndParseDecimal(dataDef, &apos;Unit amount&apos;);\n    const maxAmount = 99999999;\n    if (longValue &gt; maxAmount) {\n        throw new Error(`Unit amount must be smaller than ${maxAmount + 1}.`);\n    }\n    return longValue.toString();\n}\n\n\/**\n  * config \u304b\u3089\u6570\u91cf\u3092\u53d6\u5f97\u3059\u308b\n  * @return {String} quantity \u6570\u91cf\uff08\u975e\u8ca0\u6574\u6570\uff09\n  *\/\nfunction retrieveQuantity() {\n    const dataDef = configs.getObject(&apos;conf_Quantity&apos;);\n    if (dataDef !== null) { \/\/ \u6570\u5024\u578b\u30c7\u30fc\u30bf\u9805\u76ee\u3067\u6307\u5b9a\n        const longValue = findAndParseDecimal(dataDef, &apos;Quantity&apos;);\n        return longValue.toString();\n    }\n    \/\/ \u56fa\u5b9a\u5024\u3067\u6307\u5b9a\n    const string = configs.get(&apos;conf_Quantity&apos;);\n    const regex = \/^(0|[1-9]\\d*)$\/;\n    if (!regex.test(string)) {\n        throw new Error(&apos;Quantity must be a non-negative integer.&apos;);\n    }\n    return string;\n}\n\n\/**\n  * \u30b9\u30af\u30ea\u30d7\u30c8\u30a8\u30f3\u30b8\u30f3\u304b\u3089\u6570\u5024\u578b\u30c7\u30fc\u30bf\u9805\u76ee\u306e\u5024\u3092\u8aad\u307f\u51fa\u3057\u3001long \u306b\u30d1\u30fc\u30b9\u3057\u3066\u8fd4\u3059\n  * \u4ee5\u4e0b\u306e\u5834\u5408\u306f\u30a8\u30e9\u30fc\n  * - \u5024\u304c\u7a7a\n  * - \u5c0f\u6570\u70b9\u4ee5\u4e0b\u304c0\u3067\u306a\u3044\n  * - \u8ca0\u306e\u6570\n  * @param {DataDefinitionView} dataDef\n  * @param {String} label \u30a8\u30e9\u30fc\u51fa\u529b\u7528\u30e9\u30d9\u30eb\n  * @return {long} longValue \u5909\u63db\u5f8c\u306e\u6570\u5024\n  *\/\nfunction findAndParseDecimal(dataDef, label) {\n    const bigDecimal = engine.findData(dataDef);\n    if (bigDecimal === null) {\n        throw new Error(`${label} is blank.`);\n    }\n    let longValue;\n    try {\n        longValue = bigDecimal.longValueExact();\n    } catch (e) {\n        throw new Error(`${label} must be integer.`);\n    }\n    if (longValue &lt; 0) {\n        throw new Error(`${label} must not be negative.`);\n    }\n    return longValue;\n}\n\n\/**\n  * \u8acb\u6c42\u66f8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u53d6\u5f97\u3057\u3001\u8acb\u6c42\u66f8\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u9867\u5ba2\u306e ID \u3092\u8fd4\u3059\n  * @param {AuthSettingWrapper} auth  HTTP \u8a8d\u8a3c\u8a2d\u5b9a \u30c8\u30fc\u30af\u30f3\u76f4\u63a5\u6307\u5b9a\n  * @param {String} invoiceId \u8acb\u6c42\u66f8\u306e ID\n  * @return {String} customerId \u9867\u5ba2 ID\n  *\/\nfunction getCustomerFromInvoice(auth, invoiceId) {\n    const apiUri = `https:\/\/api.stripe.com\/v1\/invoices\/${encodeURIComponent(invoiceId)}`;\n    const response = httpClient.begin()\n        .authSetting(auth) \/\/ with &quot;Authorization: Bearer XX&quot;\n        .header(&apos;Stripe-Version&apos;, STRIPE_API_VERSION)\n        .get(apiUri);\n    const status = response.getStatusCode();\n    const responseStr = response.getResponseAsString();\n    if (status !== 200) {\n        engine.log(responseStr);\n        throw new Error(`Failed to get invoice. status: ${status}`);\n    }\n    const invoiceObj = JSON.parse(responseStr);\n    return invoiceObj.customer; \/\/ \u9867\u5ba2\u306f\u304b\u306a\u3089\u305a\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\n}\n\n\/**\n  * \u8acb\u6c42\u66f8\u30c9\u30e9\u30d5\u30c8\u306b\u30e9\u30a4\u30f3\u30a2\u30a4\u30c6\u30e0\u3092\u8ffd\u52a0\u3059\u308b\n  * @param {AuthSettingWrapper} auth  HTTP \u8a8d\u8a3c\u8a2d\u5b9a \u30c8\u30fc\u30af\u30f3\u76f4\u63a5\u6307\u5b9a\n  * @param {String} customerId \u9867\u5ba2 ID\n  * @param {String} invoiceId \u8acb\u6c42\u66f8\u30c9\u30e9\u30d5\u30c8\u306e ID\n  * @param {Map&lt;String, String&gt;} itemPropertyMap \u30e9\u30a4\u30f3\u30a2\u30a4\u30c6\u30e0\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u306e Map\n  *\/\nfunction attachInvoiceItem(auth, customerId, invoiceId, itemPropertyMap) {\n    const apiUri = &apos;https:\/\/api.stripe.com\/v1\/invoiceitems&apos;;\n    let request = httpClient.begin()\n        .authSetting(auth) \/\/ with &quot;Authorization: Bearer XX&quot;\n        .header(&apos;Stripe-Version&apos;, STRIPE_API_VERSION)\n        .formParam(&apos;customer&apos;, customerId) \/\/ Stripe API \u306e\u4ed5\u69d8\u4e0a\u3001\u5fc5\u9808\n        .formParam(&apos;invoice&apos;, invoiceId);\n    itemPropertyMap.forEach((value, key) =&gt; {\n        request = request.formParam(key, value);\n    });\n    const response = request.post(apiUri);\n    const status = response.getStatusCode();\n    const responseStr = response.getResponseAsString();\n    if (status !== 200) {\n        engine.log(responseStr);\n        throw new Error(`Failed to attach an invoice item. status: ${status}`);\n    }\n}\n\n    <\/code><\/pre><\/div>\n<\/div><\/details><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>This item adds an invoice item to a draft invoice on Stripe.<\/p>\n","protected":false},"author":17,"featured_media":125421,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_uag_custom_page_level_css":"","advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_seo_schema_type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[551],"tags":[404],"class_list":["post-137491","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bpmn-icons","tag-stripe-api"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1","uagb_featured_image_src":{"full":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1",1200,675,false],"thumbnail":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?resize=440%2C440&ssl=1",440,440,true],"medium":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=560%2C315&ssl=1",560,315,true],"medium_large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=768%2C432&ssl=1",768,432,true],"large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1024%2C576&ssl=1",1024,576,true],"1536x1536":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1",1200,675,true],"2048x2048":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1",1200,675,true],"newspack-article-block-landscape-large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?resize=1200%2C675&ssl=1",1200,675,true],"newspack-article-block-portrait-large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?resize=900%2C675&ssl=1",900,675,true],"newspack-article-block-square-large":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?resize=1200%2C675&ssl=1",1200,675,true],"newspack-article-block-landscape-medium":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?resize=800%2C600&ssl=1",800,600,true],"newspack-article-block-portrait-medium":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?resize=600%2C675&ssl=1",600,675,true],"newspack-article-block-square-medium":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?resize=800%2C675&ssl=1",800,675,true],"newspack-article-block-landscape-intermediate":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?resize=600%2C450&ssl=1",600,450,true],"newspack-article-block-portrait-intermediate":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?resize=450%2C600&ssl=1",450,600,true],"newspack-article-block-square-intermediate":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?resize=600%2C600&ssl=1",600,600,true],"newspack-article-block-landscape-small":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?resize=400%2C300&ssl=1",400,300,true],"newspack-article-block-portrait-small":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?resize=300%2C400&ssl=1",300,400,true],"newspack-article-block-square-small":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?resize=400%2C400&ssl=1",400,400,true],"newspack-article-block-landscape-tiny":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?resize=200%2C150&ssl=1",200,150,true],"newspack-article-block-portrait-tiny":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?resize=150%2C200&ssl=1",150,200,true],"newspack-article-block-square-tiny":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?resize=200%2C200&ssl=1",200,200,true],"newspack-article-block-uncropped":["https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1",1200,675,true]},"uagb_author_info":{"display_name":"Shiho Tatsumi","author_link":"https:\/\/support.questetra.com\/en\/author\/tatsumi48c607ec82\/"},"uagb_comment_info":2,"uagb_excerpt":"This item adds an invoice item to a draft invoice on Stripe.","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9DiIh-zLB","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":141572,"url":"https:\/\/support.questetra.com\/en\/developer-blog\/stripe-invoicing\/","url_meta":{"origin":137491,"position":0},"title":"Sending Invoices with Stripe","author":"Hirotaka NISHI","date":"2023-01-26","format":false,"excerpt":"Explaining the automated process of creating an invoice on Stripe and sending it to the customer by email.","rel":"","context":"In &quot;Questetra Developers Blog&quot;","block_context":{"text":"Questetra Developers Blog","link":"https:\/\/support.questetra.com\/en\/category\/developer-blog\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2023\/01\/stripe-billing-fi-en.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2023\/01\/stripe-billing-fi-en.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2023\/01\/stripe-billing-fi-en.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2023\/01\/stripe-billing-fi-en.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2023\/01\/stripe-billing-fi-en.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":152880,"url":"https:\/\/support.questetra.com\/en\/templates\/stripe-billing-process-2023\/","url_meta":{"origin":137491,"position":1},"title":"Stripe Billing Process","author":"Hirotaka NISHI","date":"2023-10-05","format":false,"excerpt":"An independent sub-process that can be invoked by various business flows. Through the Stripe API; 1) Stripe generates a Stripe invoice, and 2) Stripe sends the Stripe invoice. Billing will be done to customers who are already registered with Stripe, but when the customer is not registered, he or she\u2026","rel":"","context":"In &quot;Workflow Apps&quot;","block_context":{"text":"Workflow Apps","link":"https:\/\/support.questetra.com\/en\/category\/templates\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2023\/10\/eye-catch-stripe-billng-process-20231004-en.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2023\/10\/eye-catch-stripe-billng-process-20231004-en.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2023\/10\/eye-catch-stripe-billng-process-20231004-en.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2023\/10\/eye-catch-stripe-billng-process-20231004-en.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2023\/10\/eye-catch-stripe-billng-process-20231004-en.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":125350,"url":"https:\/\/support.questetra.com\/en\/bpmn-icons\/service-task-stripe-invoice-finalize\/","url_meta":{"origin":137491,"position":2},"title":"Stripe: Finalize Draft Invoice","author":"Shiho Tatsumi","date":"2024-05-24","format":false,"excerpt":"This item finalizes a draft invoice on Stripe, which allows you to send the invoice or charge the customer.","rel":"","context":"In &quot;BPMN Icons&quot;","block_context":{"text":"BPMN Icons","link":"https:\/\/support.questetra.com\/en\/category\/bpmn-icons\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":125338,"url":"https:\/\/support.questetra.com\/en\/bpmn-icons\/service-task-stripe-invoice-create\/","url_meta":{"origin":137491,"position":3},"title":"Stripe: Create Draft Invoice","author":"Shiho Tatsumi","date":"2024-05-23","format":false,"excerpt":"This item creates a draft invoice on Stripe. The created invoice remains a draft until you finalize it, which allows you to send the invoice or charge the customer.","rel":"","context":"In &quot;BPMN Icons&quot;","block_context":{"text":"BPMN Icons","link":"https:\/\/support.questetra.com\/en\/category\/bpmn-icons\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":143586,"url":"https:\/\/support.questetra.com\/en\/developer-blog\/stripe-charge\/","url_meta":{"origin":137491,"position":4},"title":"Utilize Stripe to Set Up Automatic Billing","author":"Hirotaka NISHI","date":"2023-03-15","format":false,"excerpt":"This section explains the difference between [Stripe: Charge by Invoice] and [Stripe: Send Invoice], their uses, and how automatic billing works with [Stripe: Charge by Invoice].","rel":"","context":"In &quot;Questetra Developers Blog&quot;","block_context":{"text":"Questetra Developers Blog","link":"https:\/\/support.questetra.com\/en\/category\/developer-blog\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2023\/03\/stripe-charge-fi-en1.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2023\/03\/stripe-charge-fi-en1.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2023\/03\/stripe-charge-fi-en1.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2023\/03\/stripe-charge-fi-en1.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2023\/03\/stripe-charge-fi-en1.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":125370,"url":"https:\/\/support.questetra.com\/en\/bpmn-icons\/service-task-stripe-invoice-send\/","url_meta":{"origin":137491,"position":5},"title":"Stripe: Send Invoice","author":"Shiho Tatsumi","date":"2024-05-24","format":false,"excerpt":"This item sends a finalized invoice on Stripe to the customer by email. The customer can pay the invoice via the payment link included in the email.","rel":"","context":"In &quot;BPMN Icons&quot;","block_context":{"text":"BPMN Icons","link":"https:\/\/support.questetra.com\/en\/category\/bpmn-icons\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/support.questetra.com\/wp-content\/uploads\/2022\/07\/stripe-icon-fi-1.png?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]}],"amp_enabled":false,"_links":{"self":[{"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/posts\/137491","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/comments?post=137491"}],"version-history":[{"count":12,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/posts\/137491\/revisions"}],"predecessor-version":[{"id":161732,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/posts\/137491\/revisions\/161732"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/media\/125421"}],"wp:attachment":[{"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/media?parent=137491"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/categories?post=137491"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/support.questetra.com\/en\/wp-json\/wp\/v2\/tags?post=137491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}