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

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

๐ŸŒŽ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 NebulizerHurry—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 functionin 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! ๐ŸŒฑ