{"id":9023,"date":"2024-06-11T11:38:58","date_gmt":"2024-06-11T11:38:58","guid":{"rendered":"https:\/\/ccbill.com\/doc\/?post_type=tjspw&#038;p=9023"},"modified":"2024-10-04T13:35:05","modified_gmt":"2024-10-04T13:35:05","slug":"web-components","status":"publish","type":"tjspw","link":"https:\/\/ccbill.com\/doc\/tjspw\/web-components","title":{"rendered":"Web Components"},"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\">\n<div class=\"content\">\n<h2>Web Components<\/h2>\n<p>Complete the following steps to integrate the CCBill API Payment Widget into your HTML application.<\/p>\n<article>\n\t\t<h3><span class=\"dropcap\">1.<\/span> Installation and Setup<\/h3>\n\t\t<p class=\"highlight\" data-target=\"wc-script-import\">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\t\t<p class=\"highlight\" data-target=\"wc-viewport-header\">To view the widget, set up the correct <code>&lt;meta&gt;<\/code> tag for viewports in the header of the same file.<\/p>\n<\/article>\n<article>\n<h3><span class=\"dropcap\">2.<\/span> Usage<\/h3>\n<p class=\"highlight\" data-target=\"wc-custom-tag\">Add a custom <code>&lt;ccb-payment-widget&gt;<\/code> element and the required parameters in the typescript file of your web component. In this example, the file is called <em>my-app.ts<\/em>.\n<br>There are two ways to add the widget element to the template file:<\/p>\n<p><strong>Standard HTML Element<\/strong><\/p>\n\t\t<code class=\"snippet-small\">&lt;div&gt;&lt;ccb-payment-widget&gt;&lt;\/ccb-payment-widget&gt;&lt;\/div&gt;<\/code>\n<p><strong>HTML Element with Self-closing Tags<\/strong><\/p><code class=\"snippet-small\">&lt;div&gt;&lt;ccb-payment-widget \/&gt;&lt;\/div&gt;<\/code>\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<p>The Web Components application is now consuming the widget. However, the required configuration is still missing.<\/p>\n<p class=\"highlight\" data-target=\"wc-define-values\">Define the constants and their values by adding the appropriate attributes to the widget tag in the <code>my-app.ts<\/code> template.<\/p>\n<p class=\"highlight\" data-target=\"wc-define-constants\">To provide these values to the payment widget, add the appropriate attributes to the widget tag in the <strong><code>render<\/code><\/strong> method.<\/p>\n<p>Depending on whether the passed parameters are correct, different screens appear.<\/p>\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>This step shows how a filled-out and submitted form generates a payment token, which is required to send a charge request:<\/p>\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/dev2.cwie.net\/doc\/wp-content\/uploads\/2023\/11\/fill-and-submit-form.png\" alt=\"\" class=\"wp-image-10483\"\/><\/figure>\n\t\t<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\t\t<p class=\"highlight\" data-target=\"wc-custom-event\">To get the data from the widget and use it in an application, add an event listener for a custom event called <strong><code>tokenCreated<\/code><\/strong>,&nbsp;which will give you data in the&nbsp;<strong><code>details<\/code><\/strong>&nbsp;property. <\/p>\n\t\t<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\t\t<p>When the event is caught, the <strong><code>onGenerateTokenId<\/code><\/strong> method is called with data as input, and you can use the payment token.<\/p>\n\t\t<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 CCBill API 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=\"wc-theme-color\">1. Define the constant and its value in the <em>my-app.ts<\/em> file using <code>ccb-dark<\/code> or <code>ccb-light<\/code>as values.<\/p>\n<p class=\"highlight\" data-target=\"wc-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=\"wc-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 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\">\n<div class=\"examples\">\n<div class=\"navigation\">\n        <span class=\"nav-item selected\">index.html<\/span>\n\t\t<span class=\"nav-item\">my-app.ts<\/span>\n\t\t<span class=\"nav-item\">styles.css<\/span>\n    <\/div>\n\t<div class=\"files\">\n        <div class=\"file file-1 active\">\n\t\t<pre class=\"language-html line-numbers\" data-start=\"1\">\n<code class=\"language-html code-block\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n  &lt;head&gt;\n    &lt;meta charset=\"utf-8\" \/&gt;<\/code><div title=\"wc-viewport-header\"><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><code class=\"language-html\">&lt;base href=\"\/\" \/&gt;\n    &lt;title&gt;DemoWebComponentMerchant&lt;\/title&gt;<\/code><div title=\"wc-css-style\"><code class=\"language-html code-block\">&lt;link rel=\"stylesheet\" href=\"styles.css\"\/&gt;<\/code><\/div><div title=\"wc-script-import\"><code class=\"language-html code-block\">&lt;script src=\"https:\/\/js.ccbill.com\/payment-widget\/v1\/index.js\"&gt;&lt;\/script&gt;<\/code><\/div>\n\t<code class=\"language-html\">&lt;\/head&gt;  \n&lt;body&gt;\n    &lt;my-app&gt;&lt;\/my-app&gt;\n    &lt;script type=\"module\" src=\".\/out-tsc\/src\/my-app.js\"&gt;&lt;\/script&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre><\/div>\n<div class=\"file file-2\">\n<pre class=\"language-js line-numbers\" data-start=\"1\">\n<code class=\"language-js code-block\">import { LitElement, html } from \"lit\";\nimport { property, customElement, state } from \"lit\/decorators.js\";\nimport { when } from \"lit\/directives\/when.js\";\n\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}<\/code><div title=\"wc-define-values\"><code class=\"language-js code-block\">\n@customElement(\"my-app\")\nclass MyApp extends LitElement {\n  @property({ type: String }) header = \"My app\";\n\n  @state() paymentToken!: PaymentToken;\n\n  apiKey = \"YOUR_API_KEY\";\n  currency = \"USD\";\n  clientAccount = \"90000\";\n  subAccount = \"0\";\n  initialPrice = \"0.00\";\n  initialPeriod = \"0\";<\/code><\/div><div title=\"theme-color\"><code class=\"language-js code-block\">\n  \/\/ Set theme value here\n  theme = \"ccb-dark\";\n  \/\/ Set theme value here\n  theme = \"ccb-light\";<\/code><\/div><div title=\"wc-custom-event\"><code class=\"language-js code-block\">\n  getPaymentToken($event: CustomEvent) {\n    this.paymentToken = $event.detail.paymentToken;\n  }<\/code><\/div><code class=\"language-javascript\">\n  render() {\n    return html`\n      ${when(this.paymentToken, () => {\n        return html`\n          &lt;h2&gt;Payment Token Generated&lt;\/h2&gt;\n          &lt;pre&gt;\"paymentTokenId\":${this.paymentToken.paymentTokenId}&lt;\/pre&gt;\n          &lt;pre&gt;\"clientAccnum\":${this.paymentToken.clientAccnum}&lt;\/pre&gt;\n          &lt;pre&gt;\"clientSubacc\":${this.paymentToken.clientSubacc}&lt;\/pre&gt;\n          &lt;pre&gt;\"createdDatetime\":${this.paymentToken.createdDatetime}&lt;\/pre&gt;\n          &lt;pre&gt;\"timeToLive\":${this.paymentToken.timeToLive}&lt;\/pre&gt;\n          &lt;pre&gt;\"validNumberOfUse\":${this.paymentToken.validNumberOfUse}&lt;\/pre&gt;\n          &lt;pre&gt;\"subscriptionId\":${this.paymentToken.subscriptionId}&lt;\/pre&gt;\n        `;\n\t\t})}<\/code><div title=\"wc-custom-tag\"><code class=\"language-js code-block\">\n      &lt;ccb-payment-widget<\/code><\/div>\n        <div title=\"wc-define-constants\"><code class=\"language-js code-block\">apiKey=\"${this.apiKey}\"\n        clientAccount=\"${this.clientAccount}\"\n        subAccount=\"${this.subAccount}\"\n        initialPrice=\"${this.initialPrice}\"\n        initialPeriod=\"${this.initialPeriod}\"\n        currency=\"${this.currency}\"\n        @tokenCreated=\"${this.getPaymentToken}\"\n      &gt;&lt;\/ccb-payment-widget&gt;<\/code><\/div><code class=\"language-javascript\">\n    `;\n  }\n}\n<\/code><\/pre><\/div>\n<div class=\"file file-3\">\n<pre class=\"language-css line-numbers\" data-start=\"1\">\n<code class=\"language-css code-block\">html {\n  \/* Custom - Background *\/\n  --ccb-background: #280F50;\n\n  \/* Custom - Header - Ribbon *\/\n  --ccb-ribbon-background: #62389E;\n  --ccb-header-language-dropdown-text: #ffffff;\n  --ccb-header-language-dropdown-icon: #ffffff;\n  --ccb-header-language-background: #62389E;\n\n  \/* Add more customizations here *\/\n}<\/code><\/pre><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":4,"featured_media":0,"template":"","meta":{"_acf_changed":false,"kk_blocks_editor_width":"","_kiokenblocks_attr":"","_kiokenblocks_dimensions":""},"backend":[],"frontend":[73],"class_list":["post-9023","tjspw","type-tjspw","status-publish","hentry","frontend-web-components"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Web Components - 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\/web-components\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Web Components - CCBill Doc\" \/>\n<meta property=\"og:description\" content=\"index.html my-app.ts 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;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0, maximum-scale=1.0,...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ccbill.com\/doc\/tjspw\/web-components\" \/>\n<meta property=\"og:site_name\" content=\"CCBill Doc\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-04T13:35:05+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\/web-components\",\"url\":\"https:\/\/ccbill.com\/doc\/tjspw\/web-components\",\"name\":\"Web Components - CCBill Doc\",\"isPartOf\":{\"@id\":\"https:\/\/ccbill.com\/doc\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ccbill.com\/doc\/tjspw\/web-components#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ccbill.com\/doc\/tjspw\/web-components#primaryimage\"},\"thumbnailUrl\":\"https:\/\/dev2.cwie.net\/doc\/wp-content\/uploads\/2023\/11\/ccbill-payment-widget-api.png\",\"datePublished\":\"2024-06-11T11:38:58+00:00\",\"dateModified\":\"2024-10-04T13:35:05+00:00\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ccbill.com\/doc\/tjspw\/web-components\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ccbill.com\/doc\/tjspw\/web-components#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":"Web Components - 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\/web-components","og_locale":"en_US","og_type":"article","og_title":"Web Components - CCBill Doc","og_description":"index.html my-app.ts styles.css &lt;!DOCTYPE html&gt; &lt;html lang=\"en\"&gt; &lt;head&gt; &lt;meta charset=\"utf-8\" \/&gt;&lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0,...","og_url":"https:\/\/ccbill.com\/doc\/tjspw\/web-components","og_site_name":"CCBill Doc","article_modified_time":"2024-10-04T13:35:05+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\/web-components","url":"https:\/\/ccbill.com\/doc\/tjspw\/web-components","name":"Web Components - CCBill Doc","isPartOf":{"@id":"https:\/\/ccbill.com\/doc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ccbill.com\/doc\/tjspw\/web-components#primaryimage"},"image":{"@id":"https:\/\/ccbill.com\/doc\/tjspw\/web-components#primaryimage"},"thumbnailUrl":"https:\/\/dev2.cwie.net\/doc\/wp-content\/uploads\/2023\/11\/ccbill-payment-widget-api.png","datePublished":"2024-06-11T11:38:58+00:00","dateModified":"2024-10-04T13:35:05+00:00","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ccbill.com\/doc\/tjspw\/web-components"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ccbill.com\/doc\/tjspw\/web-components#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\/9023"}],"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\/4"}],"wp:attachment":[{"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/media?parent=9023"}],"wp:term":[{"taxonomy":"backend","embeddable":true,"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/backend?post=9023"},{"taxonomy":"frontend","embeddable":true,"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/frontend?post=9023"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}