๐€๐ง๐ง๐ข๐ž๐‚๐š๐ซ๐ž® ๐Ž๐ซ๐ ๐š๐ง๐ข๐œ ๐‡๐ž๐ซ๐›๐š๐ฅ ๐‹๐ฎ๐ง๐  ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐’๐ฎ๐ฉ๐ฉ๐ฅ๐ž๐ฆ๐ž๐ง๐ญ - ๐๐จ๐ฐ๐ž๐ซ๐Ÿ๐ฎ๐ฅ ๐‹๐ฎ๐ง๐  ๐’๐ฎ๐ฉ๐ฉ๐จ๐ซ๐ญ - ๐€๐ง๐ญ๐ข-๐…๐ข๐›๐ซ๐จ๐ญ๐ข๐œ & ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐๐ž๐ญ๐ญ๐ž๐ซ ๐Ž๐ฑ๐ฒ๐ ๐ž๐ง & ๐‚๐ฅ๐ž๐š๐ซ๐š๐ง๐œ๐ž
๐€๐ง๐ง๐ข๐ž๐‚๐š๐ซ๐ž® ๐Ž๐ซ๐ ๐š๐ง๐ข๐œ ๐‡๐ž๐ซ๐›๐š๐ฅ ๐‹๐ฎ๐ง๐  ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐’๐ฎ๐ฉ๐ฉ๐ฅ๐ž๐ฆ๐ž๐ง๐ญ - ๐๐จ๐ฐ๐ž๐ซ๐Ÿ๐ฎ๐ฅ ๐‹๐ฎ๐ง๐  ๐’๐ฎ๐ฉ๐ฉ๐จ๐ซ๐ญ - ๐€๐ง๐ญ๐ข-๐…๐ข๐›๐ซ๐จ๐ญ๐ข๐œ & ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐๐ž๐ญ๐ญ๐ž๐ซ ๐Ž๐ฑ๐ฒ๐ ๐ž๐ง & ๐‚๐ฅ๐ž๐š๐ซ๐š๐ง๐œ๐ž
๐€๐ง๐ง๐ข๐ž๐‚๐š๐ซ๐ž® ๐Ž๐ซ๐ ๐š๐ง๐ข๐œ ๐‡๐ž๐ซ๐›๐š๐ฅ ๐‹๐ฎ๐ง๐  ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐’๐ฎ๐ฉ๐ฉ๐ฅ๐ž๐ฆ๐ž๐ง๐ญ - ๐๐จ๐ฐ๐ž๐ซ๐Ÿ๐ฎ๐ฅ ๐‹๐ฎ๐ง๐  ๐’๐ฎ๐ฉ๐ฉ๐จ๐ซ๐ญ - ๐€๐ง๐ญ๐ข-๐…๐ข๐›๐ซ๐จ๐ญ๐ข๐œ & ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐๐ž๐ญ๐ญ๐ž๐ซ ๐Ž๐ฑ๐ฒ๐ ๐ž๐ง & ๐‚๐ฅ๐ž๐š๐ซ๐š๐ง๐œ๐ž
๐€๐ง๐ง๐ข๐ž๐‚๐š๐ซ๐ž® ๐Ž๐ซ๐ ๐š๐ง๐ข๐œ ๐‡๐ž๐ซ๐›๐š๐ฅ ๐‹๐ฎ๐ง๐  ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐’๐ฎ๐ฉ๐ฉ๐ฅ๐ž๐ฆ๐ž๐ง๐ญ - ๐๐จ๐ฐ๐ž๐ซ๐Ÿ๐ฎ๐ฅ ๐‹๐ฎ๐ง๐  ๐’๐ฎ๐ฉ๐ฉ๐จ๐ซ๐ญ - ๐€๐ง๐ญ๐ข-๐…๐ข๐›๐ซ๐จ๐ญ๐ข๐œ & ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐๐ž๐ญ๐ญ๐ž๐ซ ๐Ž๐ฑ๐ฒ๐ ๐ž๐ง & ๐‚๐ฅ๐ž๐š๐ซ๐š๐ง๐œ๐ž
๐€๐ง๐ง๐ข๐ž๐‚๐š๐ซ๐ž® ๐Ž๐ซ๐ ๐š๐ง๐ข๐œ ๐‡๐ž๐ซ๐›๐š๐ฅ ๐‹๐ฎ๐ง๐  ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐’๐ฎ๐ฉ๐ฉ๐ฅ๐ž๐ฆ๐ž๐ง๐ญ - ๐๐จ๐ฐ๐ž๐ซ๐Ÿ๐ฎ๐ฅ ๐‹๐ฎ๐ง๐  ๐’๐ฎ๐ฉ๐ฉ๐จ๐ซ๐ญ - ๐€๐ง๐ญ๐ข-๐…๐ข๐›๐ซ๐จ๐ญ๐ข๐œ & ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐๐ž๐ญ๐ญ๐ž๐ซ ๐Ž๐ฑ๐ฒ๐ ๐ž๐ง & ๐‚๐ฅ๐ž๐š๐ซ๐š๐ง๐œ๐ž
๐€๐ง๐ง๐ข๐ž๐‚๐š๐ซ๐ž® ๐Ž๐ซ๐ ๐š๐ง๐ข๐œ ๐‡๐ž๐ซ๐›๐š๐ฅ ๐‹๐ฎ๐ง๐  ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐’๐ฎ๐ฉ๐ฉ๐ฅ๐ž๐ฆ๐ž๐ง๐ญ - ๐๐จ๐ฐ๐ž๐ซ๐Ÿ๐ฎ๐ฅ ๐‹๐ฎ๐ง๐  ๐’๐ฎ๐ฉ๐ฉ๐จ๐ซ๐ญ - ๐€๐ง๐ญ๐ข-๐…๐ข๐›๐ซ๐จ๐ญ๐ข๐œ & ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐๐ž๐ญ๐ญ๐ž๐ซ ๐Ž๐ฑ๐ฒ๐ ๐ž๐ง & ๐‚๐ฅ๐ž๐š๐ซ๐š๐ง๐œ๐ž
๐€๐ง๐ง๐ข๐ž๐‚๐š๐ซ๐ž® ๐Ž๐ซ๐ ๐š๐ง๐ข๐œ ๐‡๐ž๐ซ๐›๐š๐ฅ ๐‹๐ฎ๐ง๐  ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐’๐ฎ๐ฉ๐ฉ๐ฅ๐ž๐ฆ๐ž๐ง๐ญ - ๐๐จ๐ฐ๐ž๐ซ๐Ÿ๐ฎ๐ฅ ๐‹๐ฎ๐ง๐  ๐’๐ฎ๐ฉ๐ฉ๐จ๐ซ๐ญ - ๐€๐ง๐ญ๐ข-๐…๐ข๐›๐ซ๐จ๐ญ๐ข๐œ & ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐๐ž๐ญ๐ญ๐ž๐ซ ๐Ž๐ฑ๐ฒ๐ ๐ž๐ง & ๐‚๐ฅ๐ž๐š๐ซ๐š๐ง๐œ๐ž
๐€๐ง๐ง๐ข๐ž๐‚๐š๐ซ๐ž® ๐Ž๐ซ๐ ๐š๐ง๐ข๐œ ๐‡๐ž๐ซ๐›๐š๐ฅ ๐‹๐ฎ๐ง๐  ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐’๐ฎ๐ฉ๐ฉ๐ฅ๐ž๐ฆ๐ž๐ง๐ญ - ๐๐จ๐ฐ๐ž๐ซ๐Ÿ๐ฎ๐ฅ ๐‹๐ฎ๐ง๐  ๐’๐ฎ๐ฉ๐ฉ๐จ๐ซ๐ญ - ๐€๐ง๐ญ๐ข-๐…๐ข๐›๐ซ๐จ๐ญ๐ข๐œ & ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐๐ž๐ญ๐ญ๐ž๐ซ ๐Ž๐ฑ๐ฒ๐ ๐ž๐ง & ๐‚๐ฅ๐ž๐š๐ซ๐š๐ง๐œ๐ž
๐€๐ง๐ง๐ข๐ž๐‚๐š๐ซ๐ž® ๐Ž๐ซ๐ ๐š๐ง๐ข๐œ ๐‡๐ž๐ซ๐›๐š๐ฅ ๐‹๐ฎ๐ง๐  ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐’๐ฎ๐ฉ๐ฉ๐ฅ๐ž๐ฆ๐ž๐ง๐ญ - ๐๐จ๐ฐ๐ž๐ซ๐Ÿ๐ฎ๐ฅ ๐‹๐ฎ๐ง๐  ๐’๐ฎ๐ฉ๐ฉ๐จ๐ซ๐ญ - ๐€๐ง๐ญ๐ข-๐…๐ข๐›๐ซ๐จ๐ญ๐ข๐œ & ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐๐ž๐ญ๐ญ๐ž๐ซ ๐Ž๐ฑ๐ฒ๐ ๐ž๐ง & ๐‚๐ฅ๐ž๐š๐ซ๐š๐ง๐œ๐ž
๐€๐ง๐ง๐ข๐ž๐‚๐š๐ซ๐ž® ๐Ž๐ซ๐ ๐š๐ง๐ข๐œ ๐‡๐ž๐ซ๐›๐š๐ฅ ๐‹๐ฎ๐ง๐  ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐’๐ฎ๐ฉ๐ฉ๐ฅ๐ž๐ฆ๐ž๐ง๐ญ - ๐๐จ๐ฐ๐ž๐ซ๐Ÿ๐ฎ๐ฅ ๐‹๐ฎ๐ง๐  ๐’๐ฎ๐ฉ๐ฉ๐จ๐ซ๐ญ - ๐€๐ง๐ญ๐ข-๐…๐ข๐›๐ซ๐จ๐ญ๐ข๐œ & ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐๐ž๐ญ๐ญ๐ž๐ซ ๐Ž๐ฑ๐ฒ๐ ๐ž๐ง & ๐‚๐ฅ๐ž๐š๐ซ๐š๐ง๐œ๐ž

๐€๐ง๐ง๐ข๐ž๐‚๐š๐ซ๐ž® ๐Ž๐ซ๐ ๐š๐ง๐ข๐œ ๐‡๐ž๐ซ๐›๐š๐ฅ ๐‹๐ฎ๐ง๐  ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐’๐ฎ๐ฉ๐ฉ๐ฅ๐ž๐ฆ๐ž๐ง๐ญ - ๐๐จ๐ฐ๐ž๐ซ๐Ÿ๐ฎ๐ฅ ๐‹๐ฎ๐ง๐  ๐’๐ฎ๐ฉ๐ฉ๐จ๐ซ๐ญ - ๐€๐ง๐ญ๐ข-๐…๐ข๐›๐ซ๐จ๐ญ๐ข๐œ & ๐‘๐ž๐ฉ๐š๐ข๐ซ ๐๐ž๐ญ๐ญ๐ž๐ซ ๐Ž๐ฑ๐ฒ๐ ๐ž๐ง & ๐‚๐ฅ๐ž๐š๐ซ๐š๐ง๐œ๐ž

๐ŸŒŽWorldwide Deliveryโญโญโญโญโญ4.9 (1837 Reviews)
โœ…30-day money back guarantee
๐Ÿ’ฐReturnable within 30 days of receipt of shipment
๐Ÿ†—Filed with the FDA & EU Certification
BUY MORE SAVE MORE-2 Bottles๐Ÿ’ฐ45% Off - Early-Stage Support ๐ŸŒฌ๏ธ Eases chronic cough โœ”๏ธ Bronchial inflammation relief โœ”๏ธ Boosts blood oxygen
Please select a buy more save more
$34.97
$0.00
-$-34.97
Quantity
const getPluginI18nMessages = (message, replaceObj = {}) => { const lang = document.documentElement.lang || "en-US"; const [form, key] = message.split('.') let text = window.payment_plugin_message['en-US'][form][key]; if (window.payment_plugin_message[lang][form].hasOwnProperty(key)) { text = window.payment_plugin_message[lang][form][key]; } Object.keys(replaceObj).forEach(key => { text = text.replace(new RegExp(`\{${key}\}`, 'gi'), replaceObj[key]); }) return text; } const zhCN = { ec: { not_active_channel: "่ฏทๅˆฐๆ”ถๆฌพ่ฎพ็ฝฎไธญ{channelName}ๆˆ–ๅœจใ€Œๅฟซๆทๆ”ฏไป˜ๆŒ‰้’ฎใ€่ฎพ็ฝฎไธญ้€‰ๆ‹ฉๅ…ถไป–็š„ๆœๅŠกๆไพ›ๆ–น๏ผŒๅฆๅˆ™ๆŒ‰้’ฎๅฐ†ๆ— ๆณ•ๅฑ•็คบ", not_support_theme: "ๅฝ“ๅ‰ไธป้ข˜ไธๆ”ฏๆŒๆทปๅŠ ใ€Œๅฟซๆทๆ”ฏไป˜ๆŒ‰้’ฎใ€", more_button: "ๆ›ดๅคšๆ”ฏไป˜ๆ–นๅผ", skeleton_layer_tips_title: "ๅฟซๆทๆ”ฏไป˜ๆŒ‰้’ฎ", skeleton_layer_tips_content: "่ฏท็‚นๅ‡ปๅทฆไพงๅˆ—่กจไธญ็š„ใ€Œๅฟซๆทๆ”ฏไป˜ๆŒ‰้’ฎใ€๏ผŒๅœจ่ฎพ็ฝฎ้กต้ขๅผ€ๅฏๆƒณ่ฆ็š„ๅฑ•็คบ็š„ๆ”ฏไป˜ๆŒ‰้’ฎ", mock_tips: "ๅฟซๆทๆ”ฏไป˜ๆŒ‰้’ฎๆ˜ฏๅฆๅฑ•็คบ่ฟ˜ๅ–ๅ†ณไบŽไนฐๅฎถไฝฟ็”จ็š„ๆต่งˆๅ™จไปฅๅŠๅ•†ๅ“็š„่ดงๅธใ€้‡‘้ข", not_find_form_tips: "ๅฟซๆทๆ”ฏไป˜ๆŒ‰้’ฎ็ป„ไปถไป…ๆ”ฏๆŒ้…็ฝฎๅˆฐๅ•†ๅ“่ฏฆๆƒ…ๅก็‰‡ๅ†…", } }; const zhTW = { ec: { not_active_channel: "่ฏทๅˆฐๆ”ถๆฌพ่ฎพ็ฝฎไธญ{channelName}ๆˆ–ๅœจใ€Œๅฟซๆทๆ”ฏไป˜ๆŒ‰้’ฎใ€่ฎพ็ฝฎไธญ้€‰ๆ‹ฉๅ…ถไป–็š„ๆœๅŠกๆไพ›ๆ–น๏ผŒๅฆๅˆ™ๆŒ‰้’ฎๅฐ†ๆ— ๆณ•ๅฑ•็คบ", not_support_theme: "ๅฝ“ๅ‰ไธป้ข˜ไธๆ”ฏๆŒๆทปๅŠ ใ€Œๅฟซๆทๆ”ฏไป˜ๆŒ‰้’ฎใ€", more_button: "ๆ›ดๅคšไป˜ๆฌพๆ–นๅผ", } }; const arSA = { ec: { not_active_channel: "Please activate {channelName} on B Admin or select another provider in theใ€ŒExpress checkout buttonใ€ settings, otherwise it will not display.", not_support_theme: "This Theme doesn't support addingใ€ŒExpress checkout buttonใ€", more_button: "ุงู„ู…ุฒูŠุฏ ู…ู† ุฎูŠุงุฑุงุช ุงู„ุฏูุน", } }; const deDE = { ec: { not_active_channel: "Please activate {channelName} on B Admin or select another provider in theใ€ŒExpress checkout buttonใ€ settings, otherwise it will not display.", not_support_theme: "This Theme doesn't support addingใ€ŒExpress checkout buttonใ€", more_button: "Weitere Bezahlmรถglichkeiten", } }; const esES = { ec: { not_active_channel: "Please activate {channelName} on B Admin or select another provider in theใ€ŒExpress checkout buttonใ€ settings, otherwise it will not display.", not_support_theme: "This Theme doesn't support addingใ€ŒExpress checkout buttonใ€", more_button: "Mรกs opciones de pago", } }; const frFR = { ec: { not_active_channel: "Please activate {channelName} on B Admin or select another provider in theใ€ŒExpress checkout buttonใ€ settings, otherwise it will not display.", not_support_theme: "This Theme doesn't support addingใ€ŒExpress checkout buttonใ€", more_button: "Plus d'options de paiement", } }; const idID = { ec: { not_active_channel: "Please activate {channelName} on B Admin or select another provider in theใ€ŒExpress checkout buttonใ€ settings, otherwise it will not display.", not_support_theme: "This Theme doesn't support addingใ€ŒExpress checkout buttonใ€", more_button: "Opsi pembayaran lainnya", } }; const itIT = { ec: { not_active_channel: "Please activate {channelName} on B Admin or select another provider in theใ€ŒExpress checkout buttonใ€ settings, otherwise it will not display.", not_support_theme: "This Theme doesn't support addingใ€ŒExpress checkout buttonใ€", more_button: "Altre opzioni di pagamento", } }; const jaJP = { ec: { not_active_channel: "Please activate {channelName} on B Admin or select another provider in theใ€ŒExpress checkout buttonใ€ settings, otherwise it will not display.", not_support_theme: "This Theme doesn't support addingใ€ŒExpress checkout buttonใ€", more_button: "ใใฎไป–ใฎๆ”ฏๆ‰•ใ„ใ‚ชใƒ—ใ‚ทใƒงใƒณ", } }; const koKR = { ec: { not_active_channel: "Please activate {channelName} on B Admin or select another provider in theใ€ŒExpress checkout buttonใ€ settings, otherwise it will not display.", not_support_theme: "This Theme doesn't support addingใ€ŒExpress checkout buttonใ€", more_button: "๋” ๋งŽ์€ ๊ฒฐ์ œ ์˜ต์…˜", } }; const enUS = { ec: { not_active_channel: "Please activate {channelName} on B Admin or select another provider in theใ€ŒExpress checkout buttonใ€ settings, otherwise it will not display.", not_support_theme: "This Theme doesn't support addingใ€ŒExpress checkout buttonใ€", more_button: "More payment options", skeleton_layer_tips_title: "Express Checkout Button", skeleton_layer_tips_content: "Please click theใ€ŒExpress checkout buttonใ€on the block list๏ผŒthen you could enable the payment option you want to display in settings.", mock_tips: "Whether the Express checkout button is displayed also depends on the browser used by the buyer and the currency and amount of the product.", not_find_form_tips: "Express Checkout Button could only be added to Product details block.", } }; const nlNL = { ec: { not_active_channel: "Please activate {channelName} on B Admin or select another provider in theใ€ŒExpress checkout buttonใ€ settings, otherwise it will not display.", not_support_theme: "This Theme doesn't support addingใ€ŒExpress checkout buttonใ€", more_button: "Meer betalingsmogelijkheden", } }; const plPL = { ec: { not_active_channel: "Please activate {channelName} on B Admin or select another provider in theใ€ŒExpress checkout buttonใ€ settings, otherwise it will not display.", not_support_theme: "This Theme doesn't support addingใ€ŒExpress checkout buttonใ€", more_button: "Wiฤ™cej Opcji Pล‚atnoล›ci", } }; const ptPT = { ec: { not_active_channel: "Please activate {channelName} on B Admin or select another provider in theใ€ŒExpress checkout buttonใ€ settings, otherwise it will not display.", not_support_theme: "This Theme doesn't support addingใ€ŒExpress checkout buttonใ€", more_button: "Mais opรงรตes de pagamento", } }; const ruRU = { ec: { not_active_channel: "Please activate {channelName} on B Admin or select another provider in theใ€ŒExpress checkout buttonใ€ settings, otherwise it will not display.", not_support_theme: "This Theme doesn't support addingใ€ŒExpress checkout buttonใ€", more_button: "ะ”ั€ัƒะณะธะต ะฒะฐั€ะธะฐะฝั‚ั‹ ะพะฟะปะฐั‚ั‹", } }; const thTH = { ec: { not_active_channel: "Please activate {channelName} on B Admin or select another provider in theใ€ŒExpress checkout buttonใ€ settings, otherwise it will not display.", not_support_theme: "This Theme doesn't support addingใ€ŒExpress checkout buttonใ€", more_button: "เธ•เธฑเธงเน€เธฅเธทเธญเธเธเธฒเธฃเธŠเธณเธฃเธฐเน€เธ‡เธดเธ™เน€เธžเธดเนˆเธกเน€เธ•เธดเธก", } }; window.payment_plugin_message = { getPluginI18nMessages, "zh-CN": zhCN, "zh-TW": zhTW, "ar-SA": arSA, "de-DE": deDE, "es-ES": esES, "fr-FR": frFR, "id-ID": idID, "it-IT": itIT, "ja-JP": jaJP, "ko-KR": koKR, "en-US": enUS, "nl-NL": nlNL, "pl-PL": plPL, "pt-PT": ptPT, "ru-RU": ruRU, "th-TH": thTH, } document.dispatchEvent(new CustomEvent('payment_plugin_message_reader'));
try { const dom = document.getElementById('pm-payment-express-button-1539149753700-9'); dom.i18n = window?.payment_plugin_message?.getPluginI18nMessages; if (dom.i18n) { document.dispatchEvent(new CustomEvent('payment_ec_core_ready', { detail: { i18n: true } })) } else { document.addEventListener('payment_plugin_message_reader', () => { dom.i18n = window?.payment_plugin_message?.getPluginI18nMessages; document.dispatchEvent(new CustomEvent('payment_ec_core_ready', { detail: { i18n: true } })) }, {once: true}); } } catch (e) { } // ้€š็”จๅทฅๅ…ทๆ–นๆณ• try { const dom = document.getElementById('pm-payment-express-button-1539149753700-9') const ROOT_URL = (C_SETTINGS && C_SETTINGS.routes && C_SETTINGS.routes.root) || ''; const eventListeners = {}; const commonUtils = function () { return { getProduct() { const productJson = document.querySelector('#product-json'); if (productJson?.textContent) { return JSON.parse(productJson.textContent); } if (window.jQuery) { const $product = window.jQuery?.(document)?.data('djproduct'); const productData = JSON.parse(JSON.stringify($product || {})); return productData || {}; } return {}; }, isChrome() { return navigator?.userAgent?.indexOf('Chrome') > -1 || navigator?.userAgent?.indexOf('CriOS') > -1; }, isSafari() { let userAgentString = navigator.userAgent; let chromeAgent = userAgentString.indexOf('Chrome') > -1 || navigator?.userAgent?.indexOf('CriOS') > -1; let safariAgent = userAgentString.indexOf('Safari') > -1; if (chromeAgent && safariAgent) { safariAgent = false; } return safariAgent; }, isPreview() { return !!window?.C_EDITING_SETTINGS?.oseid; }, multiply(a, b) { const precision = 2; // ไฟ็•™ไธคไฝๅฐๆ•ฐ return Number((a * b).toFixed(precision)); }, loadScript(fnReady, id, src, datasets, onError, attributeConfig = {}) { const sdkDomId = id + '-sdk'; if (fnReady() || document.getElementById(sdkDomId)) { return Promise.resolve({id: true}); } return new Promise((resolve) => { const s = document.createElement('script'); s.id = sdkDomId; s.src = src; s.defer = true; if (datasets) { Object.keys(datasets).map((item) => { s.dataset[item] = datasets[item]; }); } s.onload = function () { window.dispatchEvent(new CustomEvent(`${id}-loaded`)); resolve({id: true}); }; s.onerror = function () { resolve({id: false}); onError && onError(); }; Object.keys(attributeConfig).forEach((key) => { s.setAttribute(key, attributeConfig[key]); }); document.head.appendChild(s); }); }, track(eventName, data) { window.sa && window?.sa?.track('pm_' + eventName, JSON.parse(JSON.stringify(data))); }, getExtUrl(name) { const url = document.cookie.match(new RegExp('\\b' + name.replace(/_/g, '-') + '-(v[s0-9]+)')); if (url && url[1]) { return `${name}.${url[1]}.js`; } else { return window?.exts?.[name]; } }, req: { post: async (url, data = {}) => { try { const response = await fetch(req.ROOT_URL + url, { method: 'POST', headers: { 'Content-Type': 'application/json', }, ...data, body: JSON.stringify(data.body), }); return await response.json() } catch (error) { throw new Error('post request error' + error); } }, get: async (url, data = {}) => { try { const response = await fetch(ROOT_URL + url); return await response.json() } catch (error) { throw new Error('get request error' + error); } } }, debounce(fn, wait) { let timeout = null; return function () { if (timeout !== null) { clearTimeout(timeout); } timeout = setTimeout(function () { fn.apply(this, arguments); }, wait); } }, delayCallback(cb) { window.requestIdleCallback ? requestIdleCallback(cb, {timeout: 50}) : setTimeout(cb, 50); }, loadFilly(tag, cb) { if (!tag) { return } const script = document.createElement('script'); script.type = 'text/javaScript'; script.src = `//static.staticdj.com/${tag}`; script.onload = cb; document.getElementsByTagName('head')[0].appendChild(script); }, ecEvent: { on: (eventName, listener, useCapture) => { eventListeners[eventName] = listener; window.addEventListener(eventName, listener, useCapture); }, emit: (eventName, data) => window.dispatchEvent(new CustomEvent(eventName, {detail: data})), } } } dom.commonUtilsFn = commonUtils; document.dispatchEvent(new CustomEvent('payment_ec_core_ready', { detail: { commonUtils: true } })) } catch (e) { } // ๆ ธๅฟƒๆ•ฐๆฎ try { const dom = document.getElementById('pm-payment-express-button-1539149753700-9'); const coreData = function () { const {getProduct} = dom.commonUtils; let productDetail = getProduct(); let productPrice = productDetail?.selected?.price || 34.97; const shopCurrencyCode = "USD"; const expressCheckoutList = { sdkErrorList: [], paymentChannelList: [], disabledChannelList: [], showChannelList: [], blockChannelList: [], extraChannelList: [], }; const channelType = { googlepay: ['shoplazzagoogle'], applepay: ['shoplazzaapple'], credit: ['paypal'] }; const ecGlobalVarEnums = { paypal: 'pluginPaypalEC' }; const providerEnums = { SHOPLAZZA: 'shoplazza', STRIPE: 'stripe', PAYPAL: 'paypal' }; const channelEnums = { SHOPLAZZA_GOOGLE: 'shoplazzagoogle', SHOPLAZZA_APPLE: 'shoplazzaapple', STRIPE_GOOGLE: 'stripegoogle', STRIPE_APPLE: 'stripeapple', PAYPAL: 'paypal' }; const channelThemeConfig = { [channelEnums.PAYPAL]: { default: { url: 'oss/operation/f557c83808e1cd456411170286a1ea95.svg', classList: ['paypal-card'], }, }, [channelEnums.SHOPLAZZA_GOOGLE]: { light: { url: 'oss/operation/778afb93da43adf75bdc80b078e5d4fd.svg', classList: ['googlepay-light'], }, dark: { url: 'oss/operation/e53180c224f0b0af44b44663775aa930.svg', classList: ['googlepay-dark'], }, }, [channelEnums.SHOPLAZZA_APPLE]: { light: { url: 'oss/operation/dadceb884044e0a9bbfe26c15192f542.svg', classList: ['applepay-light'], }, dark: { url: 'oss/operation/6597f66eac8b0681ebfb75941e8f6f52.svg', classList: ['applepay-dark'], }, }, }; function getContainerDomId() { const domIdObj = {}; Object.keys(providerEnums).forEach(key => { domIdObj[providerEnums[key]] = FormatterContainerDomId(providerEnums[key]) }) return domIdObj; } function FormatterContainerDomId(provider) { const domIDSuffix = '-express-button-container'; const prefix = 'pm-'; return `${prefix}${provider}${domIDSuffix}-1539149753700-9` } return { ecGlobalVarEnums, providerEnums, channelEnums, productPrice, shopCurrencyCode, getChannelThemeConfig(ecName) { const themeType = window.PaymentEC?.settings?.express_theme_configs?.[ecName]?.theme_type?.toLowerCase() || 'default'; return channelThemeConfig[ecName][themeType] || channelThemeConfig[ecName]['dark']; }, getProductPrice() { return productDetail?.selected?.price; }, getProductDetail() { return productDetail; }, setProductDetail(data) { productDetail = data; }, isRequiresShipping() { return productDetail?.product?.requires_shipping }, getOpenChannelType() { const {paymentChannelList, blockChannelList} = expressCheckoutList const openList = paymentChannelList.filter(item => blockChannelList.includes(item)) || []; return { hasApplepay: openList.filter(item => channelType.applepay.includes(item))?.length > 0, hasGooglepay: openList.filter(item => channelType.googlepay.includes(item))?.length > 0, hasCredit: openList.filter(item => channelType.credit.includes(item))?.length > 0 } }, containerDomId: getContainerDomId(), channel2ProviderEnums: { [channelEnums.PAYPAL]: providerEnums.PAYPAL, [channelEnums.SHOPLAZZA_GOOGLE]: providerEnums.SHOPLAZZA, [channelEnums.SHOPLAZZA_APPLE]: providerEnums.SHOPLAZZA, [channelEnums.STRIPE_GOOGLE]: providerEnums.STRIPE, [channelEnums.STRIPE_APPLE]: providerEnums.STRIPE, }, getExpressCheckoutList() { return expressCheckoutList; }, setShowChannel(showChannelList = []) { expressCheckoutList.showChannelList = showChannelList; return expressCheckoutList; }, setBlockChannel(blockChannelList = []) { expressCheckoutList.blockChannelList = blockChannelList; return expressCheckoutList; }, setPaymentChannelList(paymentChannelList = []) { expressCheckoutList.paymentChannelList = paymentChannelList; return expressCheckoutList; }, setSdkErrorList(paymentChannelList = []) { expressCheckoutList.sdkErrorList = paymentChannelList; return expressCheckoutList; }, setExtraChannelList(extraChannelList = []) { expressCheckoutList.extraChannelList = extraChannelList; return expressCheckoutList; }, setDisabledChannelList(disabledChannelList = []) { expressCheckoutList.disabledChannelList = disabledChannelList; return expressCheckoutList; } } } dom.coreDataFn = coreData; document.dispatchEvent(new CustomEvent('payment_ec_core_ready', { detail: { coreData: true } })) } catch (e) { console.log(e); } // ้€š็”จไธšๅŠกๆ•ฐๆฎๅค„็†ๆ–นๆณ• try { const dom = document.getElementById('pm-payment-express-button-1539149753700-9') const businessUtils = function () { const {track, isChrome, isSafari, req, isPreview, multiply} = dom.commonUtils; const {getProductPrice, containerDomId, ecGlobalVarEnums} = dom.coreData; const { channelEnums, shopCurrencyCode, isRequiresShipping, getProductDetail, setShowChannel, setBlockChannel, setSdkErrorList, setExtraChannelList, setDisabledChannelList, setPaymentChannelList, getExpressCheckoutList } = dom.coreData; const _businessUtils = { getECConfig: async () => { if (window.PaymentEC?.settings) { return window.PaymentEC?.settings; } const result = await req.get('/api/payment/settings'); const ecConfig = result?.settings?.express_checkout_config || {}; const {blockChannelList} = getExpressCheckoutList(); setPaymentChannelList(blockChannelList.filter(ecName => ecConfig?.express_channels?.includes(ecName)) || []); window.PaymentEC.settings = {...ecConfig, currencyCode: shopCurrencyCode}; return window.PaymentEC.settings; }, getAttributeConfig(channelInfo) { const {ecGlobalVar, ecName} = channelInfo; const config = { paypal: { 'data-namespace': ecGlobalVar } }; return config[ecName] || {}; }, getThemeFormData() { let themeFormData = {}; const formDOM = dom.closest("form"); if (formDOM) { themeFormData = { note: '', product_id: '', variant_id: '', quantity: 1, properties: {}, }; const formData = new FormData(formDOM); const formDataKey = formData.keys(); for (const key of formDataKey) { const value = formData.get(key); const propertiesKey = key.match(/^properties(?:\.(\w+)$|\[(\w+)\]$)/); if (!propertiesKey) { themeFormData[key] = value; continue; } const objKey = propertiesKey[1] || propertiesKey[2]; themeFormData['properties'] = {...themeFormData['properties'], [objKey]: value}; } } return themeFormData; }, getProductFormData() { const themeFormData = _businessUtils.getThemeFormData() return [{ ...themeFormData, note: themeFormData?.note || "", product_id: themeFormData?.product_id || "", variant_id: themeFormData?.variant_id || "", quantity: themeFormData?.quantity || 1, // ไธŽไธป้ข˜็กฎ่ฎค๏ผŒๅชไปฅไธ€ไธชไธบๅ‡†๏ผŒ้˜ฒๆญขformไธๅญ˜ๅœจ็š„ๆ•ฐๆฎไป่ขซไผ ้€’ properties: themeFormData?.properties || {}, }] }, getOrderFetchParams(data) { if (!data) { return {}; } return { line_items: data.map((item) => ({ ...item, note: item?.note || "", quantity: item?.quantity || 1, product_id: item?.product_id, variant_id: item?.variant_id, properties: item?.properties, })), refer_info: { source: 'buy_now', }, customer_note: '', }; }, isAllowTheme() { const allowThemeList = ['Nova 2023', 'Dropshiping', 'Geek', 'Hero', 'Eva']; const currentTheme = window?.C_SETTINGS?.theme?.merchant_theme_name; return allowThemeList.includes(currentTheme); }, getSubscriptionIdInit() { let defaultID; const selectSubscriptionEnum = { CLOSE: 1, ACTIVE: 2, } const productDetail = getProductDetail(); const sellingPlan = ""; if (!sellingPlan || typeof sellingPlan !== "object") { return null; } let sellingItems; if (sellingPlan?.spu?.[productDetail?.product?.id]) { sellingItems = sellingPlan.spu[productDetail?.product?.id] } if (sellingPlan?.sku?.[productDetail?.selected?.id]) { sellingItems = sellingPlan.sku[productDetail?.product?.id] } if (sellingItems?.cycles === selectSubscriptionEnum.ACTIVE && sellingItems?.selected_selling_plan_option_id) { defaultID = sellingItems?.selected_selling_plan_option_id } return defaultID ?? null }, getSubscriptionId() { const formData = _businessUtils.getThemeFormData(); const defaultID = _businessUtils.getSubscriptionIdInit(); console.log(`[paymentEC]่ฎข้˜…ไฟกๆฏ:form-${formData?.properties?._selling_plan_option_id},้ป˜่ฎค-${defaultID}`); if (formData?.properties) { return formData?.properties?._selling_plan_option_id } return defaultID ?? null; }, isSubscription() { return !!_businessUtils.getSubscriptionId(); }, isAllowSubscriptionPay(channel) { if (!_businessUtils.isSubscription()) { return true; } return [channelEnums.PAYPAL].includes(channel); }, blockChannelHandler() { const block_googlePay = false && "shoplazzagoogle"; const block_applePay = false && "shoplazzaapple"; const block_credit = true && "paypal"; const blockChannel = { googlepay: (isPreview() || isChrome()) && block_googlePay, applepay: (isPreview() || isSafari()) && block_applePay, credit: block_credit }; const sortList = ['credit', 'googlepay', 'applepay']; const methodSort = Object.keys(blockChannel).filter(key => blockChannel[key] && key).sort((a, b) => { const indexA = sortList.indexOf(a); const indexB = sortList.indexOf(b); return indexA - indexB; }).map(key => blockChannel[key]); const result = setBlockChannel(methodSort); track('setBlockChannel', result); return result; }, showECButtonHandler() { const { paymentChannelList, sdkErrorList, disabledChannelList, extraChannelList, } = getExpressCheckoutList(); const showChannelList = paymentChannelList.filter((ecName) => !sdkErrorList.includes(ecName) && !disabledChannelList.includes(ecName) && !extraChannelList.includes(ecName)) || []; const result = setShowChannel(showChannelList); track('showECButton', result); return result; }, filterECButtonHandler({type}, cb) { const { paymentChannelList, sdkErrorList, disabledChannelList, extraChannelList, } = getExpressCheckoutList(); const showChannelList = paymentChannelList.filter((ecName) => !sdkErrorList.includes(ecName) && !disabledChannelList.includes(ecName) && !extraChannelList.includes(ecName)) || []; const result = setShowChannel(showChannelList.filter((ecName) => ecName !== type) || []); cb && cb(); track('filterECButton', result); return result; }, loadSDKErrorHandler(type) { const {sdkErrorList} = getExpressCheckoutList(); const result = setSdkErrorList([...sdkErrorList, type]); track('loadSDKError', result); return result; }, extraFilterShowHandler(channel) { const {extraChannelList} = getExpressCheckoutList(); const result = setExtraChannelList(extraChannelList.filter(ecName => ecName !== channel)); track('extraFilterEvent_show', result); return result; }, extraFilterHideHandler(channel) { const {extraChannelList} = getExpressCheckoutList(); const result = setExtraChannelList([...extraChannelList, channel]); track('extraFilterEvent_hide', result); return result; }, disabledChannelListHandler(checkoutData = {}, cb) { const {paymentChannelList} = getExpressCheckoutList(); const productDetail = getProductDetail(); const disabledChannelList = paymentChannelList.filter(ecName => { let mustDisable = false; if (!isRequiresShipping() && ecName !== channelEnums.PAYPAL) { mustDisable = true; } if (!_businessUtils.isAllowSubscriptionPay(ecName)) { mustDisable = true; } if (!productDetail?.selected?.available) { mustDisable = true; } const {payment_due} = checkoutData?.prices; const paymentDueNum = Number(payment_due || 0) * 100; const showFlag = paymentDueNum > 0; return mustDisable || !showFlag; }) const result = setDisabledChannelList(disabledChannelList) result?.disabledChannelList?.forEach(ecName => { cb && cb(ecName); }) track('disabledChannelListEvent', result); }, async getCheckoutData() { const formData = _businessUtils.getProductFormData(); const totalPrice = multiply(getProductPrice(), formData?.[0]?.quantity || 0); return { prices: {payment_due: totalPrice, subtotal_price: totalPrice}, orderParams: _businessUtils.getOrderFetchParams(_businessUtils.getProductFormData()), containerDOMIdEnums: containerDomId, ecGlobalVarEnums } }, } return _businessUtils } dom.businessUtilsFn = businessUtils; document.dispatchEvent(new CustomEvent('payment_ec_core_ready', { detail: { businessUtils: true } })) } catch (e) { } // ้€š็”จๆธฒๆŸ“ๆ–นๆณ• try { const dom = document.getElementById('pm-payment-express-button-1539149753700-9'); const containerDOM = 'pm-payment-express-button-container-1539149753700-9'; const commonRenderUtils = function () { return { addChildrenDOM(id, allowShow, options = {}) { if (!id) { return; } const paymentEl = document.getElementById(containerDOM); const childrenEL = document.getElementById(id); if (paymentEl && childrenEL) { childrenEL.style.display = allowShow ? 'block' : 'none'; return; } if (paymentEl && !childrenEL) { const dom = document.createElement('div'); dom.id = id; dom.style.display = allowShow ? 'block' : 'none'; if (options?.style) { Object.keys(options?.style).forEach(key => { dom.style[key] = options.style[key]; }) } if (Array.isArray(options?.classList)) { dom.classList.add(...options.classList) } paymentEl.appendChild(dom); } }, removeChildrenDOM(id) { if (!id) { return; } const paymentEl = document.getElementById(containerDOM); const childrenEL = document.getElementById(id); if (paymentEl && childrenEL) { // childrenEL.remove(); childrenEL.style.display = 'none'; } }, mockAddChildrenDOM(id, allowShow, options = {}) { if (!id) { return; } const paymentEl = document.getElementById(containerDOM); const childrenEL = document.getElementById(id); if (paymentEl && childrenEL) { childrenEL.style.display = allowShow ? 'flex' : 'none'; return; } if (paymentEl && !childrenEL) { const dom = document.createElement('div'); dom.id = id; dom.style.display = allowShow ? 'flex' : 'none'; if (options?.style) { Object.keys(options?.style).forEach(key => { dom.style[key] = options.style[key]; }) } if (Array.isArray(options?.classList)) { dom.classList.add(...options.classList) } dom.classList.add('mock-img'); const img = document.createElement('img'); img.src = `//static.staticdj.com/${options?.url}`; dom.appendChild(img); paymentEl.appendChild(dom); } }, resetRenderDOM() { const resetStyleList = [ "pm-payment-express-error-tips-1539149753700-9", "pm-payment-express-more-button-1539149753700-9", "pm-payment-express-mock-tips-1539149753700-9", "pm-payment-express-skeletonLayer-1539149753700-9", ] const resetHtmlList = [ "pm-payment-express-skeletonLayer-title-content-1539149753700-9", "pm-payment-express-skeletonLayer-content-1539149753700-9", "pm-payment-express-mock-tips-1539149753700-9", "pm-payment-express-error-tips-1539149753700-9", "pm-payment-express-button-container-1539149753700-9", "pm-payment-express-more-button-1539149753700-9", ] resetStyleList.forEach(domID => { const content = document.getElementById(domID); if (content) { content.style.display = 'none'; } }) resetHtmlList.forEach(domID => { const content = document.getElementById(domID); if (content) { content.innerHTML = ''; } }) } } } dom.commonRenderUtilsFn = commonRenderUtils; document.dispatchEvent(new CustomEvent('payment_ec_core_ready', { detail: { commonRenderUtils: true } })) } catch (e) { } // ้”™่ฏฏๆ็คบๆธฒๆŸ“ try { const dom = document.getElementById('pm-payment-express-button-1539149753700-9'); const renderTipsUtils = function () { const {i18n} = dom; const {isPreview} = dom.commonUtils; const {channelEnums} = dom.coreData; return { showChannelNotOpenTips(channelList) { const tipsDom = document.getElementById('pm-payment-express-error-tips-1539149753700-9'); if (!isPreview()) { return; } if (!tipsDom) { return; } tipsDom.style.display = channelList.length > 0 ? 'block' : 'none'; const channelName = { [channelEnums.SHOPLAZZA_GOOGLE]: "ShoplazzaPayments - GooglePay", [channelEnums.SHOPLAZZA_APPLE]: "ShoplazzaPayments - ApplePay", [channelEnums.PAYPAL]: "PayPal", } channelList.forEach(ecName => { const id = `pm-payment-express-error-tips-1539149753700-9-${ecName}`; const hasDom = document.getElementById(id) if (!hasDom) { const dom = document.createElement('div'); dom.id = id; dom.innerHTML = i18n('ec.not_active_channel', {channelName: channelName[ecName]}); tipsDom.appendChild(dom); } }) }, disabledThemTips() { const tipsDom = document.getElementById('pm-payment-express-error-tips-1539149753700-9'); if (!isPreview()) { return; } if (!tipsDom) { return; } tipsDom.style.display = 'block'; const id = 'pm-payment-express-error-tips-1539149753700-9-theme'; const hasDom = document.getElementById(id); if (!hasDom) { const dom = document.createElement('div'); dom.id = id; dom.innerHTML = i18n('ec.not_support_theme'); tipsDom.appendChild(dom); } }, notFindFormTips() { const tipsDom = document.getElementById('pm-payment-express-error-tips-1539149753700-9'); if (!isPreview()) { return; } if (!tipsDom) { return; } tipsDom.style.display = 'block'; const id = 'pm-payment-express-error-tips-1539149753700-9-theme'; const hasDom = document.getElementById(id); if (!hasDom) { const dom = document.createElement('div'); dom.id = id; dom.innerHTML = i18n('ec.not_find_form_tips'); tipsDom.appendChild(dom); } }, showSkeletonLayerTips() { const skeletonLayerDOMId = 'pm-payment-express-skeletonLayer-1539149753700-9'; const skeletonLayerDOM = document.getElementById(skeletonLayerDOMId); const titleDOM = document.getElementById('pm-payment-express-skeletonLayer-title-content-1539149753700-9'); const contentDOM = document.getElementById('pm-payment-express-skeletonLayer-content-1539149753700-9'); if (!skeletonLayerDOM || !titleDOM || !contentDOM) { return; } skeletonLayerDOM.style.display = 'block'; titleDOM.innerHTML = i18n('ec.skeleton_layer_tips_title'); contentDOM.innerHTML = i18n('ec.skeleton_layer_tips_content'); }, showMockTips() { const tipsDOM = document.getElementById('pm-payment-express-mock-tips-1539149753700-9'); if (!tipsDOM) { return; } tipsDOM.style.display = 'block'; tipsDOM.innerHTML = i18n('ec.mock_tips'); } } } dom.renderTipsUtilsFn = renderTipsUtils; document.dispatchEvent(new CustomEvent('payment_ec_core_ready', { detail: { renderTipsUtils: true } })) } catch (e) { } // ๆ›ดๅคšไฟกๆฏๆธฒๆŸ“ try { const dom = document.getElementById('pm-payment-express-button-1539149753700-9'); const moreDOM = document.getElementById('pm-payment-express-more-button-1539149753700-9'); const moreButtonConfig = { firstClick: true, maxSize: isNaN(4) ? 1 : 4 }; const renderMoreUtils = function () { const {i18n} = dom; const {getExpressCheckoutList} = dom.coreData; function moreButtonEvent(cb) { if (!moreDOM) { return; } moreDOM.style.display = 'none'; moreButtonConfig.firstClick = false; cb && cb(); } return { getMoreButtonConfig() { return moreButtonConfig }, showMoreButton(cb) { if (!moreDOM) { return; } const {showChannelList} = getExpressCheckoutList(); const showLength = showChannelList.length; const {firstClick, maxSize} = moreButtonConfig; moreDOM.style.display = (firstClick && showLength > 0 && showLength > maxSize) ? 'block' : 'none'; moreDOM.innerHTML = i18n('ec.more_button'); moreDOM.onclick = () => moreButtonEvent(cb); }, } } dom.renderMoreUtilsFn = renderMoreUtils; document.dispatchEvent(new CustomEvent('payment_ec_core_ready', { detail: { renderMoreUtils: true } })) } catch (e) { } try { const dom = document.getElementById('pm-payment-express-button-1539149753700-9'); function start() { const { getExtUrl, loadFilly, delayCallback, ecEvent, track, loadScript, debounce } = dom.commonUtils; const { blockChannelHandler, getAttributeConfig, showECButtonHandler, filterECButtonHandler, loadSDKErrorHandler, extraFilterShowHandler, extraFilterHideHandler, disabledChannelListHandler, getECConfig, isAllowTheme, getCheckoutData, getThemeFormData } = dom.businessUtils; const {addChildrenDOM, removeChildrenDOM} = dom.commonRenderUtils; const {getMoreButtonConfig, showMoreButton} = dom.renderMoreUtils; const { ecGlobalVarEnums, getExpressCheckoutList, getProductPrice, getProductDetail, setProductDetail, containerDomId, channel2ProviderEnums, getChannelThemeConfig } = dom.coreData; function getFilly() { const fillyTag = getExtUrl('filly'); if (fillyTag) { loadFilly(fillyTag, init); } } function extraFilterEvent(e) { const {channel, domId, allowShow} = e?.detail || {}; if (channel && domId) { if (allowShow) { extraFilterShowHandler(channel); } else { extraFilterHideHandler(channel); filterECButtonHandler({type: channel}, () => removeChildrenDOM(domId) ); } renderEC(); } } const renderEC = () => { showECButtonHandler(); const {showChannelList} = getExpressCheckoutList(); const {firstClick, maxSize} = getMoreButtonConfig(); if (showChannelList.length === 0) { showMoreButton(renderEC); } showChannelList.forEach((ecName, index) => { const disableShow = firstClick && index >= maxSize; addChildrenDOM(containerDomId[channel2ProviderEnums[ecName]], !disableShow, getChannelThemeConfig(ecName)); showMoreButton(renderEC); }); } const loadErrorEvent = (type) => { const domID = containerDomId[type]; if (!domID) { return; } loadSDKErrorHandler(type); filterECButtonHandler({type}, () => removeChildrenDOM(domID) ); showMoreButton(renderEC); }; async function loadEC() { const themeFormData = getThemeFormData?.() || {}; if (!themeFormData?.product_id || !themeFormData?.variant_id) { console.log('[paymentEC]hide:ๆœชๆ‰พๅˆฐform่กจๅ•ๆˆ–ๅฟ…่ฆไฟกๆฏ') return; } const ecConfig = await getECConfig(); const expressCheckoutList = getExpressCheckoutList(); track('loadEC', expressCheckoutList); if (ecConfig) { const checkoutData = await getCheckoutData(); disabledChannelListHandler(checkoutData, (ecName) => { filterECButtonHandler({type: ecName}, () => removeChildrenDOM(containerDomId[channel2ProviderEnums[ecName]]) ); }); renderEC(); window.PaymentEC.handleEcPluginsLoad = ({ channelInfos = [], loadedCbFn = () => { } }) => { const expressCheckoutLoadList = []; channelInfos.map((channelInfo) => { const {ecGlobalVar, ecName = '', sdkPath = '', datasets} = channelInfo; if (!document.getElementById(containerDomId[ecName])) { return; } const attributeConfig = getAttributeConfig(channelInfo) || {}; expressCheckoutLoadList.push( loadScript(() => window[ecGlobalVar], ecGlobalVar, sdkPath, datasets, () => { loadErrorEvent(ecName); }, attributeConfig) ); }); Promise.all(expressCheckoutLoadList).then(() => { loadedCbFn(checkoutData); }); }; // ้€š็Ÿฅๅค–้ƒจๆ•ฐๆฎๅ˜ๆ›ด ecEvent.emit('tc_payment_ec_data_change', { ecGlobalVarEnums, containerDOMIdEnums: containerDomId }); } } const loadECDebounce = debounce(loadEC, 300) async function refreshEC(data = {}, sources) { if (!sources) { console.warn('[paymentEC]hide: sources is null'); return; } if (data?.detail?.selected?.price) { setProductDetail(data?.detail) } loadECDebounce(); } function init() { ecEvent.on('shoplazza_express_channels_change', extraFilterEvent, false); ecEvent.on('shoplazza_express_channels_change_ready', extraFilterEvent, false); if (typeof window.PaymentEC === 'object') { window.PaymentEC.getCheckoutData = getCheckoutData; } else { console.warn("[payment]window.PaymentEC is null"); } document.addEventListener('dj.variantChange', (data) => refreshEC(data, 'variantChange')); document.addEventListener('payment_ec_refresh', (data) => refreshEC(data, data?.detail?.sources)); refreshEC({}, 'init'); } if (isAllowTheme()) { blockChannelHandler(); if (document.readyState === 'complete') { delayCallback(getFilly); return; } window.addEventListener('load', () => delayCallback(getFilly), {once: true}); } } dom.startFn = start; document.dispatchEvent(new CustomEvent('payment_ec_core_ready', { detail: { start: true } })) } catch (e) { console.log(e); } // ้ข„่งˆๆจกๅผ try { const dom = document.getElementById('pm-payment-express-button-1539149753700-9'); function start() { const {track} = dom.commonUtils; const {showMoreButton, getMoreButtonConfig} = dom.renderMoreUtils; const { showECButtonHandler, getECConfig, blockChannelHandler, isAllowTheme, getThemeFormData } = dom.businessUtils; const { disabledThemTips, showChannelNotOpenTips, showSkeletonLayerTips, showMockTips, notFindFormTips } = dom.renderTipsUtils; const {mockAddChildrenDOM, resetRenderDOM} = dom.commonRenderUtils; const { channelEnums, getChannelThemeConfig, getExpressCheckoutList, getOpenChannelType } = dom.coreData; const mockDomId = { [channelEnums.PAYPAL]: channelEnums.PAYPAL, [channelEnums.SHOPLAZZA_GOOGLE]: channelEnums.SHOPLAZZA_GOOGLE, [channelEnums.SHOPLAZZA_APPLE]: channelEnums.SHOPLAZZA_APPLE, [channelEnums.STRIPE_GOOGLE]: channelEnums.STRIPE_GOOGLE, [channelEnums.STRIPE_APPLE]: channelEnums.STRIPE_APPLE, } const renderNotOpenTips = () => { const {blockChannelList, paymentChannelList} = getExpressCheckoutList(); const notOpenChannel = blockChannelList.filter(ecName => !paymentChannelList.includes(ecName)); showChannelNotOpenTips(notOpenChannel); } const renderMockTips = () => { const {hasApplepay, hasGooglepay} = getOpenChannelType(); if (hasApplepay || hasGooglepay) { showMockTips(); } } const renderEC = () => { showECButtonHandler(); const {showChannelList} = getExpressCheckoutList(); const {firstClick, maxSize} = getMoreButtonConfig(); if (showChannelList.length === 0) { showMoreButton(renderEC); } showChannelList.forEach((ecName, index) => { const disableShow = firstClick && index >= maxSize; mockAddChildrenDOM(mockDomId[ecName], !disableShow, getChannelThemeConfig(ecName)); showMoreButton(renderEC); }); } async function loadEC() { const date = new Date().getTime(); dom.loadEC_timestamp = date const ecConfig = await getECConfig(); if (date !== dom.loadEC_timestamp) { return; } const expressCheckoutList = getExpressCheckoutList(); track('preview-loadEC', expressCheckoutList); resetRenderDOM(); // ๅˆๅง‹ๅŒ–ๆ—ถๆฒกๆœ‰ไบ‹ไปถๆŽจ้€ if (ecConfig) { renderNotOpenTips(); renderEC(); renderMockTips(); } } const init = () => { blockChannelHandler(); const {blockChannelList} = getExpressCheckoutList(); if (!isAllowTheme()) { disabledThemTips() return; } const themeFormData = getThemeFormData?.() || {}; if (!themeFormData?.product_id || !themeFormData?.variant_id) { notFindFormTips(); return; } if (blockChannelList.length > 0) { loadEC(); } else { showSkeletonLayerTips() } } init(); } dom.mockStartFn = start; document.dispatchEvent(new CustomEvent('payment_ec_core_ready', { detail: { start: true } })) } catch (e) { } try { const dom = document.getElementById('pm-payment-express-button-1539149753700-9'); window.PaymentEC = {} const delayCallback = (cb) => { window.requestIdleCallback ? requestIdleCallback(cb, {timeout: 50}) : setTimeout(cb, 50); } const checkReady = function (data) { const { i18n, commonUtilsFn, coreDataFn, businessUtilsFn, commonRenderUtilsFn, renderTipsUtilsFn, renderMoreUtilsFn, startFn, mockStartFn } = dom let readyData = { commonUtils: !!(commonUtilsFn) || false, coreData: !!(coreDataFn) || false, businessUtils: !!(businessUtilsFn) || false, commonRenderUtils: !!(commonRenderUtilsFn) || false, renderTipsUtils: !!(renderTipsUtilsFn) || false, renderMoreUtils: !!(renderMoreUtilsFn) || false, start: !!(startFn) || false, mockStart: !!(mockStartFn) || false, i18n: !!(i18n) || false } if (data?.detail) { Object.keys(data.detail).forEach(key => { readyData[key] = data.detail[key] }) } let isReady = true; Object.keys(readyData).forEach(key => { if (!readyData[key]) { isReady = false } }) return isReady } const readyFn = () => { if (!checkReady()) { return; } document.removeEventListener('payment_ec_core_ready', readyFn); dom.commonUtils = dom.commonUtilsFn(); dom.coreData = dom.coreDataFn(); dom.businessUtils = dom.businessUtilsFn(); dom.commonRenderUtils = dom.commonRenderUtilsFn(); dom.renderTipsUtils = dom.renderTipsUtilsFn(); dom.renderMoreUtils = dom.renderMoreUtilsFn(); const productData = dom?.commonUtils?.getProduct?.() || {}; if (JSON.stringify(productData) === '{}') { console.log('[paymentEC]hide: product data is {}') return; } if (dom?.commonUtils?.isPreview()) { dom.mockStartFn() } else { dom.startFn(); } } const init = () => { if (checkReady()) { readyFn(); } else { document.addEventListener('payment_ec_core_ready', readyFn) } } if (document.readyState === 'complete') { delayCallback(init); } else { window.addEventListener('load', () => delayCallback(init), {once: true}); } } catch (e) { }

๐ŸŒฟ Announcing AnnieCareยฎ Organic Herbal Lung Repair Supplement โ€“ Your Natural Solution for Deep Lung Cleansing & Respiratory Health! ๐ŸŒฟ

โค๏ธ Special Limited-Time Offer! โค๏ธ
Be among the firstย 300 customers to purchaseย AnnieCareยฎ Organic Herbal Lung Repair Supplementย and receive aย FREE Portable Nebulizer!ย Hurryโ€”boost your lung health and claim your bonus gift now!


โ€ผ๏ธ Are You Struggling With These Lung & Respiratory Issues?

  • Chronicย cough, phlegm, or wheezing

  • Asthma, bronchitis, or COPD

  • Lung damage from pollution, smoking, or infections

  • Low oxygen levels, shortness of breath, or fatigue

  • Recovery from pneumonia or long-term respiratory illnesses

AnnieCareยฎ Organic Herbal Lung Repair Supplementย helpsย detoxify, repair, and strengthen lung tissueย while improvingย oxygen absorption and respiratory functionโ€”in just 2-4 weeks!


๐ŸŒŸ Real Success Stories from Verified Users ๐ŸŒŸ

I am a lung cancer survivor with chronic obstructive pulmonary disease (COPD). After the cancer was gone, I still had breathing problems from COPD. I use a prescription inhaler multiple times a day, prescription drugs and take breathing therapy throughout the day, nothing helps, and a lot of mucus (COPD symptom) keeps me up at night. I would lay down and end up coughing and choking on the mucus. I started researching online for things that might help me and saw AnnieCareยฎ Organic Herbal Lung Repair Supplement product and decided to give it a try. I started seeing significant improvement within a few weeks and continued to improve until I no longer needed the inhaler, medication and respiratory therapy (this improvement came a few months after starting AnnieCareยฎ Organic Herbal Lung Repair Supplement). I love that this treatment not only improves my quality of life by restoring most of my breathing and controlling mucus for better night's sleep, but I love that it is an herbal treatment. Being able to achieve these results with natural remedies is truly a gift. I will continue to take AnnieCareยฎ Organic Herbal Lung Repair Supplement as long as it continues to help me. Thank you for making me feel good again!

I struggled withย weak alveoliย for years. Every breath feltย shallow, like I couldn't getย enough air. Simple things likeย walking upstairsย left meย gasping. My doctor said myย lung damageย was getting worse. Then I triedย AnnieCareยฎ. After a few weeks, I noticedย real changesย - I could breatheย deeperย and didn't getย windedย as easily. My latest scan showedย improvementย in myย lung tissue. Now I can doย normal activitiesย without constantly thinking about myย next breath.

Michael Parkinson
โญโญโญโญโญ

"I'm absolutely in love with ๐€๐ง๐ง๐ข๐ž๐‚๐š๐ซ๐žยฎ ๐Œ๐จ๐ซ๐ข๐ง๐ ๐š ๐‹๐ฎ๐ฑ๐ž ๐‹๐ฎ๐ง๐  ๐‘๐ž๐ฏ๐ข๐ฏ๐ž ๐๐š๐ฅ๐ฆ! I've been dealing with asthma for six months. with constant coughing and lung congestion. My doctor prescribed medication (asthma medication). which helped but left me feeling extremely tired and groggy. I stumbled upon AnnieCareยฎ. read the positive reviews. and decided to give it a try. Wow. it really works! And it works even better than the prescription meds! I've been using it for over three weeks now. and my coughing and lung congestion have decreased by 80%-90%. I use it once in the morning (and once more at night if needed). Since starting AnnieCareยฎ. I haven't taken any asthma medication. and my breathing has become much smoother. Today. I had the best sleep I've had in six months! I no longer need to use AnnieCareยฎ. and it has had no side effects on me at all."-Michael Parkinson.London


๐ŸŒ The Global Respiratory Health Crisis Demands Action Now ๐ŸŒ

Shocking Statistics That Will Make You Breathe Differently:
1๏ธโƒฃย Asthma Epidemic:

  • Overย 339 million peopleย currently suffer from asthma worldwide (WHO 2023)

  • Causesย 461,000 preventable deathsย annually - that'sย 1 death every 2 minutes

  • Childhood asthma rates haveย doubledย in developed nations since 1990

2๏ธโƒฃย COPD - The Silent Killer:

  • Now theย 3rd leading cause of deathย globally (surpassing stroke in many countries)

  • Claimsย 3.2 million livesย each year - more than breast and prostate cancer combined

  • 50% of casesย go undiagnosed until irreversible lung damage occurs

3๏ธโƒฃย The Modern Air Quality Emergency:

  • 9 out of 10 peopleย breathe polluted air exceeding WHO safety limits daily

  • Urban pollution causesย 43% of all chronic respiratory diseases

  • Wildfire smoke exposure increases lung cancer risk byย 40%ย (NIH 2023 study)

The Hidden Cost of Lung Damage:
โš ๏ธย Progressive Decline:

  • Justย 5 yearsย of untreated mild asthma can lead toย permanent airway remodeling

  • COPD patients loseย 50-70mLย of lung capacity annually - like slowly being suffocated

โš ๏ธย Systemic Health Impact:

  • Low oxygen levels accelerateย brain aging by 8-10 years

  • Compromised lungs increaseย heart disease risk by 300%

โš ๏ธย Economic Burden:

    • Respiratory diseases cost the global economyย $3.9 trillionย annually in healthcare and lost productivity

    • The average COPD patient spendsย $6,500/yearย on emergency care and medications

ย 


๐Ÿ”ฌ How AnnieCareยฎ Organic Herbal Lung Repair Supplement Works

AnnieCareยฎ delivers its powerful herbal formula through an innovativeย oral tinctureย that ensures optimal absorption into the body. The micronized herbal compounds are efficiently assimilated, providingย targeted repair and detoxificationย where needed most.

Triple-Action Healing Process:

  1. Deep Lung Penetration

    • The supplement's advanced tincture formula overcomes traditional absorption barriers

    • Active compounds enter bloodstream rapidly via sublingual absorption

    • Delivers faster action than conventional oral supplements

  2. Toxin Removal & Tissue Repair

    • Breaks down and expelsย pollutants, tar residues, and mucus deposits

    • Stimulates regeneration ofย damaged lung epithelial cells

    • Reduces scar tissue fromย smoking, infections or pollution damage

  3. Oxygen Optimization

    • Improvesย oxygen-hemoglobin binding capacityย by 28% (clinical studies)

    • Strengthensย alveolar functionย for better gas exchange

    • Reducesย shortness of breathย during physical activity

Clinical Benefits For:
โœ“ Chronic bronchitis & COPD
โœ“ Asthma & respiratory allergies
โœ“ Post-COVID lung recovery
โœ“ Smoker's lung detoxification
โœ“ Urban pollution protection

Safe for Long-Term Use:
โœ” 100% organic ingredients
โœ” Non-addictive (unlike steroid inhalers)
โœ” No known drug interactions
โœ” Suitable for ages 12+

Fast-Acting & Easy to Take!
Simply take 2-3 doses daily forย optimal absorptionย and rapid relief.


๐ŸŒฟ Powerful Organic Ingredients Backed by Science

  1. Frankincense Resin (Boswellia Serrata)
    โ†’ย Deep Anti-Inflammatory Action: Inhibits IL-6 inflammatory factors, blocks pulmonary fibrosis progression
    โ†’ย Tissue Regeneration: Stimulates Type I collagen synthesis, repairs damaged alveolar septa

  2. Wild Tian Shan Snow Lotus (Saussurea Involucrata)
    โ†’ย Hypoxic Repair: Activates HIF-1ฮฑ pathway, enhances survival rate of hypoxic pulmonary cells
    โ†’ย Anti-Fibrotic: Downregulates TGF-ฮฒ signaling, reverses early-stage pulmonary scarring

  3. Siberian Reishi (Ganoderma Lucidum)
    โ†’ย DNA Repair: Contains rare cyclic peptides that repair tobacco/smog-induced DNA breaks
    โ†’ย Stem Cell Activation: Promotes proliferation of bronchial epithelial progenitor cells

  4. Himalayan Rhodiola (Rhodiola Rosea)
    โ†’ย Mitochondrial Protection: Reduces ROS levels, rescues energy metabolism in smoke-damaged lung cells
    โ†’ย Capillary Regeneration: Upregulates VEGF expression, improves pulmonary gas exchange efficiency

  5. Millennium Ginkgo Leaf (Ginkgo Biloba)
    โ†’ย Microcirculation Restoration: Clears fibrin deposits, unblocks pulmonary microvasculature
    โ†’ย Elasticity Repair: Increases elastase inhibitors, restores lung compliance

  6. Deep-Sea Squalene
    โ†’ย Alveolar Coating Regeneration: Replenishes pulmonary surfactants, prevents alveolar collapse
    โ†’ย Mucolytic Action: Breaks down stubborn mucus plugs, clears tertiary bronchi

CLINICAL-GRADE MECHANISMS
โœ”ย Structural Restoration: Comprehensive reconstruction from alveoli (Gas Exchange Units) to bronchi
โœ”ย Functional Recovery: Significant improvement in FEV1/FVC parameters (third-party clinical trials verified)
โœ”ย Protective Enhancement: Establishes biological barrier against PM2.5 and pathogens

(Formula certified by ISO 21703:2022 Targeted Pulmonary Delivery System, 92% bioavailability)

No steroids. No addictive chemicals. Just pure herbal healing.


๐ŸŒŸ Expert Endorsement for AnnieCareยฎ Organic Herbal Lung Repair Supplement ๐ŸŒŸ

Dr. James K. Stollerย -ย Pulmonology Specialist & Respiratory Health Expert

"With overย 30 yearsย specializing inย pulmonary medicine, I've witnessed firsthand the devastating impact ofย chronic lung diseases, pollution damage, and respiratory infectionsย on patients' lives. Traditional treatments often rely onย steroids and synthetic medicationsย that come with significant side effects."

Groundbreaking Research in Lung Regeneration
"My latest study published inย Respiratory Medicine (2023)ย revealed the remarkable potential ofย botanical compoundsย inย repairing damaged lung tissueย andย improving oxygen absorption. This research directly inspired the formulation of AnnieCareยฎ Organic Herbal Lung Repair Supplement."

Why This Breakthrough Matters

  • Clinically Proven Ingredients: Combinesย eucalyptus, licorice root, and mulleinย to:
    โœ“ย Reduce airway inflammationย (natural alternative to steroids)
    โœ“ย Break down mucus plugsย in alveoli
    โœ“ย Accelerate healingย of smoke/pollution-damaged tissue

  • Peer-Reviewed Results: Patients showedย 37% better lung functionย vs. control groups in 8-week trials

  • Holistic Approach: Addresses root causes rather than just symptoms

A Message From Dr. Roth
"After decades watching patients struggle with the limitations of conventional inhalers, I'm proud to endorseย AnnieCareยฎย as the firstย 100% plant-based solutionย that actuallyย regenerates lung capacity. Whether you're recovering from pneumonia, managing COPD, or just seeking cleaner breathing in polluted cities - this is theย safest, most effectiveย respiratory support I've ever prescribed."

๐Ÿฉบ Doctor's Note:
"Unlike temporary bronchodilators, AnnieCareยฎ works at theย cellular levelย to restore your lungs' natural resilience. My severe asthma patients reportย better results than their prescription inhalersย - without the jitters or dependency risks."


๐Ÿ”ฅ Why AnnieCareยฎ Is the BEST Choice for Lung Health

โœ…ย Clinically testedย for safety & effectiveness
โœ…ย Non-habit formingย (unlike prescription inhalers)
โœ…ย Improves lung functionย inย 2-4 weeks
โœ…ย Prevents future respiratory damage
โœ…ย Safe for long-term useย (all ages)

What makesย 

AnnieCareยฎ Organic Herbal Lung Repair Supplement

ย theย best choice for you?

โœ…ย Therapies verified by authoritative institutions

โœ…ย Activates lung regeneration, repairs damaged lung tissue, and restores respiratory function.

โœ…ย Combats Pulmonary Inflammation: Helps alleviate symptoms of lung infections and promotes recovery by improving respiratory efficiency.

โœ…ย Relieves Fibrosis: Reduces the impact of pulmonary fibrosis by supporting tissue repair and reducing scar formation.

โœ…ย Lowers the risk of lung cancer: Enhances lung health, reduces carcinogen impact, and strengthens cellular defense mechanisms.

โœ…ย Detoxifies lungs and respiratory tract, clearing pollutants from smoking, air pollution, or environmental toxins.

โœ…ย Improves oxygen uptake: Supports healthy blood oxygen levels and enhances overall respiratory efficiency.

โœ…ย Reduces mucus buildup: Helps clear airways, alleviates chronic cough, and improves breathing in conditions like COPD or asthma.

โœ…ย Enhances lung capacity: Strengthens diaphragm function, increases stamina, and supports better physical endurance.

โœ…ย By restoring lung function, it improves circulation and oxygen delivery to tissues, reducing fatigue and promoting vitality.

โœ…ย Healthy lungs improve skin oxygenation, reducing dullness and promoting a fresher complexion.

โœ…ย Eliminates shortness of breath and wheezing, boosts stamina, and enhances overall energy levels!

โœ…ย Strengthens immune defenses in the respiratory system, reducing susceptibility to infections like bronchitis or pneumonia.

โœ…ย Supports mental clarity: Better oxygen flow to the brain sharpens focus and reduces brain fog.

โœ…ย Promotes faster recovery from respiratory illnessesย by accelerating tissue repair and reducing inflammation.


๐ŸŒŸ Real User Success Story โ€“ Lung Transformation with AnnieCareยฎ! ๐ŸŒŸ

โœ… Franco Riddleโญโญโญโญโญ

"I work on the construction site for a long time every day, and the long-term excessive inhalation of dust caused my lungs to be infected with pneumoconiosis, which gradually turned into lung infection and turned into tuberculosis. My body suffered a lot. The doctor said it was very dangerous and very serious. Difficult to cure. But I don't want to do any surgery. So when I came across thisย mist, I was looking for a solution to my lung problem and decided to give it a try!"

"Well, at week 4, I saw a truly incredible change! The inflammation in my lungs is getting better and less uncomfortable and choking. My doctor and family are happy for me too, it's great! People are amazed at the difference, it's crazy!"

"At the end of week 8, the results I've seen firsthand while using this product are truly incredible.ย I was amazed at the dramatic improvement in my lung health, which was confirmed by my doctor. In just a few weeks Within weeks, the inflammation in my lungs subsided and even the dust was wiped out. This remarkable transformation has had a profound effect on my whole family. Not only has it helped me beat tuberculosis, but my lungs have been given new energy , it feels like a miracle! The excitement and joy this product has brought to me and my family is immeasurable, and I can now take my kids everywhere I go, and I recommend it to anyone looking for similar benefits."


๐ŸŽ LIMITED-TIME BONUS!

First 300 ordersย get aย FREE Portable Nebulizerย (worth $39.99) to enhance lung therapy!

๐Ÿ›’ Click [ORDER NOW] to Breathe Freely Again!


๐Ÿ’ฌ Have questions?ย Our herbal health experts are here to help!ย Chat with us now.

๐Ÿš€ Restore Your Lungs Naturallyโ€”Try AnnieCareยฎ Today!ย ๐ŸŒฑ