{"id":9014,"date":"2024-06-10T12:18:52","date_gmt":"2024-06-10T12:18:52","guid":{"rendered":"https:\/\/ccbill.com\/doc\/?post_type=tjspw&#038;p=9014"},"modified":"2024-10-04T13:29:13","modified_gmt":"2024-10-04T13:29:13","slug":"angular","status":"publish","type":"tjspw","link":"https:\/\/ccbill.com\/doc\/tjspw\/angular","title":{"rendered":"Angular"},"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>Angular<\/h2>\n\t<p>Complete the following steps to integrate the CCBill API Payment Widget into your Angular application.<\/p>\n\t<article>\n\t\t<h3><span class=\"dropcap\">1.<\/span> Installation and Setup<\/h3>\n\t\t<p class=\"highlight\" data-target=\"angular-import-script\">To use the widget, add a <strong><code>&lt;script&gt;<\/code><\/strong> import in the header of the main <em>index.html<\/em> file.<\/p>\n\t\t<p>The <strong><code>&lt;ccb-payment-widget&gt;<\/code><\/strong> HTML tag is a non-standard element. You must tell the Angular app to use this element by defining a schema. <\/p>\n\t\t<p class=\"highlight\" data-target=\"angular-custom-elements-schema\">Add the <strong><code>CUSTOM_ELEMENTS_SCHEMA<\/code><\/strong> to the <strong><code>@NgModule<\/code><\/strong> decorator in the <em>app.module.ts<\/em> file.\n\t\t<p class=\"highlight\" data-target=\"angular-compontent-decorator\">If using standalone components, add the schema within the <strong><code>@Component<\/code><\/strong> decorator.<\/p>\n\t<\/article>\n\t<article>\n\t\t<h3><span class=\"dropcap\">2.<\/span> Usage<\/h3>\n\t\t<p>The Angular application is now aware of possible custom elements. <\/p>\n\t\t<p class=\"highlight\" data-target=\"angular-custom-tag\">Add the custom <strong><code>&lt;ccb-payment-widget&gt;<\/code><\/strong> HTML tag in the <strong>app.component.html<\/strong> component template to enable the app to use these elements.<\/p>\n\t\t<p>There are two ways to add the widget element to your template file:<\/p>\n\t\t<p><strong>Standard HTML Element<\/strong><\/p>\n\t\t<code class=\"snippet-small\">&lt;div&gt;\n&lt;ccb-payment-widget&gt;&lt;\/ccb-payment-widget&gt;\n&lt;\/div&gt;<\/code>\n\t\t<p><strong>HTML Element with Self-closing Tags<\/strong><\/p>\n\t\t<code class=\"snippet-small\">&lt;div&gt;\n&lt;ccb-payment-widget \/&gt;\n&lt;\/div&gt;<\/code>\n\t\t<p>The Angular application can now consume the widget but lacks the required configuration.<\/p>\n\t\t<p class=\"highlight\" data-target=\"angular-define-parameters\">To initialize the widget, define the required parameters and their values in the <em>app.component.ts<\/em> file so they can be used in the <em>app.component.html<\/em> template.\n\t\t<h4>Attributes<\/h4>\n\t<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\t\t<p class=\"highlight\" data-target=\"angular-add-attributes\">To provide these values to the widget, add the appropriate attributes to the widget tag in the <strong><code>app.component.html<\/code><\/strong> template.<\/p>\n\t\t  <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\t<\/article>\n\t<article>\n\t\t<h3><span class=\"dropcap\">3.<\/span> Create Payment Token<\/h3>\n\t\t<p>Pressing the&nbsp;<strong>Place your order<\/strong>&nbsp;button generates a payment token, which passes into the application as a&nbsp;<strong><code>CustomEvent<\/code><\/strong>.<\/p>\n\t\t<p>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>detail<\/code>s<\/strong>&nbsp;property. <\/p>\n\t\t<figure><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 class=\"highlight\" data-target=\"angular-onGenerateTokenId\">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 (<strong><code>ipAddress<\/code><\/strong>) or header (<strong>X-Origin-IP<\/strong>) parameter.<\/p>\n\t<\/article>\n\t<article>\n\t\t<h3><span class=\"dropcap\">4.<\/span> Customize CSS (Optional)<\/h3>\n\t\t<p>Customize the appearance of the CCBill API Payment Widget through a preset Theme or with CSS variables to modify its appearance. <\/p>\n\t\t<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\t\t<h4>Setting the Viewport Meta Tag<\/h4>\n\t\t<p>The <strong><code>viewport<\/code><\/strong> 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\t\t<p>This is crucial for responsive web design and providing a good user experience on different screen sizes and orientations.<\/p>\n\t\t<p class=\"highlight\" data-target=\"angular-viewport-tag\">You can set up the correct <strong><code>&lt;meta&gt;<\/code><\/strong> tag for viewports in the header of the main <em>index.html<\/em> file.<\/p>\n\t\t<h4>Preset Dark and Light Themes<\/h4>\n\t\t<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\t\t<p class=\"highlight\" data-target=\"angular-light-dark-theme\">Define the constant and its value in the&nbsp;<em>app.component.ts<\/em>&nbsp;file using <strong><code>ccb-dark<\/code><\/strong> or <strong><code>ccb-light<\/code><\/strong> as values.<br><br>Add the <strong><code>theme<\/code><\/strong> widget attribute to pass the information to the widget.<\/p>\n\t\t<h4>Available CSS Variables<\/h4>\n\t\t<p class=\"highlight\" data-target=\"angular-css-stylesheet\">To customize the theme further you must link your CSS stylesheet in the <em>index.html<\/em> file.<\/p>\n\t\t<p>You can customize various aspects of the widget using the following CSS variables:<\/p>\n\t\t<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\t\t<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\t<\/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\t<div class=\"navigation\">\n\t\t<span class=\"nav-item selected\">Index.html<\/span>\n\t\t<span class=\"nav-item\">app.module.ts<\/span>\n\t\t<span class=\"nav-item\">app.component.ts<\/span>\n\t\t<span class=\"nav-item\">app.component.html<\/span>\n\t\t<span class=\"nav-item\">style.css<\/span>\n\t<\/div>\n\t<div class=\"files\">\n\t\t<div class=\"file file-1 active\">\n\t\t<pre class=\"language-html line-numbers\" data-start=\"1\"><code class=\"language-html\">\n&lt;!DOCTYPE html&gt;\n\t&lt;html lang=\"en\"&gt;\n\t&lt;head&gt;\n\t\t&lt;meta charset=\"utf-8\" \/&gt;\n\t\t&lt;title&gt;DemoAngularMerchant&lt;\/title&gt;\n\t\t&lt;base href=\"\/\" \/&gt;<\/code><div title=\"angular-viewport-tag\"><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\t<code class=\"language-html\">&lt;link rel=\"icon\" type=\"image\/x-icon\" href=\"favicon.ico\" \/&gt;<\/code><div title=\"angular-css-stylesheet\">\n<code class=\"language-html code-block\">&lt;link rel=\"stylesheet\" href=\"styles.css\"\/&gt; <\/code><\/div>\n\t<div title=\"angular-import-script\"><code class=\"language-html code-block\">&lt;script src=\"https:\/\/js.ccbill.com\/payment-widget\/v1\/index.js\"&gt;&lt;\/script&gt;<\/code><\/div><code class=\"language-html\">&lt;\/head&gt;  \n\t&lt;body&gt;\n\t&lt;app-root&gt;&lt;\/app-root&gt;\n\t&lt;\/body&gt;\n&lt;\/html&gt;\n\t\t<\/code><\/pre>\n\t\t<\/div>\n\t\t<div class=\"file file-2\">\n\t\t\t<pre class=\"language-js line-numbers\" data-start=\"1\">\n\t\t\t\t<code class=\"language-js\">\n\t# When custom elements schema\n\n\timport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from &quot;@angular\/core&quot;;\n\timport { BrowserModule } from &quot;@angular\/platform-browser&quot;;\n\n\timport { AppComponent } from &quot;.\/app.component&quot;;<\/code>\n\t<div title=\"angular-custom-elements-schema\">\n\t<code class=\"language-js code-block\">\n\t@NgModule({\n\t  declarations: [AppComponent],\n\t  imports: [BrowserModule],\n\t  bootstrap: [AppComponent],\n\t  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n\t})<\/code>\n\t<\/div>\n\t<code class=\"language-js\">export class AppModule {}\n\n\t# When using a standalone components\n\n\timport { Component, CUSTOM_ELEMENTS_SCHEMA } from &quot;@angular\/core&quot;;<\/code>\n\t<div title=\"angular-compontent-decorator\">\n\t<code class=\"language-js code-block\">\n\t@Component({\n\t  selector: &quot;app-root&quot;,\n\t  standalone: true,\n\t  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n\t  template: `&lt;h2&gt;Root Component&lt;\/h2&gt;`,\n\t})<\/code>\n\t<\/div>\n\t<code class=\"language-js\">export class AppComponent {}\n\t<\/code>\n\t<\/pre>\n\t\t<\/div>\n\t\t<div class=\"file file-3\">\n\t\t<pre class=\"language-js line-numbers\" data-start=\"1\">\n\t\t<code class=\"language-js\">import {Component} from '@angular\/core';\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>\n<div title=\"angular-define-parameters\">\n<code class=\"language-js code-block\">@Component({\n  selector: 'app-root',\n  templateUrl: '.\/app.component.html',\n  styleUrls: ['.\/app.component.scss'],\n})\nexport class AppComponent {\n  paymentToken!: PaymentToken;\n\n  apiKey = 'YOUR_API_KEY';\n  currency = 'USD';\n  clientAccount = '900000';\n  subAccount = '0';\n  initialPrice = '0.00';\n  initialPeriod = '0';<\/code>\n  <\/div>\n  <code class=\"language-js\">\/\/ Set theme value here<\/code>\n  <div title=\"angular-light-dark-theme\">\n  <code class=\"language-js code-block\">theme = \"ccb-dark\";\n  <\/code>\n  <\/div>\n  <div title=\"angular-onGenerateTokenId\">\n  <code class=\"language-js code-block\">\n onGenerateTokenId(event: Event) {\n    this.paymentToken = (event as CustomEvent).detail\n      .paymentToken as PaymentToken;\n  }\n}\n<\/code>\n<\/div>\n<\/pre>\n\t\t<\/div>\n\t\t<div class=\"file file-4\">\n\t\t<pre class=\"language-html line-numbers\" data-start=\"1\"><code class=\"language-html\">\n&lt;div *ngIf=\"paymentToken\"&gt;\n  &lt;h2&gt;Payment Token Generated&lt;\/h2&gt;\n  &lt;pre&gt;{{ paymentToken | json }}&lt;\/pre&gt;\n&lt;\/div&gt;<\/code><div title=\"angular-custom-tag\"><code class=\"language-html code-block\">&lt;ccb-payment-widget<\/code><\/div>\n<div title=\"angular-add-attributes\"><code class=\"language-html code-block\">\n  [apiKey]=\"apiKey\"\n  [currency]=\"currency\"\n  [clientAccount]=\"clientAccount\"\n  [subAccount]=\"subAccount\"\n  [initialPrice]=\"initialPrice\"\n  [initialPeriod]=\"initialPeriod\"\n  (tokenCreated)=\"onGenerateTokenId($event)\"<\/code><\/div>\n<code class=\"language-html code-block\">\/&gt;<\/code>\n<\/code><\/pre><\/div>\n\t\t<div class=\"file file-5\">\n\t\t<pre class=\"language-css line-numbers\" data-start=\"1\">\n\t\t<div title=\"angular-import-script\">\n\t\t<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><\/div><\/pre>\n\t\t<\/div>\n\t\t<\/div><\/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":[70],"class_list":["post-9014","tjspw","type-tjspw","status-publish","hentry","frontend-angular"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Angular - 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\/angular\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Angular - CCBill Doc\" \/>\n<meta property=\"og:description\" content=\"Index.html app.module.ts app.component.ts app.component.html style.css &lt;!DOCTYPE html&gt; &lt;html lang=&quot;en&quot;&gt; &lt;head&gt; &lt;meta charset=&quot;utf-8&quot; \/&gt; &lt;title&gt;DemoAngularMerchant&lt;\/title&gt; &lt;base...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ccbill.com\/doc\/tjspw\/angular\" \/>\n<meta property=\"og:site_name\" content=\"CCBill Doc\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-04T13:29:13+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\/angular\",\"url\":\"https:\/\/ccbill.com\/doc\/tjspw\/angular\",\"name\":\"Angular - CCBill Doc\",\"isPartOf\":{\"@id\":\"https:\/\/ccbill.com\/doc\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ccbill.com\/doc\/tjspw\/angular#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ccbill.com\/doc\/tjspw\/angular#primaryimage\"},\"thumbnailUrl\":\"https:\/\/dev2.cwie.net\/doc\/wp-content\/uploads\/2023\/11\/ccbill-payment-widget-api.png\",\"datePublished\":\"2024-06-10T12:18:52+00:00\",\"dateModified\":\"2024-10-04T13:29:13+00:00\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ccbill.com\/doc\/tjspw\/angular\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ccbill.com\/doc\/tjspw\/angular#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":"Angular - 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\/angular","og_locale":"en_US","og_type":"article","og_title":"Angular - CCBill Doc","og_description":"Index.html app.module.ts app.component.ts app.component.html style.css &lt;!DOCTYPE html&gt; &lt;html lang=\"en\"&gt; &lt;head&gt; &lt;meta charset=\"utf-8\" \/&gt; &lt;title&gt;DemoAngularMerchant&lt;\/title&gt; &lt;base...","og_url":"https:\/\/ccbill.com\/doc\/tjspw\/angular","og_site_name":"CCBill Doc","article_modified_time":"2024-10-04T13:29:13+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\/angular","url":"https:\/\/ccbill.com\/doc\/tjspw\/angular","name":"Angular - CCBill Doc","isPartOf":{"@id":"https:\/\/ccbill.com\/doc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ccbill.com\/doc\/tjspw\/angular#primaryimage"},"image":{"@id":"https:\/\/ccbill.com\/doc\/tjspw\/angular#primaryimage"},"thumbnailUrl":"https:\/\/dev2.cwie.net\/doc\/wp-content\/uploads\/2023\/11\/ccbill-payment-widget-api.png","datePublished":"2024-06-10T12:18:52+00:00","dateModified":"2024-10-04T13:29:13+00:00","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ccbill.com\/doc\/tjspw\/angular"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ccbill.com\/doc\/tjspw\/angular#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\/9014"}],"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=9014"}],"wp:term":[{"taxonomy":"backend","embeddable":true,"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/backend?post=9014"},{"taxonomy":"frontend","embeddable":true,"href":"https:\/\/ccbill.com\/doc\/wp-json\/wp\/v2\/frontend?post=9014"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}