{"id":9542,"date":"2025-02-21T09:49:46","date_gmt":"2025-02-21T09:49:46","guid":{"rendered":"https:\/\/ccbill.com\/doc\/?p=9542"},"modified":"2026-02-05T12:44:30","modified_gmt":"2026-02-05T12:44:30","slug":"authenticate-customer-and-create-token-in-one-step","status":"publish","type":"post","link":"https:\/\/ccbill.com\/doc\/authenticate-customer-and-create-token-in-one-step","title":{"rendered":"Authenticate Customer and Create Payment Token in One Step"},"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:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>This flow allows you to authenticate customers and tokenize their payment details in a single step. Use this option to reduce the overall number of API calls to CCBill's RESTful API and minimize system overhead.<\/p>\n\n\n\n<p>The following 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 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> that&nbsp;includes&nbsp;a&nbsp;client&nbsp;account&nbsp;number&nbsp;and&nbsp;two&nbsp;subaccounts&nbsp;used&nbsp;to&nbsp;generate&nbsp;payment&nbsp;tokens&nbsp;for&nbsp;3DS&nbsp;and&nbsp;non-3DS&nbsp;transactions.<\/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<h3 class=\"wp-block-heading\" id=\"one-step-payment-flow\">The Payment Flow<\/h3>\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 simultaneously perform a 3DS check on customer payment details and generate a payment token:<\/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 a payment token in a single step.<\/li>\n\n\n\n<li>Use the payment token, authentication results, 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=\"one-step-include-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.<\/strong>1. 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=\"one-step-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>(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\n\n\n<li>Use custom ID attributes (requires additional mapping).<\/li>\n<\/ul>\n\n\n\n<div id=\"kioken-tabs__4b54ca-54\" 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=\"amount\" \/> \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>\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>\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\">amount<\/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 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\">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_amount\" \/>\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_amount<\/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_amount_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    amount: \"custom_amount_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>\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_amount_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\">amount<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">custom_amount_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-0\"><\/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-1\" 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>amount<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Yes<\/td><td>Transaction total. Should be value greater than <strong>0<\/strong>.<\/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>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=\"one-step-oauth-token\">3. Generate CCBill 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 Application ID<\/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__bf9703-ed\" 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 a frontend 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=\"one-step-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 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_3DS_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_3DS_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-exiting-token\" class=\"kioken-accordion-item-heading\"><span class=\"kioken-accordion-item-label\"><strong>Alternative: Check If 3DS Is Required Based on Exiting 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 (Payment Token ID) 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 necessary. This ensures better user experience and compliance with SCA regulations.<\/li>\n\n\n\n<li>If validation fails (e.g., invalid credentials), the response shows 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<h3 class=\"wp-block-heading\" id=\"one-step-authenticate\">5. Authenticate and Create Payment Token in One Step<\/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-5\" target=\"_blank\" rel=\"noreferrer noopener\">authenticateCustomerAndCreatePaymentToken()<\/a> function combines 3DS authentication and payment token creation in a single call. This integration simplifies the workflow by:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Initiating Strong Customer Authentication (SCA) through the 3DS flow.<\/li>\n\n\n\n<li>Generating a reusable Payment Token for the authenticated customer.<\/li>\n\n\n\n<li>Returning an object containing both the 3DS authentication results and the Payment Token.<\/li>\n<\/ul>\n\n\n\n<p>Merchants can use this flow for card-present transactions where the charge amount is known upfront, such as in-session web payments.<\/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 authenticateCustomerAndCreatePaymentToken() {\n    const widget = new ccbill.CCBillAdvancedWidget('your-application-id');\n    return await widget.authenticateCustomerAndCreatePaymentToken(\n    \"&#91;Frondent_Access_Token&#93;\",\n    &#91;Your_Client_Account_Number&#93;, \n    &#91;Your_3DS_Client_Subaccount_Number&#93;);\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\">authenticateCustomerAndCreatePaymentToken<\/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: #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\">authenticateCustomerAndCreatePaymentToken<\/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>\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_3DS_Client_Subaccount_Number<\/span><span style=\"color: #F07178\">&#93;)<\/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 automatically handles 3DS authentication and Payment Token generation:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A successful authentication returns an object with two parts: the result of the 3DS authentication process and Payment Token details. <\/li>\n\n\n\n<li>If the process fails, the response includes error details to help troubleshoot 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<h3 class=\"wp-block-heading\" id=\"one-step-charge-token\">6. Charge Payment Token (3DS)<\/h3>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>After you receive a <strong>payment token ID<\/strong>, generate a new<strong> backend bearer token<\/strong> using your Base64 encoded backend credentials. Then, use both tokens to charge the customer's credit card. This step finalizes the transaction.<\/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 style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div id=\"kioken-tabs__cde926-c7\" 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\/threeds\/&#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\": 978,\n    \"threedsEci\": \"05\",\n    \"threedsStatus\": \"Y\",\n    \"threedsSuccess\": true,\n    \"threedsVersion\": \"2.2.0\",\n    \"threedsAmount\": 9.99,\n    \"threedsClientTransactionId\": \"id-wl9r6duc5zj\",\n    \"threedsCurrency\": \"840\",\n    \"threedsSdkTransId\": \"d535b6d1-19f9-11f0-92b9-0242ac110005\",\n    \"threedsAcsTransId\": \"ca5f9649-b865-47ce-be6f-54422a0fce47\",\n    \"threedsDsTransId\": \"e3693b86-8217-48c6-9628-2e8852dc60d4\",\n    \"threedsAuthenticationType\": \"\",\n    \"threedsAuthenticationValue\": \"Pes4aJnpT+1mjhUoBynC92iQbeg=\"\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\/threeds\/&#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;: 978,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">    &quot;threedsEci&quot;: &quot;05&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">    &quot;threedsStatus&quot;: &quot;Y&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">    &quot;threedsSuccess&quot;: true,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">    &quot;threedsVersion&quot;: &quot;2.2.0&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">    &quot;threedsAmount&quot;: 9.99,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">    &quot;threedsClientTransactionId&quot;: &quot;id-wl9r6duc5zj&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">    &quot;threedsCurrency&quot;: &quot;840&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">    &quot;threedsSdkTransId&quot;: &quot;d535b6d1-19f9-11f0-92b9-0242ac110005&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">    &quot;threedsAcsTransId&quot;: &quot;ca5f9649-b865-47ce-be6f-54422a0fce47&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">    &quot;threedsDsTransId&quot;: &quot;e3693b86-8217-48c6-9628-2e8852dc60d4&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">    &quot;threedsAuthenticationType&quot;: &quot;&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">    &quot;threedsAuthenticationValue&quot;: &quot;Pes4aJnpT+1mjhUoBynC92iQbeg=&quot;<\/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> processPurchase3ds() {\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\": 978,\n            \"threedsEci\": \"05\",\n            \"threedsStatus\": \"Y\",\n            \"threedsSuccess\": true,\n            \"threedsVersion\": \"2.2.0\",\n            \"threedsAmount\": 9.99,\n            \"threedsClientTransactionId\": \"id-wl9r6duc5zj\",\n            \"threedsCurrency\": \"840\",\n            \"threedsSdkTransId\": \"d535b6d1-19f9-11f0-92b9-0242ac110005\",\n            \"threedsAcsTransId\": \"ca5f9649-b865-47ce-be6f-54422a0fce47\",\n            \"threedsDsTransId\": \"e3693b86-8217-48c6-9628-2e8852dc60d4\",\n            \"threedsAuthenticationType\": \"\",\n            \"threedsAuthenticationValue\": \"Pes4aJnpT+1mjhUoBynC92iQbeg=\"\n        }\"\"\";\n\n    HttpRequest request = HttpRequest.newBuilder()\n            .uri(URI.create(\"https:\/\/api.ccbill.com\/transactions\/payment-tokens\/threeds\/&#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\">processPurchase3ds<\/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;: 978,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">            &quot;threedsEci&quot;: &quot;05&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">            &quot;threedsStatus&quot;: &quot;Y&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">            &quot;threedsSuccess&quot;: true,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">            &quot;threedsVersion&quot;: &quot;2.2.0&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">            &quot;threedsAmount&quot;: 9.99,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">            &quot;threedsClientTransactionId&quot;: &quot;id-wl9r6duc5zj&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">            &quot;threedsCurrency&quot;: &quot;840&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">            &quot;threedsSdkTransId&quot;: &quot;d535b6d1-19f9-11f0-92b9-0242ac110005&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">            &quot;threedsAcsTransId&quot;: &quot;ca5f9649-b865-47ce-be6f-54422a0fce47&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">            &quot;threedsDsTransId&quot;: &quot;e3693b86-8217-48c6-9628-2e8852dc60d4&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">            &quot;threedsAuthenticationType&quot;: &quot;&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">            &quot;threedsAuthenticationValue&quot;: &quot;Pes4aJnpT+1mjhUoBynC92iQbeg=&quot;<\/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\/threeds\/&#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 processPurchase3ds() {\n    $url = \"https:\/\/api.ccbill.com\/transactions\/payment-tokens\/threeds\/&#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        \"threedsEci\" => \"05\",\n        \"threedsStatus\" => \"Y\",\n        \"threedsSuccess\" => true,\n        \"threedsVersion\" => \"2.2.0\",\n        \"threedsAmount\" => 9.99,\n        \"threedsClientTransactionId\" => \"id-wl9r6duc5zj\",\n        \"threedsCurrency\" => \"840\",\n        \"threedsSdkTransId\" => \"d535b6d1-19f9-11f0-92b9-0242ac110005\",\n        \"threedsAcsTransId\" => \"ca5f9649-b865-47ce-be6f-54422a0fce47\",\n        \"threedsDsTransId\" => \"e3693b86-8217-48c6-9628-2e8852dc60d4\",\n        \"threedsAuthenticationType\" => \"\",\n        \"threedsAuthenticationValue\" => \"Pes4aJnpT+1mjhUoBynC92iQbeg=\"\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\">processPurchase3ds<\/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\/threeds\/&#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\">threedsEci<\/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\">05<\/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\">threedsStatus<\/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\">Y<\/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\">threedsSuccess<\/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\">true,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">threedsVersion<\/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\">2.2.0<\/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\">threedsAmount<\/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\">threedsClientTransactionId<\/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\">id-wl9r6duc5zj<\/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\">threedsCurrency<\/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\">840<\/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\">threedsSdkTransId<\/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\">d535b6d1-19f9-11f0-92b9-0242ac110005<\/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\">threedsAcsTransId<\/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\">ca5f9649-b865-47ce-be6f-54422a0fce47<\/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\">threedsDsTransId<\/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\">e3693b86-8217-48c6-9628-2e8852dc60d4<\/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\">threedsAuthenticationType<\/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;&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\">threedsAuthenticationValue<\/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\">Pes4aJnpT+1mjhUoBynC92iQbeg=<\/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>\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 server returns a standard response with the transaction status:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A successful response includes the transaction details, such as the amount, transaction ID, and status.<\/li>\n\n\n\n<li>A failed request includes an <a href=\"https:\/\/ccbill.com\/doc\/error-codes\" target=\"_blank\" rel=\"noreferrer noopener\">error code<\/a> and explanation for the error (e.g., 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<h2 class=\"wp-block-heading\" id=\"one-step-full-example\">Full Integration Example (Authenticate and Create Token)<\/h2>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>To simplify the 3DS transaction flow, the example below shows how to authenticate a customer and create a Payment Token using the above steps. The example uses:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A JavaScript frontend to initialize the widget, collect payment and customer data, and trigger 3DS authentication.<\/li>\n\n\n\n<li>A Java backend to generate a bearer token, receive Payment Token request, and create a 3DS-ready Payment Token using the provided data.<\/li>\n<\/ul>\n\n\n\n<p>All placeholder values should be replaced with the actual client account number, subaccount number, bearer token, and 3DS credentials.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div id=\"kioken-tabs__68c006-f8\" 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 checkIfScaRequired(widget, authToken, clientAccnum, clientSubacc) {\n    const scaRequiredResponse = await widget.isScaRequired(authToken, clientAccnum, clientSubacc);\n    return await scaRequiredResponse.json();\n}\n\nasync function authenticateCustomerAndCreatePaymentToken(widget, authToken, clientAccnum, clientSubacc) {\n    return await widget.authenticateCustomerAndCreatePaymentToken(authToken, clientAccnum, clientSubacc);\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 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}\n\nasync function chargePaymentToken3ds(paymentToken, threedsInformation) {\n    return await (await (fetch('https:\/\/your-website.com\/api\/purchase-3ds', {\n        method: 'POST',\n        headers: {\n            'Content-Type': 'application\/json'\n        },\n        body: JSON.stringify({\n            paymentToken,\n            threedsInformation,\n            amount: 9.99,\n            currency: 840\n        })\n    }))).json();\n}\n\nasync function authenticateAndPurchase() {\n    const widget = new ccbill.CCBillAdvancedWidget('your-application-id');\n    const clientAccnum = &#91;Your_Client_Account_Number&#93;;\n    const clientSubacc = &#91;Your_3DS_Client_Subaccount_Number&#93;;\n\n\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\n\n        let chargeCallResponse;\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 object will hold both payment token and SCA results,\n            \/\/ which should be submitted to merchant owned endpoint and charged \n            \/\/\/ via \/transactions\/payment-tokens\/threeds\/{paymentTokenId}.\n            const response = await authenticateCustomerAndCreatePaymentToken(widget, \n                authToken, clientAccnum, clientSubacc);\n            \/\/ submit the payment token and 3DS information to the back-end endpoint implementing \n            \/\/ charging of the token\n            chargeCallResponse = await chargePaymentToken3ds(response.paymentToken, response.threedsInformation);\n        } else {\n            \/\/ create the payment token to be submitted to the merchant owned endpoint\n            \/\/ and charged via \/transactions\/payment-tokens\/{paymentTokenId}.\n            const paymentToken = await createPaymentToken(widget, authToken, clientAccnum, &#91;Your_Client_Subaccount_Number&#93;);\n            \/\/ submit the payment token to be charged to an endpoint implementing backend charging of the token\n            chargeCallResponse = await chargePaymentToken(paymentToken);\n        }\n        \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 authenticateAndPurchase();<\/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\">checkIfScaRequired<\/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\">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 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\">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>\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\">authenticateCustomerAndCreatePaymentToken<\/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\">authenticateCustomerAndCreatePaymentToken<\/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\">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\">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>\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\">chargePaymentToken3ds<\/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: #EEFFFF; font-style: italic\">threedsInformation<\/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-3ds<\/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\">            <\/span><span style=\"color: #EEFFFF\">threedsInformation<\/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>\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\">authenticateAndPurchase<\/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_3DS_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>\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>\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\">chargeCallResponse<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/span><\/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 object will hold both payment token and SCA results,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">            <\/span><span style=\"color: #546E7A; font-style: italic\">\/\/ which should be submitted to merchant owned endpoint and charged <\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">            <\/span><span style=\"color: #546E7A; font-style: italic\">\/\/\/ via \/transactions\/payment-tokens\/threeds\/{paymentTokenId}.<\/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\">response<\/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\">authenticateCustomerAndCreatePaymentToken<\/span><span style=\"color: #F07178\">(<\/span><span style=\"color: #EEFFFF\">widget<\/span><span style=\"color: #89DDFF\">,<\/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 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 style=\"color: #546E7A; font-style: italic\">\/\/ submit the payment token and 3DS information to the back-end endpoint implementing <\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">            <\/span><span style=\"color: #546E7A; font-style: italic\">\/\/ charging of the token<\/span><\/span>\n<span class=\"line\"><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\">chargePaymentToken3ds<\/span><span style=\"color: #F07178\">(<\/span><span style=\"color: #EEFFFF\">response<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">paymentToken<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #EEFFFF\">response<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #EEFFFF\">threedsInformation<\/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 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: #C792EA\">const<\/span><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\"> &#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: #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: #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\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">        <\/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: #EEFFFF\">error<\/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\">authenticateAndPurchase<\/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    @PostMapping(\"\/purchase-3ds\")\n    public ResponseEntity&lt;String> processPurchase3ds(@RequestBody PurchaseRequest3ds purchaseRequest3ds) {\n        String requestBody = String.format(\n                \"\"\"\n                {\n                  \"clientAccnum\": %d,\n                  \"clientSubacc\": %d,\n                  \"initialPrice\": %.2f,\n                  \"initialPeriod\": 10,\n                  \"currencyCode\": \"%s\",\n                  \"threedsEci\": \"%s\",\n                  \"threedsStatus\": \"%s\",\n                  \"threedsSuccess\": %b,\n                  \"threedsVersion\": \"%s\",\n                  \"threedsAmount\": %.2f,\n                  \"threedsClientTransactionId\": \"%s\",\n                  \"threedsCurrency\": \"%s\",\n                  \"threedsSdkTransId\": \"%s\",\n                  \"threedsAcsTransId\": \"%s\",\n                  \"threedsDsTransId\": \"%s\",\n                  \"threedsAuthenticationType\": \"%s\",\n                  \"threedsAuthenticationValue\": \"%s\"\n                }\n                \"\"\",\n                purchaseRequest3ds.paymentToken().clientAccnum(),\n                purchaseRequest3ds.paymentToken().clientSubacc(),\n                purchaseRequest3ds.amount(),\n                purchaseRequest3ds.currency(),\n                purchaseRequest3ds.threedsInformation().eci(),\n                purchaseRequest3ds.threedsInformation().status(),\n                purchaseRequest3ds.threedsInformation().success(),\n                purchaseRequest3ds.threedsInformation().protocolVersion(),\n                purchaseRequest3ds.threedsInformation().amount(),\n                purchaseRequest3ds.threedsInformation().clientTransactionId(),\n                purchaseRequest3ds.threedsInformation().currency(),\n                purchaseRequest3ds.threedsInformation().sdkTransId(),\n                purchaseRequest3ds.threedsInformation().acsTransId(),\n                purchaseRequest3ds.threedsInformation().dsTransId(),\n                purchaseRequest3ds.threedsInformation().authenticationType(),\n                purchaseRequest3ds.threedsInformation().authenticationValue()\n        );\n\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(\"https:\/\/api.ccbill.com\/transactions\/payment-tokens\/threeds\/\"\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 PurchaseRequest3ds(double amount, String currency, PaymentToken paymentToken, \n        ThreedsInformation threedsInformation) {}\n    private record PaymentToken(String paymentTokenId, Integer clientAccnum, Integer clientSubacc) {}\n    private record ThreedsInformation(String eci, String status, boolean success, String protocolVersion, \n        double amount, String clientTransactionId, String currency, String sdkTransId, String acsTransId, \n        String dsTransId, String authenticationType, String authenticationValue) {}\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 style=\"color: #EEFFFF\">    <\/span><\/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: #89DDFF\">@<\/span><span style=\"color: #C792EA\">PostMapping<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">\/purchase-3ds<\/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\">processPurchase3ds<\/span><span style=\"color: #89DDFF\">(@<\/span><span style=\"color: #C792EA\">RequestBody<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">PurchaseRequest3ds<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">purchaseRequest3ds<\/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;: 10,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;currencyCode&quot;: &quot;%s&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;threedsEci&quot;: &quot;%s&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;threedsStatus&quot;: &quot;%s&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;threedsSuccess&quot;: %b,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;threedsVersion&quot;: &quot;%s&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;threedsAmount&quot;: %.2f,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;threedsClientTransactionId&quot;: &quot;%s&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;threedsCurrency&quot;: &quot;%s&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;threedsSdkTransId&quot;: &quot;%s&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;threedsAcsTransId&quot;: &quot;%s&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;threedsDsTransId&quot;: &quot;%s&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;threedsAuthenticationType&quot;: &quot;%s&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C3E88D\">                  &quot;threedsAuthenticationValue&quot;: &quot;%s&quot;<\/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\">                purchaseRequest3ds<\/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\">                purchaseRequest3ds<\/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\">                purchaseRequest3ds<\/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\">                purchaseRequest3ds<\/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\">                purchaseRequest3ds<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">threedsInformation<\/span><span style=\"color: #89DDFF\">().<\/span><span style=\"color: #82AAFF\">eci<\/span><span style=\"color: #89DDFF\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                purchaseRequest3ds<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">threedsInformation<\/span><span style=\"color: #89DDFF\">().<\/span><span style=\"color: #82AAFF\">status<\/span><span style=\"color: #89DDFF\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                purchaseRequest3ds<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">threedsInformation<\/span><span style=\"color: #89DDFF\">().<\/span><span style=\"color: #82AAFF\">success<\/span><span style=\"color: #89DDFF\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                purchaseRequest3ds<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">threedsInformation<\/span><span style=\"color: #89DDFF\">().<\/span><span style=\"color: #82AAFF\">protocolVersion<\/span><span style=\"color: #89DDFF\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                purchaseRequest3ds<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">threedsInformation<\/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\">                purchaseRequest3ds<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">threedsInformation<\/span><span style=\"color: #89DDFF\">().<\/span><span style=\"color: #82AAFF\">clientTransactionId<\/span><span style=\"color: #89DDFF\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                purchaseRequest3ds<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">threedsInformation<\/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\">                purchaseRequest3ds<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">threedsInformation<\/span><span style=\"color: #89DDFF\">().<\/span><span style=\"color: #82AAFF\">sdkTransId<\/span><span style=\"color: #89DDFF\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                purchaseRequest3ds<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">threedsInformation<\/span><span style=\"color: #89DDFF\">().<\/span><span style=\"color: #82AAFF\">acsTransId<\/span><span style=\"color: #89DDFF\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                purchaseRequest3ds<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">threedsInformation<\/span><span style=\"color: #89DDFF\">().<\/span><span style=\"color: #82AAFF\">dsTransId<\/span><span style=\"color: #89DDFF\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                purchaseRequest3ds<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">threedsInformation<\/span><span style=\"color: #89DDFF\">().<\/span><span style=\"color: #82AAFF\">authenticationType<\/span><span style=\"color: #89DDFF\">(),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">                purchaseRequest3ds<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">threedsInformation<\/span><span style=\"color: #89DDFF\">().<\/span><span style=\"color: #82AAFF\">authenticationValue<\/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\/threeds\/<\/span><span style=\"color: #89DDFF\">&quot;<\/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\">PurchaseRequest3ds<\/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>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #C792EA\">ThreedsInformation<\/span><span style=\"color: #EEFFFF\"> threedsInformation<\/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: #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\">ThreedsInformation<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> eci<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> status<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">boolean<\/span><span style=\"color: #EEFFFF\"> success<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> protocolVersion<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/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\"> clientTransactionId<\/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\">String<\/span><span style=\"color: #EEFFFF\"> sdkTransId<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> acsTransId<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #EEFFFF\">        <\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> dsTransId<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> authenticationType<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #C792EA\">String<\/span><span style=\"color: #EEFFFF\"> authenticationValue<\/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:20px\" 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<p><a href=\"https:\/\/ccbill.com\/doc\/ccbill-restful-api-resources\" target=\"_blank\" rel=\"noreferrer noopener\">CCBill RESTful API Resources<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/ccbill.com\/doc\/error-codes\" target=\"_blank\" rel=\"noreferrer noopener\">Error Codes<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/ccbill.com\/doc\/method-reference\" target=\"_blank\" rel=\"noreferrer noopener\">CCBill Advanced Widget API Reference<\/a><\/p>\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\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This flow allows you to authenticate customers and tokenize their payment details in a single...<\/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-9542","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>Authenticate Customer and Create Payment Token in One Step - 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\/authenticate-customer-and-create-token-in-one-step\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Authenticate Customer and Create Payment Token in One Step - CCBill Doc\" \/>\n<meta property=\"og:description\" content=\"This flow allows you to authenticate customers and tokenize their payment details in a single...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ccbill.com\/doc\/authenticate-customer-and-create-token-in-one-step\" \/>\n<meta property=\"og:site_name\" content=\"CCBill Doc\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-21T09:49:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-05T12:44:30+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\/authenticate-customer-and-create-token-in-one-step\",\"url\":\"https:\/\/ccbill.com\/doc\/authenticate-customer-and-create-token-in-one-step\",\"name\":\"Authenticate Customer and Create Payment Token in One Step - CCBill Doc\",\"isPartOf\":{\"@id\":\"https:\/\/ccbill.com\/doc\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ccbill.com\/doc\/authenticate-customer-and-create-token-in-one-step#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ccbill.com\/doc\/authenticate-customer-and-create-token-in-one-step#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ccbill.com\/doc\/wp-content\/uploads\/2022\/06\/mcn-widget-integration-3ds-sequence-diagram.png\",\"datePublished\":\"2025-02-21T09:49:46+00:00\",\"dateModified\":\"2026-02-05T12:44:30+00:00\",\"author\":{\"@id\":\"https:\/\/ccbill.com\/doc\/#\/schema\/person\/2cc5b50e34ee63ed498ac333a25840ad\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ccbill.com\/doc\/authenticate-customer-and-create-token-in-one-step\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ccbill.com\/doc\/authenticate-customer-and-create-token-in-one-step#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":"Authenticate Customer and Create Payment Token in One Step - 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\/authenticate-customer-and-create-token-in-one-step","og_locale":"en_US","og_type":"article","og_title":"Authenticate Customer and Create Payment Token in One Step - CCBill Doc","og_description":"This flow allows you to authenticate customers and tokenize their payment details in a single...","og_url":"https:\/\/ccbill.com\/doc\/authenticate-customer-and-create-token-in-one-step","og_site_name":"CCBill Doc","article_published_time":"2025-02-21T09:49:46+00:00","article_modified_time":"2026-02-05T12:44:30+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\/authenticate-customer-and-create-token-in-one-step","url":"https:\/\/ccbill.com\/doc\/authenticate-customer-and-create-token-in-one-step","name":"Authenticate Customer and Create Payment Token in One Step - CCBill Doc","isPartOf":{"@id":"https:\/\/ccbill.com\/doc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ccbill.com\/doc\/authenticate-customer-and-create-token-in-one-step#primaryimage"},"image":{"@id":"https:\/\/ccbill.com\/doc\/authenticate-customer-and-create-token-in-one-step#primaryimage"},"thumbnailUrl":"https:\/\/ccbill.com\/doc\/wp-content\/uploads\/2022\/06\/mcn-widget-integration-3ds-sequence-diagram.png","datePublished":"2025-02-21T09:49:46+00:00","dateModified":"2026-02-05T12:44:30+00:00","author":{"@id":"https:\/\/ccbill.com\/doc\/#\/schema\/person\/2cc5b50e34ee63ed498ac333a25840ad"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ccbill.com\/doc\/authenticate-customer-and-create-token-in-one-step"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ccbill.com\/doc\/authenticate-customer-and-create-token-in-one-step#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\/9542"}],"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=9542"}],"version-history":[{"count":40,"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/posts\/9542\/revisions"}],"predecessor-version":[{"id":11308,"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/posts\/9542\/revisions\/11308"}],"wp:attachment":[{"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/media?parent=9542"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/categories?post=9542"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/tags?post=9542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}