{"id":9016,"date":"2024-06-10T15:15:35","date_gmt":"2024-06-10T15:15:35","guid":{"rendered":"https:\/\/ccbill.com\/doc\/?post_type=tjspw&#038;p=9016"},"modified":"2024-10-04T13:29:40","modified_gmt":"2024-10-04T13:29:40","slug":"react","status":"publish","type":"tjspw","link":"https:\/\/ccbill.com\/doc\/tjspw\/react","title":{"rendered":"React"},"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:50%\">\n<div class=\"content\">\n   <h2>React<\/h2>\n   <p>Complete the following steps to integrate the Payment Widget into your React application.<\/p>\n   <article>\n      <h3><span class=\"dropcap\">1.<\/span> Installation and Setup<\/h3>\n      <p class=\"highlight\" data-target=\"r-script-import1\">To use the widget, add a <code>&lt;script&gt;<\/code> import in the header of the main <code>index.html<\/code> file.<\/p>\n      <p>The Payment Widget HTML tag, <code>ccb-payment-widget<\/code>, is a non-standard element, and you must tell the React app to use this element:<\/p>\n      <p class=\"highlight\" data-target=\"r-global-type\">1. Declare a global type using the <code>declare global<\/code> block.<br><br>\n         2. Create the <code>JSX<\/code> namespace.<br><br>\n         3. Add an <code>IntrinsicElements<\/code> interface.<br><br>\n         4. Define a property in the interface corresponding to the element's name and specify its accepted props.\n      <\/p>\n   <\/article>\n   <article>\n      <h3><span class=\"dropcap\">2.<\/span> Usage<\/h3>\n      <p>The React application is now aware of the custom element in the template of the <code>App.tsx<\/code> component.<br>\n         <br>There are two ways to add the widget element to the template file:\n      <\/p>\n      <p><strong>Standard HTML Element<\/strong><\/p>\n      <p><code class=\"snippet-small\">&lt;div&gt;\n         &lt;ccb-payment-widget&gt;&lt;\/ccb-payment-widget&gt;\n         &lt;\/div&gt;<\/code>\n      <\/p>\n      <p><strong>HTML Element with Self-closing Tags<\/strong><\/p>\n      <code class=\"snippet-small\">&lt;div&gt;\n      &lt;ccb-payment-widget \/&gt;\n      &lt;\/div&gt;<\/code><\/p>\n      <p>The React application is now consuming the widget. However, the required configuration is still missing.<\/p>\n      <p class=\"highlight\" data-target=\"r-define-values\">Define the constants and their values by adding the appropriate attributes to the widget tag in the <code>App.tsx<\/code> template.<\/p>\n      <p><strong>Attributes<\/strong><\/p>\n      <div id=\"kioken-tabs__6042dd-98\" class=\"wp-block-kioken-tabs\" data-tab-active=\"tab-required\">\n         <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-required\" class=\"kioken-tabs-buttons-item\">Required<\/a><a style=\"padding:10px 20px 10px 20px;margin:0px 5px -1px 0px\" href=\"#tab-optional\" class=\"kioken-tabs-buttons-item\">Optional<\/a><\/div>\n         <div class=\"kioken-tabs-content\" style=\"padding:20px 20px 20px 20px\">\n            \n            <div class=\"wp-block-kioken-tab\" data-tab=\"tab-required\">\n               \n               <figure class=\"wp-block-table has-small-font-size is-style-stripes\">\n                  <table class=\"has-white-background-color has-background has-fixed-layout\">\n                     <thead>\n                        <tr>\n                           <th class=\"has-text-align-left\" data-align=\"left\">PARAMETER<\/th>\n                           <th class=\"has-text-align-center\" data-align=\"center\"><\/th>\n                        <\/tr>\n                     <\/thead>\n                     <tbody>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><strong>apiKey<\/strong><\/td>\n                           <td class=\"has-text-align-center\" data-align=\"center\">string<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\">A valid OAuth token generated using the merchant application ID and the secret key asigned to the client account involved in the transaction.<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><strong>clientAccount<\/strong><\/td>\n                           <td class=\"has-text-align-center\" data-align=\"center\">string<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\">Merchant account number.<br>The value must be in the range between <strong>900000<\/strong> and <strong>999999<\/strong>.<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><strong>subAccount<\/strong><\/td>\n                           <td class=\"has-text-align-center\" data-align=\"center\">string<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\">Merchant subaccount number. <br>The value must be in the range between <strong>0<\/strong> and <strong>9999<\/strong>.<\/td>\n                           <td class=\"has-text-align-center\" data-align=\"center\"><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><strong>currency<\/strong><\/td>\n                           <td class=\"has-text-align-center\" data-align=\"center\">string<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\">Currency used for this transaction. <br>Accepted values: <strong>USD<\/strong> \/ <strong>GBP<\/strong> \/ <strong>EUR<\/strong> \/ <strong>CAD<\/strong> \/ <strong>AUD<\/strong> \/ <strong>JPY<\/strong><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><strong>initialPrice<\/strong><\/td>\n                           <td class=\"has-text-align-center\" data-align=\"center\">string<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\">This is the initial transaction price. <br>Formatted as a float value up to 2 decimal points, e.g., <strong>5.00<\/strong><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><strong>initialPeriod<\/strong><\/td>\n                           <td class=\"has-text-align-center\" data-align=\"center\">string<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\">The length (in days) of the initial billing.<br>Formatted as an integer value, e.g., <strong>5<\/strong><br><strong>NOTE:<\/strong> Set to <strong>0<\/strong> in case of a single and non-recurring transaction.<\/td>\n                        <\/tr>\n                     <\/tbody>\n                  <\/table>\n               <\/figure>\n               \n            <\/div>\n            \n            \n            <div class=\"wp-block-kioken-tab\" data-tab=\"tab-optional\">\n               \n               <figure class=\"wp-block-table has-small-font-size is-style-stripes\">\n                  <table class=\"has-white-background-color has-background has-fixed-layout\">\n                     <thead>\n                        <tr>\n                           <th class=\"has-text-align-left\" data-align=\"left\">PARAMETER<\/th>\n                           <th class=\"has-text-align-center\" data-align=\"center\"><\/th>\n                        <\/tr>\n                     <\/thead>\n                     <tbody>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><strong>language<\/strong><\/td>\n                           <td class=\"has-text-align-center\" data-align=\"center\">string<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\">The language the widget will be rendered in.<br>Accepted values: <strong>en<\/strong> \/ <strong>es<\/strong> \/ <strong>fr<\/strong> \/ <strong>de<\/strong> \/ <strong>it<\/strong> \/<strong> ja<\/strong> \/ <strong>ko<\/strong> \/ <strong>zh_tw<\/strong> \/ <strong>zh_cn<\/strong> \/ <strong>pt_br<\/strong> \/ <strong>hi<\/strong> \/ <strong>sv<\/strong> \/ <strong>da<\/strong> \/<strong> no<\/strong> \/ <strong>nl<\/strong><br><br><strong>NOTE:<\/strong> If the language is not supplied or the supplied language is not supported, the widget will try to determine the language from the browser. If that language is not supported, it will default to <strong>English<\/strong>.<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><strong>theme<\/strong><\/td>\n                           <td class=\"has-text-align-center\" data-align=\"center\">string<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\">The theme the widget will be loaded in.<br>Accepted values are <strong>ccb-light<\/strong> and <strong>ccb-dark<\/strong><br><br><strong>NOTE:<\/strong> If the value is not supplied or is invalid, the system will default to <strong>ccb-light<\/strong>.<br>Custom themes are possible; please refer to the theming documentation.<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><strong>description<\/strong><\/td>\n                           <td class=\"has-text-align-center\" data-align=\"center\">string<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\">Optional product description to show in the widget.<br>Up to 500 characters (no HTML\/images allowed).<\/td>\n                           <td class=\"has-text-align-center\" data-align=\"center\"><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><strong><strong>lifeTimeSubscription<\/strong><\/strong><\/td>\n                           <td class=\"has-text-align-center\" data-align=\"center\">string<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\">Indicates whether the transaction is a lifetime subscription or not.<br>Formatted as boolean value <strong>1<\/strong> or <strong>0<\/strong><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><strong>rebills<\/strong><\/td>\n                           <td class=\"has-text-align-center\" data-align=\"center\">string<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\">Represents a recurring transaction, rebilling the consumer X times according to the value set.<br>Formatted as an integer value <strong>1<\/strong> to <strong>99<\/strong> (\"99\" being indefinite).<br><br><strong>NOTE:<\/strong> When rebills is provided <strong>recurringPrice<\/strong> and <strong>recurringPeriod<\/strong> become required fields<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><strong>recurringPrice<\/strong><\/td>\n                           <td class=\"has-text-align-center\" data-align=\"center\">string<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\">The recurring price in case of a recurring transaction.<br>Formatted as a float value up to 2 decimal points, e.g., <strong>5.00<\/strong><br>It is a required parameter for recurring transactions.<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><strong>recurringPeriod<\/strong><\/td>\n                           <td class=\"has-text-align-center\" data-align=\"center\">string<\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">The recurring period in case of a recurring transaction.<br>Formatted as an integer value, e.g., <strong>5<\/strong><\/td>\n                           <td class=\"has-text-align-center\" data-align=\"center\"><\/td>\n                        <\/tr>\n                     <\/tbody>\n                  <\/table>\n               <\/figure>\n               \n            <\/div>\n            \n         <\/div>\n      <\/div>\n      <div id=\"kioken-tabs__1c3a92-f4\" class=\"wp-block-kioken-tabs\" data-tab-active=\"tab-invalid\">\n         <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-valid\" class=\"kioken-tabs-buttons-item\">Valid<\/a><a style=\"padding:10px 20px 10px 20px;margin:0px 5px -1px 0px\" href=\"#tab-invalid\" class=\"kioken-tabs-buttons-item\">Invalid<\/a><\/div>\n         <div class=\"kioken-tabs-content\" style=\"padding:20px 20px 20px 20px\">\n            \n            <div class=\"wp-block-kioken-tab\" data-tab=\"tab-valid\">\n               \n               <p class=\"has-text-align-left\">If all the passed parameters are correct, the following screen appears:<\/p>\n               \n               <div class=\"wp-block-image\">\n               <figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/dev2.cwie.net\/doc\/wp-content\/uploads\/2023\/11\/ccbill-payment-widget-api.png\" alt=\"A successfully configured CCBill API Payment Widget.\" class=\"wp-image-8521\"\/><\/figure><\/div>\n            <\/div>\n            \n            \n            <div class=\"wp-block-kioken-tab\" data-tab=\"tab-invalid\">\n               \n               <p class=\"has-text-align-left\">In case of a misconfiguration or if one of the values passed in is not valid, the following screen is displayed:<\/p>\n               \n               <div class=\"wp-block-image\">\n               <figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/dev2.cwie.net\/doc\/wp-content\/uploads\/2023\/08\/ccbill-widget-fail.png\" alt=\"CCBill Widget misconfiguration message.\" class=\"wp-image-8504\"\/><\/figure><\/div>\n            <\/div>\n            \n         <\/div>\n      <\/div>\n   <\/article>\n   <article>\n      <h3><span class=\"dropcap\">3.<\/span> Create Payment Token<\/h3>\n      <p>Pressing the <strong>Place your order<\/strong> button generates a payment token, which passes into the application as a <code>CustomEvent<\/code>.<\/p>\n      <p class=\"highlight\" data-target=\"r-event-listener\">To get the data from the widget and use it in an application, add an event listener for a custom event called <code>tokenCreated<\/code>,which will give you data in the <code>detail<\/code> property.<\/p>\n      <p class=\"highlight\" data-target=\"r-catch-event\">When the event is caught, the <code>onGenerateTokenId<\/code> method is called with data as input, and you can use the payment token.<\/p>\n      <figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/dev2.cwie.net\/doc\/wp-content\/uploads\/2023\/08\/ccbill-widget-success.png\" alt=\"CCBill Widget successfully configured.\" class=\"wp-image-8505\"\/><\/figure>\n      <p>Creating a charge with this payment token will require adding the customer's IP address as an additional payload (<code>ipAddress<\/code>) or header (<code>X-Origin-IP<\/code>) parameter.<\/p>\n   <\/article>\n   <article>\n      <h3><span class=\"dropcap\">4.<\/span> Customize CSS (Optional)<\/h3>\n      <p>Customize the appearance of the Payment Widget through a preset Theme or with CSS variables to modify its appearance.<\/p>\n      <p>With CSS variables, the widget easily adapts to match the look and feel of a website. This guide will walk you through the customization process, including preset dark and light themes.<\/p>\n   <\/article>\n   <article>\n      <h4>Setting the Viewport Meta Tag<\/h4>\n      <p>The viewport meta tag sets the initial viewport properties for a web page. It helps control how the web page displays on various devices, ensuring the content fits and scales appropriately.<\/p>\n      <p>This is crucial for responsive web design and providing a good user experience on different screen sizes and orientations.<\/p>\n      <p class=\"highlight\">You can set up the correct <code>&lt;meta&gt;<\/code> tag for viewports in the header of the main <em>index.html<\/em> file.<\/p>\n   <\/article>\n   <article>\n      <h4>Preset Light and Dark Themes<\/h4>\n      <p>The dark or light themes are standard themes with which the widget is shipped. These themes are ready to use as-is without any additional customization.<\/p>\n      <p class=\"highlight\" data-target=\"r-theme-color\">1. Define the constant and its value in the <em>app.js<\/em> file using <code>ccb-dark<\/code> or <code>ccb-light<\/code>as values.<\/p>\n      <p class=\"highlight\" data-target=\"r-theme-atribute\">2. Add the <code>theme<\/code> widget attribute to pass the information to the Payment Widget.<\/p>\n   <\/article>\n   <article>\n      <h4>Available CSS Variables<\/h4>\n      <p class=\"highlight\" data-target=\"r-css-style\">To customize the theme further you must link your CSS stylesheet in the <em>index.html<\/em> file.<\/p>\n      <p>You can customize various aspects of the Payment Widget using the following CSS variables:<\/p>\n      <div id=\"kioken-tabs__94536c-15\" class=\"wp-block-kioken-tabs\" data-tab-active=\"tab-base-template-color\">\n         <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-base-template-color\" class=\"kioken-tabs-buttons-item\">Base Template Color<\/a><a style=\"padding:10px 20px 10px 20px;margin:0px 5px -1px 0px\" href=\"#tab-element-template-colors\" class=\"kioken-tabs-buttons-item\">Element Template Colors<\/a><a style=\"padding:10px 20px 10px 20px;margin:0px 5px -1px 0px\" href=\"#tab-validation-input-fields\" class=\"kioken-tabs-buttons-item\">Validation Input Fields<\/a><\/div>\n         <div class=\"kioken-tabs-content\" style=\"padding:20px 20px 20px 20px\">\n            \n            <div class=\"wp-block-kioken-tab\" data-tab=\"tab-base-template-color\">\n               \n               <figure class=\"wp-block-table is-style-stripes has-small-font-size\">\n                  <table class=\"has-fixed-layout\">\n                     <thead>\n                        <tr>\n                           <th class=\"has-text-align-left\" data-align=\"left\"><strong>Element<\/strong><\/th>\n                           <th class=\"has-text-align-left\" data-align=\"left\"><strong>Variable<\/strong><\/th>\n                        <\/tr>\n                     <\/thead>\n                     <tbody>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Widget Background<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-background<\/code><\/td>\n                        <\/tr>\n                     <\/tbody>\n                  <\/table>\n               <\/figure>\n               \n            <\/div>\n            \n            \n            <div class=\"wp-block-kioken-tab\" data-tab=\"tab-element-template-colors\">\n               \n               <figure class=\"wp-block-table is-style-stripes has-small-font-size\">\n                  <table class=\"has-fixed-layout\">\n                     <thead>\n                        <tr>\n                           <th class=\"has-text-align-left\" data-align=\"left\"><strong>Element<\/strong><\/th>\n                           <th class=\"has-text-align-left\" data-align=\"left\"><strong>Variable<\/strong><\/th>\n                        <\/tr>\n                     <\/thead>\n                     <tbody>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\"><strong>Ribbon - Language Dropdown<\/strong><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Background<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-ribbon-background<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">List - Background<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-language-dropdown-background<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Text<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-language-dropdown-text<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Icon - Chevron<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-language-dropdown-icon<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\"><strong>Header - Price \/ Product Description<\/strong><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Background<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-header-background<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Section Divider - Border<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-section-divider-border<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Price - Text<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-header-price-text<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Description - Text<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-header-description-text<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Header - Currency Code - Text<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-header-currency-code-text<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\"><strong>Section Headers<\/strong><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Header Text<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-section-header<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\"><strong>Input Field and Dropdown<\/strong><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Background<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-input-field-background<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Placeholder Text<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-input-field-placeholder<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Text<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-input-field-text<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Border<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-input-field-border<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Border - In Focus<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-input-field-border-infocus<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Dropdown Country - Divider<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-country-dropdown-divider<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Dropdown Language - Background<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-language-dropdown-background<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\"><strong>Links<\/strong><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Text<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-link<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Text - Hover<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-link-hover<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Text - Visited<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-link-visited<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\"><strong>Terms &amp; Conditions<\/strong><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Text<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-terms-and-conditions-text<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\"><strong>Call to Action - Place your Order Button<\/strong><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Background<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-cta-background<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Background - Hover<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-cta-background-hover<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Background - Action<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-cta-background-action<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Text<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-cta-text-color<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Text - Hover<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-cta-text-color-hover<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\" colspan=\"2\"><strong>Footer<\/strong><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Background<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-footer-background<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Text<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-footer-text<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Border<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-validation-border<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Input Field Text<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-validation-text<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Error Message Text<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-validation-error-text<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Background<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-validation-background<\/code><\/td>\n                        <\/tr>\n                     <\/tbody>\n                  <\/table>\n               <\/figure>\n               \n            <\/div>\n            \n            \n            <div class=\"wp-block-kioken-tab\" data-tab=\"tab-validation-input-fields\">\n               \n               <figure class=\"wp-block-table is-style-stripes has-small-font-size\">\n                  <table class=\"has-fixed-layout\">\n                     <thead>\n                        <tr>\n                           <th class=\"has-text-align-left\" data-align=\"left\"><strong>Element<\/strong><\/th>\n                           <th class=\"has-text-align-left\" data-align=\"left\"><strong>Variable<\/strong><\/th>\n                        <\/tr>\n                     <\/thead>\n                     <tbody>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Border<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code><code>--ccb-validation-border<\/code><\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Input Field Text<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-validation-text<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Error Message Text<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-validation-error-text<\/code><\/td>\n                        <\/tr>\n                        <tr>\n                           <td class=\"has-text-align-left\" data-align=\"left\">Background<\/td>\n                           <td class=\"has-text-align-left\" data-align=\"left\"><code>--ccb-validation-background<\/code><\/td>\n                        <\/tr>\n                     <\/tbody>\n                  <\/table>\n               <\/figure>\n               \n            <\/div>\n            \n         <\/div>\n      <\/div>\n      <p>Feel free to modify these variables according to your website's color scheme and design preferences. Experiment with different values to achieve the desired look for your Payment Widget.<\/p>\n   <\/article>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:50%\">\n<div class=\"examples\">\n<div class=\"navigation\">\n<span class=\"nav-item selected\">index.html<\/span>\n<span class=\"nav-item\">App.tsx<\/span>\n<span class=\"nav-item\">styles.css<\/span>\n<\/div>\n<div class=\"files\">\n<div class=\"file file-1 active\">\n<pre class=\"language-html line-numbers\" data-start=\"1\" >\n<code class=\"language-html code-block\">\n&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n  &lt;head&gt;\n    &lt;meta charset=\"utf-8\" \/&gt;&lt;link rel=\"icon\" href=\"%PUBLIC_URL%\/favicon.ico\" \/&gt;\n&lt;base href=\"\/\" \/&gt;<\/code>\n<div title=\"viewport-header2\"><code class=\"language-html code-block\">&lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\"\/&gt;<\/code><\/div>\n<code class=\"language-html\">&lt;link rel=\"apple-touch-icon\" href=\"%PUBLIC_URL%\/logo192.png\" \/&gt;\n&lt;link rel=\"manifest\" href=\"%PUBLIC_URL%\/manifest.json\" \/&gt;<\/code>\n<div title=\"r-css-style\"><code class=\"language-html code-block\">&lt;link rel=\"stylesheet\" href=\"styles.css\"\/&gt;<\/code><\/div>\n<code class=\"language-html\">&lt;title&gt;DemoReactMerchant&lt;\/title&gt;<\/code>\n<div title=\"r-script-import1\"><code class=\"language-html code-block\">&lt;script src=\"https:\/\/js.ccbill.com\/payment-widget\/v1\/index.js\"&gt;&lt;\/script&gt;<\/code>\n<code class=\"language-html\">&lt;\/head&gt;\n\t&lt;body&gt;\n    &lt;noscript&gt;You need to enable JavaScript to run this app.&lt;\/noscript&gt;\n&lt;div id=\"root\"&gt;&lt;\/div&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code>\n<\/pre>\n<\/div>\n<\/div>\n<div class=\"file file-2\">\n<pre class=\"language-javascript line-numbers\" data-start=\"1\">\n<code class=\"language-javascript code-block\">\nimport React, { useState } from 'react';\nimport '.\/App.css';<\/code>\n<div title=\"r-global-type\"><code class=\"language-javascript code-block\">declare global {\n  namespace JSX {\n    interface IntrinsicElements {\n      \"ccb-payment-widget\": MyElementAttributes;\n    }\n\n    interface MyElementAttributes {\n      apiKey: string;\n      clientAccount: string;\n      subAccount: string;\n      currency: string;\n      initialPrice: string;\n      initialPeriod: string;\n      language?: string;\n      description?: string;\n      recurringPrice?: string;\n      recurringPeriod?: string;\n      rebills?: string;\n      lifeTimeSubscription?: string;\n      theme?: string;\n    }\n  }\n}<\/code><\/div><code class=\"language-javascript\">\ninterface PaymentToken {\n  paymentTokenId: string;\n  programParticipationId: string;\n  originalPaymentTokenId: string;\n  clientAccnum: number;\n  clientSubacc: number;\n  createdDatetime: Date;\n  timeToLive: number;\n  validNumberOfUse: number;\n  subscriptionId: string;\n  paymentInfoId: string;\n  errors: {};\n}\n\nfunction App() {\n  const [paymentToken, setPaymentToken] = useState<PaymentToken | null>(null);\n\n  \/\/ Required parameters\n  const apiKey =\n    \"YOUR-API-KEY\";\n  const initialPrice = \"0.00\";\n  const initialPeriod = \"0\";\n  const currency = \"USD\";\n  const clientAccount = \"900000\";\n  const subAccount = \"0\";<\/code><div title=\"r-theme-color\"><code class=\"language-javascript code-block\">\/\/ Set theme value here\n  const theme = \"ccb-light\";<\/code><\/div>\n<div title=\"r-event-listener\"><code class=\"language-javascript code-block\">\/\/ Register event listener for token generation\n  React.useEffect(() => {\n    window.addEventListener(\"tokenCreated\", _onGenerateTokenId);\n\n    return () => {\n      window.removeEventListener(\"tokenCreated\", _onGenerateTokenId);\n    };\n  }, []);<\/code><\/div>\n<div title=\"r-catch-event\"><code class=\"language-javascript code-block\">\/\/ Handle behaviour on tokenCreated event\n  function _onGenerateTokenId(event: Event) {\n    const receivedPaymentToken = (event as CustomEvent).detail\n      .paymentToken as PaymentToken;\n\n    setPaymentToken(receivedPaymentToken);\n  }<\/code><\/div>\n <code class=\"language-javascript code-block\">   return (\n    &lt;div&gt;\n      {paymentToken ? (\n        &lt;div&gt;\n          &lt;h2&gt;Payment Token Generated&lt;\/h2&gt;\n          &lt;pre&gt;{JSON.stringify(paymentToken, null, 2)}&lt;\/pre&gt;\n        &lt;\/div&gt;\n      ) : (\n        &lt;p>No payment token available yet.&lt;\/p&gt;\n      )}<\/code><div title=\"r-define-values\"><code class=\"language-html code-block\">\n      &lt;ccb-payment-widget\n          apiKey={apiKey}\n          currency={currency}\n          initialPrice={initialPrice}\n          initialPeriod={initialPeriod}\n          clientAccount={clientAccount}\n          subAccount={subAccount}<\/code><\/div><div title=\"r-theme-atribute\"><code class=\"language-html code-block\"> theme={theme}<\/code><\/div><code class=\"language-javascript code-block\">          \/&gt;          \n     &lt;\/div&gt;\n  );\n}\n\nexport default App;\n<\/code><\/pre><\/div>\n\t<div class=\"file file-3\">\n\t\t<pre class=\"language-css line-numbers\" data-start=\"1\">\n\t\t\t<code class=\"language-css code-block\">html {\n\t\t\t  \/* Custom - Background *\/\n\t\t\t  --ccb-background: #280F50;\n\n\t\t\t  \/* Custom - Header - Ribbon *\/\n\t\t\t  --ccb-ribbon-background: #62389E;\n\t\t\t  --ccb-header-language-dropdown-text: #ffffff;\n\t\t\t  --ccb-header-language-dropdown-icon: #ffffff;\n\t\t\t  --ccb-header-language-background: #62389E;\n\n\t\t\t  \/* Add more customizations here *\/\n\t\t\t}<\/code>\n\t\t<\/pre>\n\t<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":2,"featured_media":0,"template":"","meta":{"_acf_changed":false,"kk_blocks_editor_width":"","_kiokenblocks_attr":"","_kiokenblocks_dimensions":""},"backend":[],"frontend":[71],"class_list":["post-9016","tjspw","type-tjspw","status-publish","hentry","frontend-react"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>React - 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\/tjspw\/react\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"React - CCBill Doc\" \/>\n<meta property=\"og:description\" content=\"index.html App.tsx styles.css &lt;!DOCTYPE html&gt; &lt;html lang=&quot;en&quot;&gt; &lt;head&gt; &lt;meta charset=&quot;utf-8&quot; \/&gt;&lt;link rel=&quot;icon&quot; href=&quot;%PUBLIC_URL%\/favicon.ico&quot; \/&gt; &lt;base...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ccbill.com\/doc\/tjspw\/react\" \/>\n<meta property=\"og:site_name\" content=\"CCBill Doc\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-04T13:29:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/dev2.cwie.net\/doc\/wp-content\/uploads\/2023\/11\/ccbill-payment-widget-api.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ccbill.com\/doc\/tjspw\/react\",\"url\":\"https:\/\/ccbill.com\/doc\/tjspw\/react\",\"name\":\"React - CCBill Doc\",\"isPartOf\":{\"@id\":\"https:\/\/ccbill.com\/doc\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ccbill.com\/doc\/tjspw\/react#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ccbill.com\/doc\/tjspw\/react#primaryimage\"},\"thumbnailUrl\":\"https:\/\/dev2.cwie.net\/doc\/wp-content\/uploads\/2023\/11\/ccbill-payment-widget-api.png\",\"datePublished\":\"2024-06-10T15:15:35+00:00\",\"dateModified\":\"2024-10-04T13:29:40+00:00\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ccbill.com\/doc\/tjspw\/react\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ccbill.com\/doc\/tjspw\/react#primaryimage\",\"url\":\"https:\/\/dev2.cwie.net\/doc\/wp-content\/uploads\/2023\/11\/ccbill-payment-widget-api.png\",\"contentUrl\":\"https:\/\/dev2.cwie.net\/doc\/wp-content\/uploads\/2023\/11\/ccbill-payment-widget-api.png\"},{\"@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\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"React - 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\/tjspw\/react","og_locale":"en_US","og_type":"article","og_title":"React - CCBill Doc","og_description":"index.html App.tsx styles.css &lt;!DOCTYPE html&gt; &lt;html lang=\"en\"&gt; &lt;head&gt; &lt;meta charset=\"utf-8\" \/&gt;&lt;link rel=\"icon\" href=\"%PUBLIC_URL%\/favicon.ico\" \/&gt; &lt;base...","og_url":"https:\/\/ccbill.com\/doc\/tjspw\/react","og_site_name":"CCBill Doc","article_modified_time":"2024-10-04T13:29:40+00:00","og_image":[{"url":"https:\/\/dev2.cwie.net\/doc\/wp-content\/uploads\/2023\/11\/ccbill-payment-widget-api.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/ccbill.com\/doc\/tjspw\/react","url":"https:\/\/ccbill.com\/doc\/tjspw\/react","name":"React - CCBill Doc","isPartOf":{"@id":"https:\/\/ccbill.com\/doc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ccbill.com\/doc\/tjspw\/react#primaryimage"},"image":{"@id":"https:\/\/ccbill.com\/doc\/tjspw\/react#primaryimage"},"thumbnailUrl":"https:\/\/dev2.cwie.net\/doc\/wp-content\/uploads\/2023\/11\/ccbill-payment-widget-api.png","datePublished":"2024-06-10T15:15:35+00:00","dateModified":"2024-10-04T13:29:40+00:00","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ccbill.com\/doc\/tjspw\/react"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ccbill.com\/doc\/tjspw\/react#primaryimage","url":"https:\/\/dev2.cwie.net\/doc\/wp-content\/uploads\/2023\/11\/ccbill-payment-widget-api.png","contentUrl":"https:\/\/dev2.cwie.net\/doc\/wp-content\/uploads\/2023\/11\/ccbill-payment-widget-api.png"},{"@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"}]}},"_links":{"self":[{"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/tjspw\/9016"}],"collection":[{"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/tjspw"}],"about":[{"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/types\/tjspw"}],"author":[{"embeddable":true,"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/users\/2"}],"wp:attachment":[{"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/media?parent=9016"}],"wp:term":[{"taxonomy":"backend","embeddable":true,"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/backend?post=9016"},{"taxonomy":"frontend","embeddable":true,"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/frontend?post=9016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}