{"id":9548,"date":"2025-02-21T09:49:20","date_gmt":"2025-02-21T09:49:20","guid":{"rendered":"https:\/\/ccbill.com\/doc\/?p=9548"},"modified":"2026-02-05T12:52:18","modified_gmt":"2026-02-05T12:52:18","slug":"create-payment-token-for-deferred-charges","status":"publish","type":"post","link":"https:\/\/ccbill.com\/doc\/create-payment-token-for-deferred-charges","title":{"rendered":"Create Payment Token For Deferred Charges"},"content":{"rendered":"\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:70%\">\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>This payment flow enables customer authentication and tokenizes their payment details, allowing you to charge the token later. It is designed for transactions that require strong customer authentication even when the charge is processed outside of the customer's active session.<\/p>\n\n\n\n<p>This guide provides step-by-step instructions and relevant code examples to help you integrate this payment flow using the CCBill Advanced Widget.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-kioken-accordion kioken-accordion-1\">\n<div class=\"wp-block-kioken-accordion-item kioken-accordion-item kioken-accordion-item-active\"><a href=\"#accordionrequirements\" class=\"kioken-accordion-item-heading\"><span class=\"kioken-accordion-item-label\"><strong>Requirements<\/strong><\/span><span class=\"kioken-accordion-item-collapse\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\"><path d=\"M12 5a1 1 0 0 1 1 1v5h5a1 1 0 1 1 0 2h-5v5a1 1 0 1 1-2 0v-5H6a1 1 0 1 1 0-2h5V6a1 1 0 0 1 1-1z\" fill=\"currentColor\" fill-rule=\"evenodd\"><\/path><\/svg><\/span><\/a><div class=\"kioken-accordion-item-content\">\n<ul class=\"wp-block-list\">\n<li>The CCBill RESTful API supports TLS 1.2 only.<\/li>\n\n\n\n<li>A <a href=\"https:\/\/admin.ccbill.com\/loginMM.cgi\" target=\"_blank\" rel=\"noreferrer noopener\">CCBill Account<\/a>.<\/li>\n\n\n\n<li><a href=\"https:\/\/ccbill.com\/contact\" target=\"_blank\" rel=\"noreferrer noopener\">API credentials<\/a> provided by CCBill.<\/li>\n\n\n\n<li>A whitelisted domain (contact <a href=\"https:\/\/ccbill.com\/contact\" target=\"_blank\" rel=\"noreferrer noopener\">CCBill Support<\/a> for setup).<\/li>\n\n\n\n<li>Experience with <strong>RESTful Web Services<\/strong> and <strong>JSON formats<\/strong>.<\/li>\n<\/ul>\n<\/div><\/div>\n<\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"deferred-charges-payment-flow\">The Payment Flow<\/h2>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-eeffff-color has-text-color\">To perform a 3DS check based on customer payment details, create a payment token, and use it to charge a customer at a later time\/date, follow these steps:<\/p>\n\n\n\n<ol class=\"wp-block-list has-eeffff-color has-text-color\">\n<li>Include the Widget on your page.<\/li>\n\n\n\n<li>Provide payment details.<\/li>\n\n\n\n<li>Generate the<strong> frontend OAuth bearer token<\/strong>.<\/li>\n\n\n\n<li>Check whether the 3DS authentication is required based on customer data (or a pre-existing payment token).<\/li>\n\n\n\n<li>Authenticate the customer and create<strong> <\/strong>a <strong>payment token<\/strong>.<\/li>\n\n\n\n<li>Use the payment token and <strong>backend OAuth bearer token<\/strong> to process a transaction securely.<\/li>\n<\/ol>\n\n\n\n<p class=\"has-eeffff-color has-text-color\">The following sequence diagram describes the flow for creating and charging payment tokens with 3DS authentication.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/ccbill.com\/doc\/wp-content\/uploads\/2025\/02\/mcn-widget-integration-sequence-diagram-3ds.png\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"750\" height=\"553\" src=\"https:\/\/ccbill.com\/doc\/wp-content\/uploads\/2022\/06\/mcn-widget-integration-3ds-sequence-diagram.png\" alt=\"The sequence diagram for creating and charging payment tokens with 3DS verification.\" class=\"wp-image-9754\" srcset=\"https:\/\/ccbill.com\/doc\/wp-content\/uploads\/2022\/06\/mcn-widget-integration-3ds-sequence-diagram.png 750w, https:\/\/ccbill.com\/doc\/wp-content\/uploads\/2022\/06\/mcn-widget-integration-3ds-sequence-diagram-300x221.png 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The following steps explain how to set up the <strong>CCBill Advanced Widget<\/strong> and create payment tokens <strong>with 3DS authentication<\/strong>.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"deferred-charges-insert-widget\">1. Include the Widget in Your Page<\/h3>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>To use the CCBill Advanced Widget, add the following <strong>preload link<\/strong> and <strong>script<\/strong> elements to your HTML page:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#263238\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&lt;link rel=\"preload\" href=\"https:\/\/js.ccbill.com\/v1.13.1\/ccbill-advanced-widget.js\" as=\"script\"\/>\n\n&lt;script type=\"text\/javascript\" src=\"https:\/\/js.ccbill.com\/v1.13.1\/ccbill-advanced-widget.js\">&lt;\/script><\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme\" style=\"background-color: #263238\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">link<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">rel<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">preload<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">href<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">https:\/\/js.ccbill.com\/v1.13.1\/ccbill-advanced-widget.js<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">as<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">script<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">\/&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">script<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">type<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">text\/javascript<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">src<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">https:\/\/js.ccbill.com\/v1.13.1\/ccbill-advanced-widget.js<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">&gt;&lt;\/<\/span><span style=\"color: #F07178\">script<\/span><span style=\"color: #89DDFF\">&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The API version in this URI example is <strong>v1.13.1<\/strong>. Pay special attention to the version in the URI path, as the version number may be subject to change.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"deferred-charges-collect-data\">2. Collect Customer and Payment Data<\/h3>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The Advanced Widget automatically extracts values from form fields. Depending on your integration, the required fields can be provided in three ways:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use custom ID attributes (requires additional mapping).<\/li>\n\n\n\n<li>(Recommended) Use <strong>data-ccbill<\/strong> HTML data attributes.<\/li>\n\n\n\n<li>Use default <strong>_ccbillId_FieldName<\/strong> ID attributes.<\/li>\n<\/ul>\n\n\n\n<div id=\"kioken-tabs__532db3-29\" class=\"wp-block-kioken-tabs\" data-tab-active=\"tab-dataccbill\"><div class=\"kioken-tabs-buttons kt_d_flex kt_flex_justifystart\"><a style=\"padding:10px 20px 10px 20px;margin:0px 5px -1px 0px\" href=\"#tab-dataccbill\" class=\"kioken-tabs-buttons-item\">data-ccbill<\/a><a style=\"padding:10px 20px 10px 20px;margin:0px 5px -1px 0px\" href=\"#tab-default-ids\" class=\"kioken-tabs-buttons-item\">Default IDs<\/a><a style=\"padding:10px 20px 10px 20px;margin:0px 5px -1px 0px\" href=\"#tab-custom-ids\" class=\"kioken-tabs-buttons-item\">Custom IDs<\/a><\/div><div class=\"kioken-tabs-content\" style=\"padding:20px 20px 20px 20px\">\n<div class=\"wp-block-kioken-tab\" data-tab=\"tab-dataccbill\">\n<p>Using <strong><code>data-ccbill<\/code><\/strong> data attributes is non-intrusive and provides more flexibility. It allows you to map form inputs directly without modifying existing <strong><code>id<\/code><\/strong> attributes.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#263238\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&lt;form id=\"payment-form\"> \n    &lt;input data-ccbill=\"firstName\" \/>\n    &lt;input data-ccbill=\"lastName\" \/> \n    &lt;input data-ccbill=\"postalCode\" \/> \n    &lt;input data-ccbill=\"country\" \/> \n    &lt;input data-ccbill=\"email\" \/> \n    &lt;input data-ccbill=\"cardNumber\" \/>\n    &lt;input data-ccbill=\"currencyCode\" \/> \n    &lt;input data-ccbill=\"expYear\" \/> \n    &lt;input data-ccbill=\"expMonth\" \/> \n    &lt;input data-ccbill=\"nameOnCard\" \/> \n    &lt;input data-ccbill=\"cvv2\" \/>\n    &lt;input data-ccbill=\"ipAddress\" \/> \n&lt;\/form><\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme\" style=\"background-color: #263238\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">form<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">payment-form<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">data-ccbill<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">firstName<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">data-ccbill<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">lastName<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">data-ccbill<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">postalCode<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">data-ccbill<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">country<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">data-ccbill<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">email<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">data-ccbill<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">cardNumber<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">data-ccbill<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">currencyCode<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">data-ccbill<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">expYear<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">data-ccbill<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">expMonth<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">data-ccbill<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">nameOnCard<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">data-ccbill<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">cvv2<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">data-ccbill<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">ipAddress<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">&lt;\/<\/span><span style=\"color: #F07178\">form<\/span><span style=\"color: #89DDFF\">&gt;<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-kioken-tab\" data-tab=\"tab-default-ids\">\n<p>If you cannot modify your HTML to include <strong><code>data-ccbill<\/code><\/strong> attributes, use the default <strong><code>_ccbillId_<\/code><\/strong> attributes instead. This method is less flexible because the field names must match CCBill's predefined format.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#263238\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&lt;form id=\"payment-form\">\n    &lt;input id=\"_ccbillId_firstName\" \/>\n    &lt;input id=\"_ccbillId_lastName\" \/>\n    &lt;input id=\"_ccbillId_postalCode\" \/>\n    &lt;input id=\"_ccbillId_country\" \/>\n    &lt;input id=\"_ccbillId_email\" \/>\n    &lt;input id=\"_ccbillId_cardNumber\" \/>\n    &lt;input id=\"_ccbillId_expYear\" \/>\n    &lt;input id=\"_ccbillId_currencyCode\" \/> \n    &lt;input id=\"_ccbillId_expMonth\" \/>\n    &lt;input id=\"_ccbillId_nameOnCard\" \/>\n    &lt;input id=\"_ccbillId_cvv2\" \/>\n    &lt;input id=\"_ccbillId_ipAddress\" \/>\n&lt;\/form><\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme\" style=\"background-color: #263238\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">form<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">payment-form<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">_ccbillId_firstName<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">_ccbillId_lastName<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">_ccbillId_postalCode<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">_ccbillId_country<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">_ccbillId_email<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">_ccbillId_cardNumber<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">_ccbillId_expYear<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">_ccbillId_currencyCode<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">_ccbillId_expMonth<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">_ccbillId_nameOnCard<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">_ccbillId_cvv2<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">_ccbillId_ipAddress<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">&lt;\/<\/span><span style=\"color: #F07178\">form<\/span><span style=\"color: #89DDFF\">&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-kioken-tab\" data-tab=\"tab-custom-ids\">\n<p>If you prefer custom IDs, map them to corresponding input fields using the <strong><code>customIds<\/code><\/strong> parameter in the Widget <strong>constructor<\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#263238\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&lt;form id=\"payment-form\">\n    &lt;input id=\"custom_firstName_id\" \/>\n    &lt;input id=\"custom_lastName_id\" \/>\n    &lt;input id=\"custom_postalCode_id\" \/> \n    &lt;input id=\"custom_country_id\" \/> \n    &lt;input id=\"custom_email_id\" \/> \n    &lt;input id=\"custom_cardNumber_id\" \/>\n    &lt;input id=\"custom_currencyCode_id\" \/> \n    &lt;input id=\"custom_expYear_id\" \/> \n    &lt;input id=\"custom_expMonth_id\" \/> \n    &lt;input id=\"custom_nameOnCard_id\" \/> \n    &lt;input id=\"custom_cvv2_id\" \/>\n    &lt;input id=\"custom_ipAddress_id\" \/> \n&lt;\/form>\n&lt;script>\n\/\/ map custom ids to relevant fields\nconst customIds = {\n    firstName: \"custom_firstName_id\",\n    lastName: \"custom_lastName_id\",\n    postalCode: \"custom_postalCode_id\",\n    country: \"custom_country_id\",\n    email: \"custom_email_id\",\n    currencyCode: \"custom_currencyCode_id\",\n    cardNumber: \"custom_cardNumber_id\",\n    expYear: \"custom_expYear_id\", \n    expMonth: \"custom_expMonth_id\", \n    nameOnCard: \"custom_nameOnCard_id\",\n    cvv2: \"custom_cvv2_id\",\n    ipAddress: \"custom_ipAddress_id\"\n};\n\n\/\/ pass custom ids to Widget constructor\nconst widget = new ccbill.CCBillAdvancedWidget(\"application_id\", customIds);\n\n\/\/ call the desired Widget method\n\n&lt;\/script><\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme\" style=\"background-color: #263238\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">form<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">payment-form<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_firstName_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_lastName_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_postalCode_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_country_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_email_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_cardNumber_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_currencyCode_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_expYear_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_expMonth_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_nameOnCard_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_cvv2_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">input<\/span><span style=\"color: #89DDFF\"> <\/span><span style=\"color: #C792EA\">id<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_ipAddress_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\"> \/&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">&lt;\/<\/span><span style=\"color: #F07178\">form<\/span><span style=\"color: #89DDFF\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #F07178\">script<\/span><span style=\"color: #89DDFF\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #546E7A; font-style: italic\">\/\/ map custom ids to relevant fields<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">const<\/span><span style=\"color: #EEFFFF\"> customIds <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F07178\">firstName<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_firstName_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F07178\">lastName<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_lastName_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F07178\">postalCode<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_postalCode_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F07178\">country<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_country_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F07178\">email<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_email_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F07178\">currencyCode<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_currencyCode_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F07178\">cardNumber<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_cardNumber_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F07178\">expYear<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_expYear_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F07178\">expMonth<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_expMonth_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F07178\">nameOnCard<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_nameOnCard_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F07178\">cvv2<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_cvv2_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #F07178\">ipAddress<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_ipAddress_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #546E7A; font-style: italic\">\/\/ pass custom ids to Widget constructor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">const<\/span><span style=\"color: #EEFFFF\"> widget <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">new<\/span><span style=\"color: #EEFFFF\"> ccbill<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">CCBillAdvancedWidget<\/span><span style=\"color: #EEFFFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">application_id<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> customIds)<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #546E7A; font-style: italic\">\/\/ call the desired Widget method<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">&lt;\/<\/span><span style=\"color: #F07178\">script<\/span><span style=\"color: #89DDFF\">&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n<\/div>\n<\/div><\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-kioken-accordion kioken-accordion-1\">\n<div class=\"wp-block-kioken-accordion-item kioken-accordion-item\"><a href=\"#accordionall-form-fields\" class=\"kioken-accordion-item-heading\"><span class=\"kioken-accordion-item-label\"><strong>All Form Fields<\/strong><\/span><span class=\"kioken-accordion-item-collapse\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\"><path d=\"M12 5a1 1 0 0 1 1 1v5h5a1 1 0 1 1 0 2h-5v5a1 1 0 1 1-2 0v-5H6a1 1 0 1 1 0-2h5V6a1 1 0 0 1 1-1z\" fill=\"currentColor\" fill-rule=\"evenodd\"><\/path><\/svg><\/span><\/a><div class=\"kioken-accordion-item-content\">\n<p><\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">NAME<\/th><th class=\"has-text-align-center\" data-align=\"center\">REQUIRED<\/th><th>DESCRIPTION<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>firstName<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td><td>Customer's first name.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>lastName<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td><td>Customer's last name.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>currencyCode<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td><td>A three-digit currency code (<a href=\"https:\/\/www.iso.org\/obp\/ui\/#search\/code\/\">ISO 4217 standard<\/a>) for the currency used in the transaction.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>address1<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">No<\/td><td>Customer's billing address. If provided, it should be between <strong>1<\/strong> and <strong>50<\/strong> characters long.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>address2<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">No<\/td><td>Customer's address (line 2). If provided, it should be between <strong>1<\/strong> and <strong>50<\/strong> characters long.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>address3<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">No<\/td><td>Customer's address (line 3). If provided, it should be between <strong>1<\/strong> and <strong>50<\/strong> characters long.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>postalCode<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td><td>Customer's billing zip code. It should be a valid zip code between <strong>1<\/strong> and <strong>16<\/strong> characters long.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>city<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">No<\/td><td>Customer's billing city. If provided, it should be between <strong>1<\/strong> and <strong>50<\/strong> characters long.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>state<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">No<\/td><td>Customer's billing state. If provided, it should be between <strong>1<\/strong> and <strong>3<\/strong> characters long.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>country<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td><td>Customer's billing country. Should be a two-letter country code as defined in <a href=\"https:\/\/www.iso.org\/obp\/ui\/#iso:std:iso:3166:-1:ed-4:v1:en\">ISO 3166-1<\/a>.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>email<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td><td>Customer's email. Should be a well-formed email address, <strong>max 254<\/strong> characters long.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>phoneNumber<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">No<\/td><td>Customer's phone number. If provided, it should be a well-formed phone number.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>ipAddress<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td><td>Customer's IP address. (<strong>IPv4 only<\/strong>)<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>browserHttpUserAgent<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">No<\/td><td>Browser User-Agent header value.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>browserHttpAccept<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">No<\/td><td>Browser Accept header value.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>browserHttpAcceptEncoding<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">No<\/td><td>Browser Accept Encoding header value.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>browserHttpAcceptLanguate<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">No<\/td><td>Browser Accept Language header value.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>cardNumber<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td><td>A valid credit card number.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>expMonth<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td><td>Credit card expiration month in <strong><em>mm<\/em><\/strong> format. Should be a value between <strong>1<\/strong> and <strong>12<\/strong>.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>expYear<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td><td>Credit card expiration year in <strong><em>yyyy<\/em><\/strong> format. Should be a value between <strong>current year<\/strong> and <strong>2100<\/strong>.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>cvv2<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td><td>Card security code. Should be a <strong>3-4 digit value<\/strong>.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>nameOnCard<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td><td>Name displayed on the credit card. Should be between <strong>2<\/strong> and <strong>45<\/strong> characters long.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n<\/div><\/div>\n<\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"deferred-charges-generate-oauth-token\">3. Generate OAuth Bearer Token<\/h3>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The CCBill RESTful API uses <a href=\"https:\/\/ccbill.com\/kb\/what-is-oauth\">OAuth-based<\/a> authentication and authorization. Use the <strong>frontend credentials<\/strong> (<strong><code>Merchant ApplicationID<\/code><\/strong> and <strong><code>Secret Key<\/code><\/strong> that are Base64 encoded) you received from Merchant Support to generate a <strong>frontend bearer token<\/strong>.<\/p>\n\n\n\n<p>You must include this token in the Authorization header of API requests when creating payment tokens. Use the following example and adjust the necessary parameters to obtain a <strong>frontend bearer token:<\/strong><\/p>\n\n\n\n<div id=\"kioken-tabs__ae0040-5d\" class=\"wp-block-kioken-tabs\" data-tab-active=\"tab-curl\"><div class=\"kioken-tabs-buttons kt_d_flex kt_flex_justifystart\"><a style=\"padding:10px 20px 10px 20px;margin:0px 5px -1px 0px\" href=\"#tab-curl\" class=\"kioken-tabs-buttons-item\">cURL<\/a><a style=\"padding:10px 20px 10px 20px;margin:0px 5px -1px 0px\" href=\"#tab-java\" class=\"kioken-tabs-buttons-item\">Java<\/a><a style=\"padding:10px 20px 10px 20px;margin:0px 5px -1px 0px\" href=\"#tab-php\" class=\"kioken-tabs-buttons-item\">PHP<\/a><\/div><div class=\"kioken-tabs-content\" style=\"padding:20px 20px 20px 20px\">\n<div class=\"wp-block-kioken-tab\" data-tab=\"tab-curl\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#263238\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>curl -X POST 'https:\/\/api.ccbill.com\/ccbill-auth\/oauth\/token' \\\n  -u '&#91;Frontend_Merchant_Application_ID&#93;:&#91;Frontend_Secret_Key&#93;' \\\n  -H 'Content-Type: application\/x-www-form-urlencoded' \\\n  -d 'grant_type=client_credentials'<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme\" style=\"background-color: #263238\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FFCB6B\">curl<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C3E88D\">-X<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C3E88D\">POST<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">https:\/\/api.ccbill.com\/ccbill-auth\/oauth\/token<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #EEFFFF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #C3E88D\">-u<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">&#91;Frontend_Merchant_Application_ID&#93;:&#91;Frontend_Secret_Key&#93;<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #EEFFFF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #C3E88D\">-H<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">Content-Type: application\/x-www-form-urlencoded<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #EEFFFF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #C3E88D\">-d<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">grant_type=client_credentials<\/span><span style=\"color: #89DDFF\">&#39;<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-kioken-tab\" data-tab=\"tab-java\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#263238\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>String getOAuthToken() {\n    String credentials = Base64.getEncoder()\n        .encodeToString((\"&#91;Frontend_Merchant_Application_ID&#93;\" + \":\" + \"&#91;Frontend_Secret_Key&#93;\")\n        .getBytes(StandardCharsets.UTF_8));\n    String requestBody = \"grant_type=client_credentials\";\n\n    HttpRequest request = HttpRequest.newBuilder()\n            .uri(URI.create(\"https:\/\/api.ccbill.com\/ccbill-auth\/oauth\/token\"))\n           .header(\"Authorization\", \"Basic \" + credentials)\n            .header(\"Content-Type\", \"application\/x-www-form-urlencoded\")\n           .POST(HttpRequest.BodyPublishers.ofString(requestBody, StandardCharsets.UTF_8))\n            .build();\n\n    try {\n        HttpResponse&lt;String> response = HTTP_CLIENT.send(request, HttpResponse.BodyHandlers.ofString());\n        return extractAccessToken(response.body());\n    } catch (IOException | InterruptedException e) {\n        e.printStackTrace();\n        return null;\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme\" style=\"background-color: #263238\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">getOAuthToken<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> credentials <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> Base64<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">getEncoder<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">encodeToString<\/span><span style=\"color: #89DDFF\">((<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">&#91;Frontend_Merchant_Application_ID&#93;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">+<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">:<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">+<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">&#91;Frontend_Secret_Key&#93;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">getBytes<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">StandardCharsets<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">UTF_8<\/span><span style=\"color: #89DDFF\">));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> requestBody <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">grant_type=client_credentials<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">HttpRequest<\/span><span style=\"color: #EEFFFF\"> request <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> HttpRequest<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">newBuilder<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">uri<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">URI<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">create<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">https:\/\/api.ccbill.com\/ccbill-auth\/oauth\/token<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">           <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">header<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Authorization<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Basic <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">+<\/span><span style=\"color: #EEFFFF\"> credentials<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">header<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Content-Type<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">application\/x-www-form-urlencoded<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">           <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">POST<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">HttpRequest<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">BodyPublishers<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">ofString<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">requestBody<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> StandardCharsets<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">UTF_8<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">build<\/span><span style=\"color: #89DDFF\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #C792EA\">HttpResponse<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #EEFFFF\"> response <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> HTTP_CLIENT<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">send<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">request<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> HttpResponse<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">BodyHandlers<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">ofString<\/span><span style=\"color: #89DDFF\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">extractAccessToken<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">response<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">body<\/span><span style=\"color: #89DDFF\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">catch<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #C792EA\">IOException<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">|<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">InterruptedException<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">e<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        e<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">printStackTrace<\/span><span style=\"color: #89DDFF\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">null;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-kioken-tab\" data-tab=\"tab-php\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#263238\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&lt;?php\n\nfunction getOAuthToken() {\n    $url = \"https:\/\/api.ccbill.com\/ccbill-auth\/oauth\/token\";\n    $merchantAppId = \"&#91;Frontend_Merchant_Application_ID&#93;\";\n    $secretKey = \"&#91;Frontend_Secret_Key&#93;\";\n    $data = http_build_query(&#91;\"grant_type\" => \"client_credentials\"&#93;);\n\n    try {\n        $httpRequest = new HttpRequest();\n        $httpRequest->setUrl($url);\n        $httpRequest->setMethod(HTTP_METH_POST);\n        $httpRequest->setHeaders(&#91;\n            \"Authorization\" => \"Basic \" . base64_encode(\"$merchantAppId:$secretKey\"),\n            \"Content-Type\" => \"application\/x-www-form-urlencoded\"\n        &#93;);\n        $httpRequest->setBody($data);\n\n        $httpClient = new HttpClient();\n        $response = $httpClient->send($httpRequest);\n        \n        $responseData = json_decode($response->getBody(), true);\n        return $responseData&#91;'access_token'&#93; ?? die(\"Error: Invalid OAuth response.\");\n    } catch (HttpException $ex) {\n        die(\"Error fetching OAuth token: \" . $ex->getMessage());\n    }\n}\n\n?><\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme\" style=\"background-color: #263238\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #89DDFF\">&lt;?<\/span><span style=\"color: #EEFFFF\">php<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">function<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">getOAuthToken<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">url <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">https:\/\/api.ccbill.com\/ccbill-auth\/oauth\/token<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">merchantAppId <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">&#91;Frontend_Merchant_Application_ID&#93;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">secretKey <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">&#91;Frontend_Secret_Key&#93;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">data <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">http_build_query<\/span><span style=\"color: #89DDFF\">(&#91;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">grant_type<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">client_credentials<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">&#93;);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">httpRequest <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">new<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">HttpRequest<\/span><span style=\"color: #89DDFF\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">httpRequest<\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #82AAFF\">setUrl<\/span><span style=\"color: #89DDFF\">($<\/span><span style=\"color: #EEFFFF\">url<\/span><span style=\"color: #89DDFF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">httpRequest<\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #82AAFF\">setMethod<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">HTTP_METH_POST<\/span><span style=\"color: #89DDFF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">httpRequest<\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #82AAFF\">setHeaders<\/span><span style=\"color: #89DDFF\">(&#91;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Authorization<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Basic <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">base64_encode<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;$<\/span><span style=\"color: #EEFFFF\">merchantAppId<\/span><span style=\"color: #C3E88D\">:<\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">secretKey<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Content-Type<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">application\/x-www-form-urlencoded<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">&#93;);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">httpRequest<\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #82AAFF\">setBody<\/span><span style=\"color: #89DDFF\">($<\/span><span style=\"color: #EEFFFF\">data<\/span><span style=\"color: #89DDFF\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">httpClient <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">new<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">HttpClient<\/span><span style=\"color: #89DDFF\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">response <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">httpClient<\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #82AAFF\">send<\/span><span style=\"color: #89DDFF\">($<\/span><span style=\"color: #EEFFFF\">httpRequest<\/span><span style=\"color: #89DDFF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">responseData <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">json_decode<\/span><span style=\"color: #89DDFF\">($<\/span><span style=\"color: #EEFFFF\">response<\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #82AAFF\">getBody<\/span><span style=\"color: #89DDFF\">(),<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">true);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">responseData<\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">access_token<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #89DDFF\">&#93;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">??<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">die<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Error: Invalid OAuth response.<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">catch<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">HttpException<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">ex<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">die<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Error fetching OAuth token: <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">ex<\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #82AAFF\">getMessage<\/span><span style=\"color: #89DDFF\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">?&gt;<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Important Notes<\/strong><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Never expose API credentials on the front end. <\/strong>Always store your Merchant Application ID and Secret Key securely in server-side environment variables.<\/li>\n\n\n\n<li><strong>This request must be sent from your backend.<\/strong> OAuth token requests cannot be made from a web browser for security reasons.<\/li>\n\n\n\n<li><strong>OAuth access tokens are temporary.<\/strong> Each token remains valid for a single request or until it expires.<\/li>\n\n\n\n<li><strong>Reduce API token attack surface<\/strong>. Execute calls to create an Oauth token and a payment token in quick succession to minimize the risk of the access token being exposed to attackers.<\/li>\n\n\n\n<li><strong>Use CSRF tokens for your front-end<\/strong> <strong>payment forms<\/strong>. Protect your front-end forms with CSRF tokens to prevent unauthorized form submissions.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"deferred-charges-check-sca\">4. Check if SCA is Required<\/h3>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The <a href=\"https:\/\/ccbill.com\/doc\/method-reference#ftoc-heading-2\" target=\"_blank\" rel=\"noreferrer noopener\">isScaRequired()<\/a> function determines whether strong customer authentication is required before generating a payment token. The system checks the provided <strong>credit card number<\/strong>, <strong>merchant account number<\/strong>, <strong>subaccount number<\/strong>, and <strong>currency code<\/strong>.<\/p>\n\n\n\n<p>This method allows you to dynamically apply 3DS authentication only in instances when they are truly required.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Code Example<\/strong><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#263238\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>async function checkIfScaRequired() {\n    const widget = new ccbill.CCBillAdvancedWidget('your-application-id');\n    const scaRequiredResponse = await widget.isScaRequired(\n        \"&#91;Frondent_Access_Token&#93;\", \n        &#91;Your_Client_Account_Number&#93;, \n        &#91;Your_Client_Subaccount_Number&#93;);\n    return await scaRequiredResponse.json();\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme\" style=\"background-color: #263238\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C792EA\">async<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">function<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">checkIfScaRequired<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #C792EA\">const<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">widget<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">new<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">ccbill<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">CCBillAdvancedWidget<\/span><span style=\"color: #F07178\">(<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">your-application-id<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #F07178\">)<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #C792EA\">const<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">scaRequiredResponse<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">widget<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">isScaRequired<\/span><span style=\"color: #F07178\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">&#91;Frondent_Access_Token&#93;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        &#91;<\/span><span style=\"color: #EEFFFF\">Your_Client_Account_Number<\/span><span style=\"color: #F07178\">&#93;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        &#91;<\/span><span style=\"color: #EEFFFF\">Your_Client_Subaccount_Number<\/span><span style=\"color: #F07178\">&#93;)<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">scaRequiredResponse<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">json<\/span><span style=\"color: #F07178\">()<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-kioken-accordion kioken-accordion-1\">\n<div class=\"wp-block-kioken-accordion-item kioken-accordion-item\"><a href=\"#accordionalternative-check-if-3ds-is-required-based-on-existing-token\" class=\"kioken-accordion-item-heading\"><span class=\"kioken-accordion-item-label\"><strong>Alternative: Check If 3DS Is Required Based on Existing Token<\/strong><\/span><span class=\"kioken-accordion-item-collapse\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"24\" height=\"24\"><path d=\"M12 5a1 1 0 0 1 1 1v5h5a1 1 0 1 1 0 2h-5v5a1 1 0 1 1-2 0v-5H6a1 1 0 1 1 0-2h5V6a1 1 0 0 1 1-1z\" fill=\"currentColor\" fill-rule=\"evenodd\"><\/path><\/svg><\/span><\/a><div class=\"kioken-accordion-item-content\">\n<p>The <a href=\"https:\/\/ccbill.com\/doc\/method-reference#ftoc-heading-3\" target=\"_blank\" rel=\"noreferrer noopener\">isScaRequiredForPaymentToken()<\/a> function determines whether strong customer authentication(3DS) is required for a <strong>pre-existing payment token<\/strong>.<\/p>\n\n\n\n<p>Merchants who have already stored payment information as a token (<strong><code>paymentTokenID<\/code><\/strong>) can use it to determine if SCA is required before processing a charge.<\/p>\n\n\n\n<p><strong>Code Example<\/strong><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#263238\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>async function checkIfScaRequired() {\n    const widget = new ccbill.CCBillAdvancedWidget('your-application-id');\n    const scaRequiredResponse = await widget.isScaRequiredForPaymentToken(\n        \"&#91;Frondent_Access_Token&#93;\", \n        \"&#91;payment_token_id&#93;\");\n    return await scaRequiredResponse.json();\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme\" style=\"background-color: #263238\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C792EA\">async<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">function<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">checkIfScaRequired<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #C792EA\">const<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">widget<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">new<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">ccbill<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">CCBillAdvancedWidget<\/span><span style=\"color: #F07178\">(<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">your-application-id<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #F07178\">)<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #C792EA\">const<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">scaRequiredResponse<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">widget<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">isScaRequiredForPaymentToken<\/span><span style=\"color: #F07178\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">&#91;Frondent_Access_Token&#93;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">&#91;payment_token_id&#93;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #F07178\">)<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">scaRequiredResponse<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">json<\/span><span style=\"color: #F07178\">()<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n<\/div><\/div>\n<\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Response Handling<\/strong><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The function automatically checks the transaction parameters to determine if strong customer authentication (SCA) is required:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A successful response returns a Boolean value that indicates whether 3DS is required for the transaction. Use the result to dynamically route customers through a 3DS flow only when required. This ensures a better user experience and compliance with SCA regulations.<\/li>\n\n\n\n<li>If validation fails (e.g., invalid credentials), the response will show an error message to describe the issue.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-kioken-accordion kioken-accordion-0\"><\/div>\n\n\n\n<div class=\"wp-block-kioken-accordion kioken-accordion-0\"><\/div>\n\n\n\n<div class=\"wp-block-kioken-accordion kioken-accordion-0\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"deferred-charges-charge-token\">5. Create a Payment Token With 3DS Authentication For Deferred Charges<\/h3>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The <a href=\"https:\/\/ccbill.com\/doc\/method-reference#ftoc-heading-6\" target=\"_blank\" rel=\"noreferrer noopener\">createPaymentToken3DS()<\/a> method authenticates the cardholder using 3D Secure (3DS) and creates a payment token. The token can be charged later without additional 3DS authentication.<\/p>\n\n\n\n<p>Use this method to authenticate the customer once and charge them later without triggering another 3DS flow.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Code Example<\/strong><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#263238\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>async function createPaymentToken3ds(widget, authToken, clientAccnum, clientSubacc) {\n    return await widget.createPaymentToken3DS(authToken, clientAccnum, clientSubacc);\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme\" style=\"background-color: #263238\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C792EA\">async<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">function<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">createPaymentToken3ds<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF; font-style: italic\">widget<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">authToken<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">clientAccnum<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">clientSubacc<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">widget<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">createPaymentToken3DS<\/span><span style=\"color: #F07178\">(<\/span><span style=\"color: #EEFFFF\">authToken<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">clientAccnum<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">clientSubacc<\/span><span style=\"color: #F07178\">)<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Response Handling<\/strong><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The function returns a response with the outcome of the 3DS authentication and token creation process:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If the request is successful, the function returns an object with the Payment Token and additional metadata.<\/li>\n\n\n\n<li>If the request fails, the response contains an <a href=\"https:\/\/ccbill.com\/doc\/error-codes\" target=\"_blank\" rel=\"noreferrer noopener\">error code<\/a> and message explaining the issue (e.g., invalid credentials or authentication failure).<\/li>\n<\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"deferred-charges-charge-3ds\">6. Charge Payment Token (3DS)<\/h3>\n\n\n\n<p>Use the Payment Token ID and backend bearer token to charge a customer's credit card through a 3DS-secured payment flow. Generate a new<strong> backend bearer token<\/strong> using your Base64 encoded backend credentials.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Code Examples<\/strong><\/p>\n\n\n\n<div id=\"kioken-tabs__dcd146-87\" class=\"wp-block-kioken-tabs\" data-tab-active=\"tab-curl\"><div class=\"kioken-tabs-buttons kt_d_flex kt_flex_justifystart\"><a style=\"padding:10px 20px 10px 20px;margin:0px 5px -1px 0px\" href=\"#tab-curl\" class=\"kioken-tabs-buttons-item\">cURL<\/a><a style=\"padding:10px 20px 10px 20px;margin:0px 5px -1px 0px\" href=\"#tab-java\" class=\"kioken-tabs-buttons-item\">Java<\/a><a style=\"padding:10px 20px 10px 20px;margin:0px 5px -1px 0px\" href=\"#tab-php\" class=\"kioken-tabs-buttons-item\">PHP<\/a><\/div><div class=\"kioken-tabs-content\" style=\"padding:20px 20px 20px 20px\">\n<div class=\"wp-block-kioken-tab\" data-tab=\"tab-curl\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#263238\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>curl -X POST 'https:\/\/api.ccbill.com\/transactions\/payment-tokens\/&#91;payment_token_id&#93;' \\\n  -H 'Accept: application\/vnd.mcn.transaction-service.api.v.2+json' \\\n  -H 'Authorization: Bearer &#91;Backend_Access_Token&#93;' \\\n  -H 'Cache-Control: no-cache' \\\n  -H 'Content-Type: application\/json' \\\n  -d '{\n    \"clientAccnum\": &#91;Your_Client_Account_Number&#93;,\n    \"clientSubacc\": &#91;Your_Client_Subaccount_Number&#93;,\n    \"initialPrice\": 9.99,\n    \"initialPeriod\": 30,\n    \"currencyCode\": 840\n  }'<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme\" style=\"background-color: #263238\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FFCB6B\">curl<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C3E88D\">-X<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C3E88D\">POST<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">https:\/\/api.ccbill.com\/transactions\/payment-tokens\/&#91;payment_token_id&#93;<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #EEFFFF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #C3E88D\">-H<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">Accept: application\/vnd.mcn.transaction-service.api.v.2+json<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #EEFFFF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #C3E88D\">-H<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">Authorization: Bearer &#91;Backend_Access_Token&#93;<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #EEFFFF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #C3E88D\">-H<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">Cache-Control: no-cache<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #EEFFFF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #C3E88D\">-H<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">Content-Type: application\/json<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #EEFFFF\"> \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">  <\/span><span style=\"color: #C3E88D\">-d<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">    &quot;clientAccnum&quot;: &#91;Your_Client_Account_Number&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">    &quot;clientSubacc&quot;: &#91;Your_Client_Subaccount_Number&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">    &quot;initialPrice&quot;: 9.99,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">    &quot;initialPeriod&quot;: 30,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">    &quot;currencyCode&quot;: 840<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">  }<\/span><span style=\"color: #89DDFF\">&#39;<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-kioken-tab\" data-tab=\"tab-java\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#263238\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>public ResponseEntity&lt;String> processPurchase() {\n    String requestBody = \"\"\"\n        {\n            \"clientAccnum\": &#91;Your_Client_Account_Number&#93;,\n            \"clientSubacc\": &#91;Your_Client_Subaccount_Number&#93;,\n            \"initialPrice\": 9.99,\n            \"initialPeriod\": 30,\n            \"currencyCode\": 840\n        }\"\"\";\n\n    HttpRequest request = HttpRequest.newBuilder()\n            .uri(URI.create(\"https:\/\/api.ccbill.com\/transactions\/payment-tokens\/&#91;payment_token_id&#93;\"))\n            .header(\"Accept\", \"application\/vnd.mcn.transaction-service.api.v.2+json\")\n            .header(\"Authorization\", \"Bearer &#91;Backend_Access_Token&#93;\")\n            .header(\"Cache-Control\", \"no-cache\")\n            .header(\"Content-Type\", \"application\/json\")\n            .POST(HttpRequest.BodyPublishers.ofString(requestBody, StandardCharsets.UTF_8))\n            .build();\n\n    try {\n        HttpResponse&lt;String> response = client.send(request, HttpResponse.BodyHandlers.ofString());\n        return ResponseEntity.ok(response.body());\n    } catch (IOException | InterruptedException e) {\n        e.printStackTrace();\n        return ResponseEntity.status(500).body(\"Error processing payment\");\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme\" style=\"background-color: #263238\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C792EA\">public<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">ResponseEntity<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #EEFFFF\">String<\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">processPurchase<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> requestBody <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">        {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">            &quot;clientAccnum&quot;: &#91;Your_Client_Account_Number&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">            &quot;clientSubacc&quot;: &#91;Your_Client_Subaccount_Number&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">            &quot;initialPrice&quot;: 9.99,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">            &quot;initialPeriod&quot;: 30,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">            &quot;currencyCode&quot;: 840<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">        }<\/span><span style=\"color: #89DDFF\">&quot;&quot;&quot;<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">HttpRequest<\/span><span style=\"color: #EEFFFF\"> request <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> HttpRequest<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">newBuilder<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">uri<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">URI<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">create<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">https:\/\/api.ccbill.com\/transactions\/payment-tokens\/&#91;payment_token_id&#93;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">header<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Accept<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">application\/vnd.mcn.transaction-service.api.v.2+json<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">header<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Authorization<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Bearer &#91;Backend_Access_Token&#93;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">header<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Cache-Control<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">no-cache<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">header<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Content-Type<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">application\/json<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">POST<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">HttpRequest<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">BodyPublishers<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">ofString<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">requestBody<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> StandardCharsets<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">UTF_8<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">build<\/span><span style=\"color: #89DDFF\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #C792EA\">HttpResponse<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #EEFFFF\"> response <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> client<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">send<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">request<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> HttpResponse<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">BodyHandlers<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">ofString<\/span><span style=\"color: #89DDFF\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> ResponseEntity<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">ok<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">response<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">body<\/span><span style=\"color: #89DDFF\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">catch<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #C792EA\">IOException<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">|<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">InterruptedException<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">e<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        e<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">printStackTrace<\/span><span style=\"color: #89DDFF\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> ResponseEntity<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">status<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #F78C6C\">500<\/span><span style=\"color: #89DDFF\">).<\/span><span style=\"color: #82AAFF\">body<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Error processing payment<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-kioken-tab\" data-tab=\"tab-php\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#263238\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&lt;?php\n\nfunction processPurchase() {\n    $url = \"https:\/\/api.ccbill.com\/transactions\/payment-tokens\/&#91;payment_token_id&#93;\";\n    $paymentData = json_encode([\n        \"clientAccnum\" => &#91;Your_Client_Account_Number&#93;,\n        \"clientSubacc\" => &#91;Your_Client_Subaccount_Number&#93;,\n        \"initialPrice\" => 9.99,\n        \"initialPeriod\" => 30,\n        \"currencyCode\" => 840,\n    ]);\n\n    try {\n        $httpRequest = new HttpRequest();\n        $httpRequest->setUrl($url);\n        $httpRequest->setMethod(HTTP_METH_POST);\n        $httpRequest->setHeaders([\n            \"Accept\" => \"application\/vnd.mcn.transaction-service.api.v.2+json\",\n            \"Authorization\" => \"Bearer &#91;Backend_Access_Token&#93;\",\n            \"Cache-Control\" => \"no-cache\",\n            \"Content-Type\" => \"application\/json\"\n        ]);\n        $httpRequest->setBody($paymentData);\n\n        $httpClient = new HttpClient();\n        $response = $httpClient->send($httpRequest);\n        \n        return $response->getBody();\n    } catch (HttpException $ex) {\n        die(\"Error charging payment token: \" . $ex->getMessage();\n    }\n}\n\n?><\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme\" style=\"background-color: #263238\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #89DDFF\">&lt;?<\/span><span style=\"color: #EEFFFF\">php<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">function<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">processPurchase<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">url <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">https:\/\/api.ccbill.com\/transactions\/payment-tokens\/&#91;payment_token_id&#93;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">paymentData <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">json_encode<\/span><span style=\"color: #89DDFF\">([<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">clientAccnum<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">Your_Client_Account_Number<\/span><span style=\"color: #89DDFF\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">clientSubacc<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&#91;<\/span><span style=\"color: #EEFFFF\">Your_Client_Subaccount_Number<\/span><span style=\"color: #89DDFF\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">initialPrice<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">9<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #F78C6C\">99<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">initialPeriod<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">30<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">currencyCode<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">840<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">]);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">httpRequest <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">new<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">HttpRequest<\/span><span style=\"color: #89DDFF\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">httpRequest<\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #82AAFF\">setUrl<\/span><span style=\"color: #89DDFF\">($<\/span><span style=\"color: #EEFFFF\">url<\/span><span style=\"color: #89DDFF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">httpRequest<\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #82AAFF\">setMethod<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">HTTP_METH_POST<\/span><span style=\"color: #89DDFF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">httpRequest<\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #82AAFF\">setHeaders<\/span><span style=\"color: #89DDFF\">([<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Accept<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">application\/vnd.mcn.transaction-service.api.v.2+json<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Authorization<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Bearer &#91;Backend_Access_Token&#93;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Cache-Control<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">no-cache<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Content-Type<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">=&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">application\/json<\/span><span style=\"color: #89DDFF\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">]);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">httpRequest<\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #82AAFF\">setBody<\/span><span style=\"color: #89DDFF\">($<\/span><span style=\"color: #EEFFFF\">paymentData<\/span><span style=\"color: #89DDFF\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">httpClient <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">new<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">HttpClient<\/span><span style=\"color: #89DDFF\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">response <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">httpClient<\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #82AAFF\">send<\/span><span style=\"color: #89DDFF\">($<\/span><span style=\"color: #EEFFFF\">httpRequest<\/span><span style=\"color: #89DDFF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">response<\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #82AAFF\">getBody<\/span><span style=\"color: #89DDFF\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">catch<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #FFCB6B\">HttpException<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">ex<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">die<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Error charging payment token: <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">$<\/span><span style=\"color: #EEFFFF\">ex<\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #82AAFF\">getMessage<\/span><span style=\"color: #89DDFF\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">?&gt;<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Response Handling<\/strong><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The API endpoint handles the transaction:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A successful charge returns a response with transaction details.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If the charge fails, the response includes an <a href=\"https:\/\/ccbill.com\/doc\/error-codes\" target=\"_blank\" rel=\"noreferrer noopener\">error code<\/a> and a descriptive message.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"deferred-charges-full-example\">Full Integration Example (Deferred Charges)<\/h2>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>To streamline the process of securely storing payment details for later use, we have provided a complete example that shows how to implement a 3DS-authenticated tokenization flow using the CCBill Advanced Widget. It allows merchants to authenticate the cardholder up front and charge the stored token later.<\/p>\n\n\n\n<p>The example has:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A JavaScript frontend that initializes the widget, collects payment data, and triggers the 3DS authentication flow to create a Payment Token.<\/li>\n\n\n\n<li>A Java backend that generates the bearer token, receives the Payment Token from the frontend, and securely stores it for future use in deferred billing scenarios.<\/li>\n<\/ul>\n\n\n\n<p>Replace all placeholder values with actual data in your integration.<\/p>\n\n\n\n<div id=\"kioken-tabs__efaf58-b7\" class=\"wp-block-kioken-tabs\" data-tab-active=\"tab-javascript-frontend\"><div class=\"kioken-tabs-buttons kt_d_flex kt_flex_justifystart\"><a style=\"padding:10px 20px 10px 20px;margin:0px 5px -1px 0px\" href=\"#tab-javascript-frontend\" class=\"kioken-tabs-buttons-item\">JavaScript (Frontend)<\/a><a style=\"padding:10px 20px 10px 20px;margin:0px 5px -1px 0px\" href=\"#tab-java-backend\" class=\"kioken-tabs-buttons-item\">Java (Backend)<\/a><\/div><div class=\"kioken-tabs-content\" style=\"padding:20px 20px 20px 20px\">\n<div class=\"wp-block-kioken-tab\" data-tab=\"tab-javascript-frontend\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#263238\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>async function fetchOAuthToken() {\n    return (await (await fetch('https:\/\/your-website.com\/api\/auth-token')).json()).token;\n}\n\nasync function createPaymentToken(widget, authToken, clientAccnum, clientSubacc) {\n    const paymentTokenResponse = await widget.createPaymentToken(\n        authToken,\n        clientAccnum,\n        clientSubacc\n    );\n    return await paymentTokenResponse.json();\n}\n\nasync function createPaymentToken3ds(widget, authToken, clientAccnum, clientSubacc) {\n    return await widget.createPaymentToken3DS(authToken, clientAccnum, clientSubacc);\n}\n\nasync function chargePaymentToken(paymentToken) {\n    return await (await (fetch('https:\/\/your-website.com\/api\/purchase', {\n        method: 'POST',\n        headers: {\n            'Content-Type': 'application\/json'\n        },\n        body: JSON.stringify({\n            paymentToken,\n            amount: 9.99,\n            currency: 840\n        })\n    }))).json();\n}\nasync function authenticateAndPurchaseLater() {\n    const widget = new ccbill.CCBillAdvancedWidget('your-application-id');\n    const clientAccnum = &#91;Your_Client_Account_Number&#93;;\n    const clientSubacc = &#91;Your_Client_Subaccount_Number&#93;;\n\n    try {\n        \/\/ retrieval of the auth token from merchant provided endpoint\n        \/\/ this should be done as late in the submission process as possible to avoid potential exploit.\n        const authToken = await fetchOAuthToken();\n\n        let paymentToken;\n\n        \/\/ check if 3DS is required and process the 3DS flow with the client if necessary\n        const scaRequired = await checkIfScaRequired(widget, authToken, clientAccnum, clientSubacc);\n        if (scaRequired) {\n            \/\/ go through 3DS flow and create payment token in a single API call.\n            \/\/ The resulting 3DS payment token should be submitted to merchant owned endpoint\n            \/\/ and can be charged at some point in future via \/transactions\/payment-tokens\/{paymentTokenId}.\n            paymentToken = await createPaymentToken3ds(widget, authToken, clientAccnum, clientSubacc);\n        } else {\n            \/\/ create the non-3DS payment token to be submitted to the merchant owned endpoint\n            \/\/ and charged via \/transactions\/payment-tokens\/{paymentTokenId}.\n            paymentToken = await createPaymentToken(widget, authToken, clientAccnum, clientSubacc);\n        }\n\n        \/\/ submit the payment token to be charged to an endpoint implementing backend charging of the token\n        const chargeCallResponse = await chargePaymentToken(paymentToken);\n        return Promise.resolve(chargeCallResponse);\n    } catch (error) {\n        \/\/ react to any errors that may occur during the process\n        return Promise.reject({ error });\n    }\n}\n\nlet result = await authenticateAndPurchaseLater();<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme\" style=\"background-color: #263238\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C792EA\">async<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">function<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">fetchOAuthToken<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #F07178\"> (<\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #F07178\"> (<\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #82AAFF\">fetch<\/span><span style=\"color: #F07178\">(<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">https:\/\/your-website.com\/api\/auth-token<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #F07178\">))<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">json<\/span><span style=\"color: #F07178\">())<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">token<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">async<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">function<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">createPaymentToken<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF; font-style: italic\">widget<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">authToken<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">clientAccnum<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">clientSubacc<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #C792EA\">const<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">paymentTokenResponse<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">widget<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">createPaymentToken<\/span><span style=\"color: #F07178\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><span style=\"color: #EEFFFF\">authToken<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><span style=\"color: #EEFFFF\">clientAccnum<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><span style=\"color: #EEFFFF\">clientSubacc<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    )<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">paymentTokenResponse<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">json<\/span><span style=\"color: #F07178\">()<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">async<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">function<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">createPaymentToken3ds<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF; font-style: italic\">widget<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">authToken<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">clientAccnum<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">clientSubacc<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">widget<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">createPaymentToken3DS<\/span><span style=\"color: #F07178\">(<\/span><span style=\"color: #EEFFFF\">authToken<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">clientAccnum<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">clientSubacc<\/span><span style=\"color: #F07178\">)<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">async<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">function<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">chargePaymentToken<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF; font-style: italic\">paymentToken<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #F07178\"> (<\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #F07178\"> (<\/span><span style=\"color: #82AAFF\">fetch<\/span><span style=\"color: #F07178\">(<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">https:\/\/your-website.com\/api\/purchase<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        method<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">POST<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        headers<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">            <\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #F07178\">Content-Type<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">application\/json<\/span><span style=\"color: #89DDFF\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><span style=\"color: #89DDFF\">},<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        body<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">JSON<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">stringify<\/span><span style=\"color: #F07178\">(<\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">            <\/span><span style=\"color: #EEFFFF\">paymentToken<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">            amount<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #F78C6C\">9.99<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">            currency<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #F78C6C\">840<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #F07178\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #F07178\">)))<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">json<\/span><span style=\"color: #F07178\">()<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">async<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">function<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">authenticateAndPurchaseLater<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #C792EA\">const<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">widget<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">new<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">ccbill<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">CCBillAdvancedWidget<\/span><span style=\"color: #F07178\">(<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #C3E88D\">your-application-id<\/span><span style=\"color: #89DDFF\">&#39;<\/span><span style=\"color: #F07178\">)<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #C792EA\">const<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">clientAccnum<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #F07178\"> &#91;<\/span><span style=\"color: #EEFFFF\">Your_Client_Account_Number<\/span><span style=\"color: #F07178\">&#93;<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #C792EA\">const<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">clientSubacc<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #F07178\"> &#91;<\/span><span style=\"color: #EEFFFF\">Your_Client_Subaccount_Number<\/span><span style=\"color: #F07178\">&#93;<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">        <\/span><span style=\"color: #546E7A; font-style: italic\">\/\/ retrieval of the auth token from merchant provided endpoint<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">        <\/span><span style=\"color: #546E7A; font-style: italic\">\/\/ this should be done as late in the submission process as possible to avoid potential exploit.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><span style=\"color: #C792EA\">const<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">authToken<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #82AAFF\">fetchOAuthToken<\/span><span style=\"color: #F07178\">()<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><span style=\"color: #C792EA\">let<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">paymentToken<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">        <\/span><span style=\"color: #546E7A; font-style: italic\">\/\/ check if 3DS is required and process the 3DS flow with the client if necessary<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><span style=\"color: #C792EA\">const<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">scaRequired<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #82AAFF\">checkIfScaRequired<\/span><span style=\"color: #F07178\">(<\/span><span style=\"color: #EEFFFF\">widget<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">authToken<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">clientAccnum<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">clientSubacc<\/span><span style=\"color: #F07178\">)<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">if<\/span><span style=\"color: #F07178\"> (<\/span><span style=\"color: #EEFFFF\">scaRequired<\/span><span style=\"color: #F07178\">) <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">            <\/span><span style=\"color: #546E7A; font-style: italic\">\/\/ go through 3DS flow and create payment token in a single API call.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">            <\/span><span style=\"color: #546E7A; font-style: italic\">\/\/ The resulting 3DS payment token should be submitted to merchant owned endpoint<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">            <\/span><span style=\"color: #546E7A; font-style: italic\">\/\/ and can be charged at some point in future via \/transactions\/payment-tokens\/{paymentTokenId}.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">            <\/span><span style=\"color: #EEFFFF\">paymentToken<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #82AAFF\">createPaymentToken3ds<\/span><span style=\"color: #F07178\">(<\/span><span style=\"color: #EEFFFF\">widget<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">authToken<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">clientAccnum<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">clientSubacc<\/span><span style=\"color: #F07178\">)<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">else<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">            <\/span><span style=\"color: #546E7A; font-style: italic\">\/\/ create the non-3DS payment token to be submitted to the merchant owned endpoint<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">            <\/span><span style=\"color: #546E7A; font-style: italic\">\/\/ and charged via \/transactions\/payment-tokens\/{paymentTokenId}.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">            <\/span><span style=\"color: #EEFFFF\">paymentToken<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #82AAFF\">createPaymentToken<\/span><span style=\"color: #F07178\">(<\/span><span style=\"color: #EEFFFF\">widget<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">authToken<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">clientAccnum<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">clientSubacc<\/span><span style=\"color: #F07178\">)<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">        <\/span><span style=\"color: #546E7A; font-style: italic\">\/\/ submit the payment token to be charged to an endpoint implementing backend charging of the token<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><span style=\"color: #C792EA\">const<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">chargeCallResponse<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #82AAFF\">chargePaymentToken<\/span><span style=\"color: #F07178\">(<\/span><span style=\"color: #EEFFFF\">paymentToken<\/span><span style=\"color: #F07178\">)<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #FFCB6B\">Promise<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">resolve<\/span><span style=\"color: #F07178\">(<\/span><span style=\"color: #EEFFFF\">chargeCallResponse<\/span><span style=\"color: #F07178\">)<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">catch<\/span><span style=\"color: #F07178\"> (<\/span><span style=\"color: #EEFFFF\">error<\/span><span style=\"color: #F07178\">) <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">        <\/span><span style=\"color: #546E7A; font-style: italic\">\/\/ react to any errors that may occur during the process<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #FFCB6B\">Promise<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">reject<\/span><span style=\"color: #F07178\">(<\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">error<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #F07178\">)<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">let<\/span><span style=\"color: #EEFFFF\"> result <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">await<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">authenticateAndPurchaseLater<\/span><span style=\"color: #EEFFFF\">()<\/span><span style=\"color: #89DDFF\">;<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-kioken-tab\" data-tab=\"tab-java-backend\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#263238\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import java.io.IOException;\nimport java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.nio.charset.StandardCharsets;\nimport java.time.Duration;\nimport java.util.Base64;\nimport org.springframework.web.bind.annotation.*;\nimport org.springframework.http.ResponseEntity;\nimport com.fasterxml.jackson.databind.JsonNode;\nimport com.fasterxml.jackson.databind.ObjectMapper;\n\n@RestController\n@RequestMapping(\"\/api\")\npublic class ApiController {\n\n    private static final HttpClient HTTP_CLIENT = HttpClient.newBuilder()\n            .connectTimeout(Duration.ofSeconds(10))\n            .build();\n\n    @PostMapping(\"\/auth-token\")\n    public ResponseEntity&lt;AuthTokenResponse> getAuthToken() {\n        String accessToken = fetchOAuthToken(\"&#91;Frontend_Merchant_Application_ID&#93;\", \"&#91;Frontend_Secret_Key&#93;\");\n        if (accessToken != null) {\n            return ResponseEntity.ok(new AuthTokenResponse(accessToken));\n        } else {\n            return ResponseEntity.status(500).body(new AuthTokenResponse(\"\"));\n        }\n    }\n\n    @PostMapping(\"\/purchase\")\n    public ResponseEntity&lt;String> processPurchase(@RequestBody PurchaseRequest purchaseRequest) {\n        String requestBody = String.format(\n                \"\"\"\n                {\n                  \"clientAccnum\": %d,\n                  \"clientSubacc\": %d,\n                  \"initialPrice\": %.2f,\n                  \"initialPeriod\": 30,\n                  \"currencyCode\": %d\n                }\n                \"\"\",\n                purchaseRequest.paymentToken().clientAccnum(),\n                purchaseRequest.paymentToken().clientSubacc(),\n                purchaseRequest.amount(),\n                purchaseRequest.currency()\n        );\n\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(\"https:\/\/api.ccbill.com\/transactions\/payment-tokens\/\" \n                    + purchaseRequest.paymentToken().paymentTokenId()))\n                .header(\"Accept\", \"application\/vnd.mcn.transaction-service.api.v.2+json\")\n                .header(\"Authorization\", \"Bearer \" \n                    + fetchOAuthToken(\"&#91;Backend_Merchant_Application_ID&#93;\", \"&#91;Backend_Secret_Key&#93;\"))\n                .header(\"Cache-Control\", \"no-cache\")\n                .header(\"Content-Type\", \"application\/json\")\n                .POST(HttpRequest.BodyPublishers.ofString(requestBody, StandardCharsets.UTF_8))\n                .build();\n\n        try {\n            HttpResponse&lt;String> response = HTTP_CLIENT.send(request, HttpResponse.BodyHandlers.ofString());\n            return ResponseEntity.ok(response.body());\n        } catch (IOException | InterruptedException e) {\n            e.printStackTrace();\n            return ResponseEntity.status(500).body(\"Error processing payment\");\n        }\n    }\n\n    private static String fetchOAuthToken(String merchantAppId, String sercretKey) {\n        String credentials = Base64.getEncoder()\n            .encodeToString((merchantAppId + \":\" + sercretKey).getBytes(StandardCharsets.UTF_8));\n        String requestBody = \"grant_type=client_credentials\";\n\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(\"https:\/\/api.ccbill.com\/ccbill-auth\/oauth\/token\"))\n                .header(\"Authorization\", \"Basic \" + credentials)\n                .header(\"Content-Type\", \"application\/x-www-form-urlencoded\")\n                .POST(HttpRequest.BodyPublishers.ofString(requestBody, StandardCharsets.UTF_8))\n                .build();\n\n        try {\n            HttpResponse&lt;String> response = HTTP_CLIENT.send(request, HttpResponse.BodyHandlers.ofString());\n            return extractAccessToken(response.body());\n        } catch (IOException | InterruptedException e) {\n            e.printStackTrace();\n            return null;\n        }\n    }\n\n    private static String extractAccessToken(String responseBody) {\n        try {\n            ObjectMapper objectMapper = new ObjectMapper();\n            JsonNode jsonNode = objectMapper.readTree(responseBody);\n            return jsonNode.has(\"access_token\") ? jsonNode.get(\"access_token\").asText() : null;\n        } catch (IOException e) {\n            e.printStackTrace();\n            return null;\n        }\n    }\n\n    private record AuthTokenResponse(String token) {}\n    private record PurchaseRequest(double amount, String currency, PaymentToken paymentToken) {}\n    private record PaymentToken(String paymentTokenId, Integer clientAccnum, Integer clientSubacc) {}\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme\" style=\"background-color: #263238\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F78C6C\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">java<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">io<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">IOException<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F78C6C\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">java<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">net<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">URI<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F78C6C\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">java<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">net<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">http<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">HttpClient<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F78C6C\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">java<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">net<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">http<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">HttpRequest<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F78C6C\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">java<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">net<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">http<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">HttpResponse<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F78C6C\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">java<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">nio<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">charset<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">StandardCharsets<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F78C6C\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">java<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">time<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">Duration<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F78C6C\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">java<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">util<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">Base64<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F78C6C\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">org<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">springframework<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">web<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">bind<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">annotation<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">*<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F78C6C\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">org<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">springframework<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">http<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">ResponseEntity<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F78C6C\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">com<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">fasterxml<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">jackson<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">databind<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">JsonNode<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F78C6C\">import<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">com<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">fasterxml<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">jackson<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">databind<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #C792EA\">ObjectMapper<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">RestController<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">RequestMapping<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">\/api<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">public<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">class<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">ApiController<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">static<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">final<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">HttpClient<\/span><span style=\"color: #EEFFFF\"> HTTP_CLIENT <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> HttpClient<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">newBuilder<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">connectTimeout<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">Duration<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">ofSeconds<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #F78C6C\">10<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">build<\/span><span style=\"color: #89DDFF\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">PostMapping<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">\/auth-token<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">public<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">ResponseEntity<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C792EA\">AuthTokenResponse<\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">getAuthToken<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> accessToken <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">fetchOAuthToken<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">&#91;Frontend_Merchant_Application_ID&#93;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">&#91;Frontend_Secret_Key&#93;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">if<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">accessToken <\/span><span style=\"color: #89DDFF\">!=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">null)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> ResponseEntity<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">ok<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF; font-style: italic\">new<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">AuthTokenResponse<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">accessToken<\/span><span style=\"color: #89DDFF\">));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">else<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> ResponseEntity<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">status<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #F78C6C\">500<\/span><span style=\"color: #89DDFF\">).<\/span><span style=\"color: #82AAFF\">body<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF; font-style: italic\">new<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">AuthTokenResponse<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;&quot;<\/span><span style=\"color: #89DDFF\">));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">@<\/span><span style=\"color: #C792EA\">PostMapping<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">\/purchase<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">public<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">ResponseEntity<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">processPurchase<\/span><span style=\"color: #89DDFF\">(@<\/span><span style=\"color: #C792EA\">RequestBody<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">PurchaseRequest<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">purchaseRequest<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> requestBody <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> String<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">format<\/span><span style=\"color: #89DDFF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;clientAccnum&quot;: %d,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;clientSubacc&quot;: %d,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;initialPrice&quot;: %.2f,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;initialPeriod&quot;: 30,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;currencyCode&quot;: %d<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                <\/span><span style=\"color: #89DDFF\">&quot;&quot;&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                purchaseRequest<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">paymentToken<\/span><span style=\"color: #89DDFF\">().<\/span><span style=\"color: #82AAFF\">clientAccnum<\/span><span style=\"color: #89DDFF\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                purchaseRequest<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">paymentToken<\/span><span style=\"color: #89DDFF\">().<\/span><span style=\"color: #82AAFF\">clientSubacc<\/span><span style=\"color: #89DDFF\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                purchaseRequest<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">amount<\/span><span style=\"color: #89DDFF\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                purchaseRequest<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">currency<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #C792EA\">HttpRequest<\/span><span style=\"color: #EEFFFF\"> request <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> HttpRequest<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">newBuilder<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">uri<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">URI<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">create<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">https:\/\/api.ccbill.com\/transactions\/payment-tokens\/<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #89DDFF\">+<\/span><span style=\"color: #EEFFFF\"> purchaseRequest<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">paymentToken<\/span><span style=\"color: #89DDFF\">().<\/span><span style=\"color: #82AAFF\">paymentTokenId<\/span><span style=\"color: #89DDFF\">()))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">header<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Accept<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">application\/vnd.mcn.transaction-service.api.v.2+json<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">header<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Authorization<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Bearer <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                    <\/span><span style=\"color: #89DDFF\">+<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">fetchOAuthToken<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">&#91;Backend_Merchant_Application_ID&#93;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">&#91;Backend_Secret_Key&#93;<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">header<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Cache-Control<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">no-cache<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">header<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Content-Type<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">application\/json<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">POST<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">HttpRequest<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">BodyPublishers<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">ofString<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">requestBody<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> StandardCharsets<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">UTF_8<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">build<\/span><span style=\"color: #89DDFF\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">HttpResponse<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #EEFFFF\"> response <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> HTTP_CLIENT<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">send<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">request<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> HttpResponse<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">BodyHandlers<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">ofString<\/span><span style=\"color: #89DDFF\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> ResponseEntity<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">ok<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">response<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">body<\/span><span style=\"color: #89DDFF\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">catch<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #C792EA\">IOException<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">|<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">InterruptedException<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">e<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            e<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">printStackTrace<\/span><span style=\"color: #89DDFF\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> ResponseEntity<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">status<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #F78C6C\">500<\/span><span style=\"color: #89DDFF\">).<\/span><span style=\"color: #82AAFF\">body<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Error processing payment<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">static<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">fetchOAuthToken<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">merchantAppId<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">sercretKey<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> credentials <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> Base64<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">getEncoder<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">encodeToString<\/span><span style=\"color: #89DDFF\">((<\/span><span style=\"color: #EEFFFF\">merchantAppId <\/span><span style=\"color: #89DDFF\">+<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">:<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">+<\/span><span style=\"color: #EEFFFF\"> sercretKey<\/span><span style=\"color: #89DDFF\">).<\/span><span style=\"color: #82AAFF\">getBytes<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">StandardCharsets<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">UTF_8<\/span><span style=\"color: #89DDFF\">));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> requestBody <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">grant_type=client_credentials<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #C792EA\">HttpRequest<\/span><span style=\"color: #EEFFFF\"> request <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> HttpRequest<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">newBuilder<\/span><span style=\"color: #89DDFF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">uri<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">URI<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">create<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">https:\/\/api.ccbill.com\/ccbill-auth\/oauth\/token<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">header<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Authorization<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Basic <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">+<\/span><span style=\"color: #EEFFFF\"> credentials<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">header<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">Content-Type<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">application\/x-www-form-urlencoded<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">POST<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">HttpRequest<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">BodyPublishers<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">ofString<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">requestBody<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> StandardCharsets<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">UTF_8<\/span><span style=\"color: #89DDFF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">build<\/span><span style=\"color: #89DDFF\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">HttpResponse<\/span><span style=\"color: #89DDFF\">&lt;<\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #89DDFF\">&gt;<\/span><span style=\"color: #EEFFFF\"> response <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> HTTP_CLIENT<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">send<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">request<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> HttpResponse<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">BodyHandlers<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">ofString<\/span><span style=\"color: #89DDFF\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">extractAccessToken<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">response<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">body<\/span><span style=\"color: #89DDFF\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">catch<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #C792EA\">IOException<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">|<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">InterruptedException<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">e<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            e<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">printStackTrace<\/span><span style=\"color: #89DDFF\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">null;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">static<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">extractAccessToken<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">responseBody<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF; font-style: italic\">try<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">ObjectMapper<\/span><span style=\"color: #EEFFFF\"> objectMapper <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">new<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">ObjectMapper<\/span><span style=\"color: #89DDFF\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #C792EA\">JsonNode<\/span><span style=\"color: #EEFFFF\"> jsonNode <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> objectMapper<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">readTree<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">responseBody<\/span><span style=\"color: #89DDFF\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> jsonNode<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">has<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">access_token<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">?<\/span><span style=\"color: #EEFFFF\"> jsonNode<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">get<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">access_token<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">).<\/span><span style=\"color: #82AAFF\">asText<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">null;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">catch<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #C792EA\">IOException<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">e<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            e<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">printStackTrace<\/span><span style=\"color: #89DDFF\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">            <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">null;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #89DDFF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">record<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">AuthTokenResponse<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> token<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">record<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">PurchaseRequest<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #C792EA\">double<\/span><span style=\"color: #EEFFFF\"> amount<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> currency<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">PaymentToken<\/span><span style=\"color: #EEFFFF\"> paymentToken<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">    <\/span><span style=\"color: #C792EA\">private<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">record<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #FFCB6B\">PaymentToken<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> paymentTokenId<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">Integer<\/span><span style=\"color: #EEFFFF\"> clientAccnum<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">Integer<\/span><span style=\"color: #EEFFFF\"> clientSubacc<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">{}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"h3\">Additional Documentation<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/ccbill.com\/doc\/error-codes\" target=\"_blank\" rel=\"noreferrer noopener\">Error Codes<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/ccbill.com\/doc\/method-reference\" target=\"_blank\" rel=\"noreferrer noopener\">CCBill Advanced Widget API Reference<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/ccbill.com\/doc\/ccbill-restful-api-resources\" target=\"_blank\" rel=\"noreferrer noopener\">CCBill RESTful API Resources<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:30%\"><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>This payment flow enables customer authentication and tokenizes their payment details, allowing you to charge...<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"kk_blocks_editor_width":"","_kiokenblocks_attr":"","_kiokenblocks_dimensions":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-9548","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Create Payment Token For Deferred Charges - CCBill Doc<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ccbill.com\/doc\/create-payment-token-for-deferred-charges\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create Payment Token For Deferred Charges - CCBill Doc\" \/>\n<meta property=\"og:description\" content=\"This payment flow enables customer authentication and tokenizes their payment details, allowing you to charge...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ccbill.com\/doc\/create-payment-token-for-deferred-charges\" \/>\n<meta property=\"og:site_name\" content=\"CCBill Doc\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-21T09:49:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-05T12:52:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ccbill.com\/doc\/wp-content\/uploads\/2022\/06\/mcn-widget-integration-3ds-sequence-diagram.png\" \/>\n\t<meta property=\"og:image:width\" content=\"750\" \/>\n\t<meta property=\"og:image:height\" content=\"553\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Vladimir Kaplarevic\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Vladimir Kaplarevic\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ccbill.com\/doc\/create-payment-token-for-deferred-charges\",\"url\":\"https:\/\/ccbill.com\/doc\/create-payment-token-for-deferred-charges\",\"name\":\"Create Payment Token For Deferred Charges - CCBill Doc\",\"isPartOf\":{\"@id\":\"https:\/\/ccbill.com\/doc\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ccbill.com\/doc\/create-payment-token-for-deferred-charges#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ccbill.com\/doc\/create-payment-token-for-deferred-charges#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ccbill.com\/doc\/wp-content\/uploads\/2022\/06\/mcn-widget-integration-3ds-sequence-diagram.png\",\"datePublished\":\"2025-02-21T09:49:20+00:00\",\"dateModified\":\"2026-02-05T12:52:18+00:00\",\"author\":{\"@id\":\"https:\/\/ccbill.com\/doc\/#\/schema\/person\/2cc5b50e34ee63ed498ac333a25840ad\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ccbill.com\/doc\/create-payment-token-for-deferred-charges\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ccbill.com\/doc\/create-payment-token-for-deferred-charges#primaryimage\",\"url\":\"https:\/\/ccbill.com\/doc\/wp-content\/uploads\/2022\/06\/mcn-widget-integration-3ds-sequence-diagram.png\",\"contentUrl\":\"https:\/\/ccbill.com\/doc\/wp-content\/uploads\/2022\/06\/mcn-widget-integration-3ds-sequence-diagram.png\",\"width\":750,\"height\":553,\"caption\":\"The sequence diagram for creating and charging payment tokens with 3DS verification.\"},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ccbill.com\/doc\/#website\",\"url\":\"https:\/\/ccbill.com\/doc\/\",\"name\":\"CCBill Doc\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ccbill.com\/doc\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/ccbill.com\/doc\/#\/schema\/person\/2cc5b50e34ee63ed498ac333a25840ad\",\"name\":\"Vladimir Kaplarevic\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ccbill.com\/doc\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8d4609e99e6aecc69ce049e18d45f033?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8d4609e99e6aecc69ce049e18d45f033?s=96&d=mm&r=g\",\"caption\":\"Vladimir Kaplarevic\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Create Payment Token For Deferred Charges - CCBill Doc","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ccbill.com\/doc\/create-payment-token-for-deferred-charges","og_locale":"en_US","og_type":"article","og_title":"Create Payment Token For Deferred Charges - CCBill Doc","og_description":"This payment flow enables customer authentication and tokenizes their payment details, allowing you to charge...","og_url":"https:\/\/ccbill.com\/doc\/create-payment-token-for-deferred-charges","og_site_name":"CCBill Doc","article_published_time":"2025-02-21T09:49:20+00:00","article_modified_time":"2026-02-05T12:52:18+00:00","og_image":[{"width":750,"height":553,"url":"https:\/\/ccbill.com\/doc\/wp-content\/uploads\/2022\/06\/mcn-widget-integration-3ds-sequence-diagram.png","type":"image\/png"}],"author":"Vladimir Kaplarevic","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Vladimir Kaplarevic","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/ccbill.com\/doc\/create-payment-token-for-deferred-charges","url":"https:\/\/ccbill.com\/doc\/create-payment-token-for-deferred-charges","name":"Create Payment Token For Deferred Charges - CCBill Doc","isPartOf":{"@id":"https:\/\/ccbill.com\/doc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ccbill.com\/doc\/create-payment-token-for-deferred-charges#primaryimage"},"image":{"@id":"https:\/\/ccbill.com\/doc\/create-payment-token-for-deferred-charges#primaryimage"},"thumbnailUrl":"https:\/\/ccbill.com\/doc\/wp-content\/uploads\/2022\/06\/mcn-widget-integration-3ds-sequence-diagram.png","datePublished":"2025-02-21T09:49:20+00:00","dateModified":"2026-02-05T12:52:18+00:00","author":{"@id":"https:\/\/ccbill.com\/doc\/#\/schema\/person\/2cc5b50e34ee63ed498ac333a25840ad"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ccbill.com\/doc\/create-payment-token-for-deferred-charges"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ccbill.com\/doc\/create-payment-token-for-deferred-charges#primaryimage","url":"https:\/\/ccbill.com\/doc\/wp-content\/uploads\/2022\/06\/mcn-widget-integration-3ds-sequence-diagram.png","contentUrl":"https:\/\/ccbill.com\/doc\/wp-content\/uploads\/2022\/06\/mcn-widget-integration-3ds-sequence-diagram.png","width":750,"height":553,"caption":"The sequence diagram for creating and charging payment tokens with 3DS verification."},{"@type":"WebSite","@id":"https:\/\/ccbill.com\/doc\/#website","url":"https:\/\/ccbill.com\/doc\/","name":"CCBill Doc","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ccbill.com\/doc\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/ccbill.com\/doc\/#\/schema\/person\/2cc5b50e34ee63ed498ac333a25840ad","name":"Vladimir Kaplarevic","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ccbill.com\/doc\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8d4609e99e6aecc69ce049e18d45f033?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8d4609e99e6aecc69ce049e18d45f033?s=96&d=mm&r=g","caption":"Vladimir Kaplarevic"}}]}},"_links":{"self":[{"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/posts\/9548"}],"collection":[{"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/comments?post=9548"}],"version-history":[{"count":45,"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/posts\/9548\/revisions"}],"predecessor-version":[{"id":11310,"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/posts\/9548\/revisions\/11310"}],"wp:attachment":[{"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/media?parent=9548"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/categories?post=9548"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/tags?post=9548"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}