{"id":319092,"date":"2026-07-31T17:07:49","date_gmt":"2026-07-31T17:07:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/mo-ectools-taiwan-payment-shipping-invoice-toolkit\/"},"modified":"2026-07-31T19:15:58","modified_gmt":"2026-07-31T19:15:58","slug":"moksa-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/moksa-for-woocommerce\/","author":23249544,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.5.0","stable_tag":"1.5.0","tested":"7.0.2","requires":"7.0","requires_php":"8.2","requires_plugins":null,"header_name":"Moksa for WooCommerce","header_author":"MoksaWeb","header_description":"Taiwan payment, shipping and e-invoice toolkit for WooCommerce. Enable the provider modules you need (ECPay, NewebPay, PAYUNi, SmilePay, LINE Pay, PayNow, PChomePay, TapPay, Shopline Payments, ezPay, AMEGO). HPOS-ready, Block Checkout-ready.","assets_banners_color":"171c2c","last_updated":"2026-07-31 19:15:58","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/Moksa1123\/moksa-for-woocommerce","header_author_uri":"https:\/\/moksaweb.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":22,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.4.9":{"tag":"1.4.9","author":"moksa0923","date":"2026-07-31 17:07:35"},"1.5.0":{"tag":"1.5.0","author":"moksa0923","date":"2026-07-31 19:15:58"}},"upgrade_notice":{"1.0.0":"<p>Initial public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3630283,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3630283,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3630283,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3630283,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.4.9","1.5.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3630283,"resolution":"1","location":"assets","locale":"","width":1440,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3630283,"resolution":"2","location":"assets","locale":"","width":1440,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3630283,"resolution":"3","location":"assets","locale":"","width":1440,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3630283,"resolution":"4","location":"assets","locale":"","width":1440,"height":900},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3630283,"resolution":"5","location":"assets","locale":"","width":925,"height":380}},"screenshots":{"1":"Modules overview \u2014 enable only the payment, shipping and e-invoice integrations you need, all from one settings page.","2":"Block-based Checkout rendering Taiwanese payment methods natively, alongside the order summary.","3":"Order list with the plugin's own order statuses plus shipping-method and tracking-number columns (HPOS-native).","4":"Order edit screen with per-provider payment, shipping and e-invoice cards.","5":"Issuing an e-invoice from the order screen, including carrier type and mobile barcode entry."}},"plugin_section":[],"plugin_tags":[12480,507,3546,195457,286],"plugin_category":[45],"plugin_contributors":[274073],"plugin_business_model":[],"class_list":["post-319092","plugin","type-plugin","status-publish","hentry","plugin_tags-invoice","plugin_tags-payment","plugin_tags-shipping","plugin_tags-taiwan","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-moksa0923","plugin_committers-moksa0923"],"banners":{"banner":"https:\/\/ps.w.org\/moksa-for-woocommerce\/assets\/banner-772x250.png?rev=3630283","banner_2x":"https:\/\/ps.w.org\/moksa-for-woocommerce\/assets\/banner-1544x500.png?rev=3630283","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/moksa-for-woocommerce\/assets\/icon-128x128.png?rev=3630283","icon_2x":"https:\/\/ps.w.org\/moksa-for-woocommerce\/assets\/icon-256x256.png?rev=3630283","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/moksa-for-woocommerce\/assets\/screenshot-1.png?rev=3630283","caption":"Modules overview \u2014 enable only the payment, shipping and e-invoice integrations you need, all from one settings page."},{"src":"https:\/\/ps.w.org\/moksa-for-woocommerce\/assets\/screenshot-2.png?rev=3630283","caption":"Block-based Checkout rendering Taiwanese payment methods natively, alongside the order summary."},{"src":"https:\/\/ps.w.org\/moksa-for-woocommerce\/assets\/screenshot-3.png?rev=3630283","caption":"Order list with the plugin's own order statuses plus shipping-method and tracking-number columns (HPOS-native)."},{"src":"https:\/\/ps.w.org\/moksa-for-woocommerce\/assets\/screenshot-4.png?rev=3630283","caption":"Order edit screen with per-provider payment, shipping and e-invoice cards."},{"src":"https:\/\/ps.w.org\/moksa-for-woocommerce\/assets\/screenshot-5.png?rev=3630283","caption":"Issuing an e-invoice from the order screen, including carrier type and mobile barcode entry."}],"raw_content":"<!--section=description-->\n<p>A Taiwan-focused WooCommerce extension. Toggleable modules cover ECPay (\u7da0\u754c), NewebPay (\u85cd\u65b0), SmilePay (\u901f\u8cb7\u914d), LINE Pay, PAYUNi (\u7d71\u4e00\u91d1\u6d41), PayNow (\u7acb\u5373\u5bcc), PChomePay (\u652f\u4ed8\u9023), TapPay and Shopline Payments for payments; ECPay, NewebPay, SmilePay, PAYUNi and PayNow for convenience-store + home-delivery shipping; ezPay, ECPay, SmilePay, PayNow and AMEGO for Taiwan e-invoicing.<\/p>\n\n<p>Enable only the providers you need from a single settings page \u2014 payment, shipping and invoice modules are fully independent and can be mixed in any combination.<\/p>\n\n<p>HPOS-native, Block Checkout-native, PHP 8.2+ strict-typed, GPLv3, no premium gating.<\/p>\n\n<h4>Moksa AI assistant (new in 1.3.0)<\/h4>\n\n<p>Built on the WordPress 7.0 AI Client, Moksa AI is an optional in-admin chat assistant that lets you run common store tasks in natural language: find orders by invoice \/ shipping \/ payment number, look up order details and counts, change order status (single or batch), add order notes, issue \/ void \/ allowance e-invoices, create and print shipping labels, and enable or disable modules, individual payment methods and invoice issuing methods. Every action that changes data first shows a summary and waits for your explicit confirmation before it runs. The assistant uses whichever AI provider you connect under Settings \u2192 Connectors \u2014 the plugin never handles your AI keys, refunds, or credentials.<\/p>\n\n<h4>Source<\/h4>\n\n<p>Source code and issue tracker: <a href=\"https:\/\/github.com\/Moksa1123\/moksa-for-woocommerce\">github.com\/Moksa1123\/moksa-for-woocommerce<\/a>.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin is a toolkit of optional integrations. Each integration only loads and only transmits data when you, the site administrator, explicitly enable that module and a customer chooses the corresponding payment \/ shipping \/ invoice option. No data is sent to any third party unless the relevant module is enabled and used. The plugin never sends data to Moksa or any analytics\/telemetry service.<\/p>\n\n<p>For every integration below, requests are made server-to-server over HTTPS using your own merchant credentials, and typically include the order number, order amount, buyer name, e-mail, phone, shipping\/billing address, item descriptions, and (for e-invoices) the buyer tax ID or carrier number that the customer enters at checkout.<\/p>\n\n<p>When a module is set to test\/sandbox mode, requests go to the provider's corresponding staging hostname instead of the production one listed below (for example payment-stage.ecpay.com.tw, logistics-stage.ecpay.com.tw, einvoice-stage.ecpay.com.tw, ccore.newebpay.com, sandbox-api.payuni.com.tw, sandbox-api.pchomepay.com.tw, sandbox-api-pay.line.me, sandbox.tappaysdk.com, api-sandbox.shoplinepayments.com, cinv.ezpay.com.tw, test.paynow.com.tw, testinvoice.paynow.com.tw, ssl.smse.com.tw\/api_test).<\/p>\n\n<h4>Payment gateways<\/h4>\n\n<p>These run when a customer selects the gateway at checkout (to create the payment) and when you query, capture, refund or void the payment from the order screen.<\/p>\n\n<ul>\n<li><strong>ECPay (\u7da0\u754c\u79d1\u6280)<\/strong> \u2014 credit card, ATM, CVS, barcode, installments, wallets. Endpoints: payment.ecpay.com.tw, ecpayment.ecpay.com.tw (test mode: payment-stage.ecpay.com.tw, ecpayment-stage.ecpay.com.tw). Terms: https:\/\/support.ecpay.com.tw\/10075\/ \u2014 Privacy: https:\/\/www.ecpay.com.tw\/CreditCard\/Privacy<\/li>\n<li><strong>NewebPay (\u85cd\u65b0\u91d1\u6d41)<\/strong> \u2014 credit card, ATM, CVS, barcode, wallets. Endpoints: core.newebpay.com (test mode: ccore.newebpay.com). Terms: https:\/\/www.newebpay.com\/website\/Page\/content\/new_service_policy \u2014 Privacy: https:\/\/www.newebpay.com\/website\/Page\/content\/privacy<\/li>\n<li><strong>PAYUNi (\u7d71\u4e00\u91d1\u6d41)<\/strong> \u2014 credit card, ATM, CVS, wallets. Endpoints: api.payuni.com.tw (test mode: sandbox-api.payuni.com.tw). Terms: https:\/\/www.payuni.com.tw\/terms \u2014 Privacy: https:\/\/www.payuni.com.tw\/privacy<\/li>\n<li><strong>SmilePay (\u901f\u8cb7\u914d)<\/strong> \u2014 credit card, ATM, CVS, barcode. Endpoints: ssl.smse.com.tw (SmilePay's own API hostname \u2014 smse.com.tw and smilepay.net are both operated by the same company, \u8a0a\u822a\u79d1\u6280 Shinhang Technology; its policies are published on the smilepay.net brand site; test mode uses the \/api_test path on the same hostname). Terms: https:\/\/www.smilepay.net\/em\/servicepolicy.asp \u2014 Privacy: https:\/\/www.smilepay.net\/em\/servicepolicy.asp (SmilePay publishes a single combined service &amp; personal-data-protection document, so both links point at that document)<\/li>\n<li><strong>PayNow (\u7acb\u5409\u5bcc)<\/strong> \u2014 credit card, ATM, CVS, installments. Endpoints: www.paynow.com.tw (test mode: test.paynow.com.tw). Terms: https:\/\/www.paynow.com.tw\/PayNowUserAgreement.aspx \u2014 Privacy: https:\/\/www.paynow.com.tw\/safepolicy.aspx<\/li>\n<li><strong>PChomePay (\u652f\u4ed8\u9023)<\/strong> \u2014 credit card, ATM, CVS, barcode. Endpoints: api.pchomepay.com.tw (test mode: sandbox-api.pchomepay.com.tw). Terms: https:\/\/www.pchomepay.com.tw\/other\/service_treaty \u2014 Privacy: https:\/\/web.pchomepay.com.tw\/introduction\/privacy<\/li>\n<li><strong>LINE Pay<\/strong> \u2014 LINE Pay wallet. Endpoints: api-pay.line.me (test mode: sandbox-api-pay.line.me). Terms: https:\/\/terms2.line.me\/linepay_TW_TermsofUse?lang=zh-Hant \u2014 Privacy: https:\/\/terms2.line.me\/linepay_TW_PP<\/li>\n<li><strong>TapPay<\/strong> \u2014 credit card via the TapPay Fields SDK loaded in the browser (js.tappaysdk.com). Card data is tokenised client-side; only the token reaches your server. Endpoints: prod.tappaysdk.com, js.tappaysdk.com (test mode: sandbox.tappaysdk.com). Terms: https:\/\/www.tappaysdk.com\/taiwan-en\/privacy-term \u2014 Privacy: https:\/\/www.tappaysdk.com\/taiwan-en\/privacy-term (TapPay publishes a single combined terms &amp; privacy document, so both links point at that document)<\/li>\n<li><strong>Shopline Payments<\/strong> \u2014 credit card, wallets. Endpoints: api.shoplinepayments.com (test mode: api-sandbox.shoplinepayments.com). Terms: https:\/\/book.shoplineapp.com\/pages\/shopline-payments-terms-and-conditions \u2014 Privacy: https:\/\/www.shopline.com\/shopline-payments-privacy<\/li>\n<\/ul>\n\n<h4>Shipping \/ logistics<\/h4>\n\n<p>These run when a customer opens the convenience-store map at checkout (the store-selection map is hosted by the provider), when a shipment is created after an order is placed, and when you print a label or query shipment status.<\/p>\n\n<ul>\n<li><strong>ECPay Logistics (\u7da0\u754c\u7269\u6d41)<\/strong> \u2014 7-11 \/ FamilyMart \/ Hi-Life \/ OK \/ home delivery. Endpoints: logistics.ecpay.com.tw (test mode: logistics-stage.ecpay.com.tw). Terms: https:\/\/support.ecpay.com.tw\/10075\/ \u2014 Privacy: https:\/\/www.ecpay.com.tw\/CreditCard\/Privacy<\/li>\n<li><strong>NewebPay Logistics (\u85cd\u65b0\u7269\u6d41)<\/strong> \u2014 CVS \/ home delivery. Endpoints: core.newebpay.com (test mode: ccore.newebpay.com). Terms: https:\/\/www.newebpay.com\/website\/Page\/content\/new_service_policy \u2014 Privacy: https:\/\/www.newebpay.com\/website\/Page\/content\/privacy<\/li>\n<li><strong>PAYUNi Logistics (\u7d71\u4e00\u7269\u6d41)<\/strong> \u2014 7-11 \/ home delivery (incl. cold chain). Endpoints: api.payuni.com.tw (test mode: sandbox-api.payuni.com.tw). Terms: https:\/\/www.payuni.com.tw\/terms \u2014 Privacy: https:\/\/www.payuni.com.tw\/privacy<\/li>\n<li><strong>SmilePay Logistics (\u901f\u8cb7\u914d\u7269\u6d41)<\/strong> \u2014 7-11 \/ FamilyMart \/ home delivery. Endpoints: ssl.smse.com.tw (SmilePay's own API hostname; see the SmilePay entry above \u2014 same operator as smilepay.net; test mode uses the \/api_test path on the same hostname). Terms: https:\/\/www.smilepay.net\/em\/servicepolicy.asp \u2014 Privacy: https:\/\/www.smilepay.net\/em\/servicepolicy.asp (single combined service &amp; personal-data-protection document)<\/li>\n<\/ul>\n\n<h4>E-invoice (Taiwan electronic invoicing)<\/h4>\n\n<p>These run when an invoice is issued for an order (immediately on payment, on completion, or manually, per your setting) and when you void \/ issue an allowance \/ query an invoice. Data includes the order amount, item descriptions and the buyer's carrier number, donation code or company tax ID entered at checkout.<\/p>\n\n<ul>\n<li><strong>ECPay e-Invoice (\u7da0\u754c\u96fb\u5b50\u767c\u7968)<\/strong> \u2014 Endpoints: einvoice.ecpay.com.tw (test mode: einvoice-stage.ecpay.com.tw). Terms: https:\/\/support.ecpay.com.tw\/10075\/ \u2014 Privacy: https:\/\/www.ecpay.com.tw\/CreditCard\/Privacy<\/li>\n<li><strong>ezPay e-Invoice (ezPay \u96fb\u5b50\u767c\u7968)<\/strong> \u2014 Endpoints: inv.ezpay.com.tw (test mode: cinv.ezpay.com.tw). Terms: https:\/\/www.ezpay.com.tw\/info\/Site_description\/service_page\/member \u2014 Privacy: https:\/\/www.ezpay.com.tw\/info\/Site_description\/service_page\/member (ezPay publishes a single combined membership &amp; data-protection terms page, so both links point at that page)<\/li>\n<li><strong>SmilePay e-Invoice (\u901f\u8cb7\u914d\u96fb\u5b50\u767c\u7968)<\/strong> \u2014 Endpoints: ssl.smse.com.tw (SmilePay's own API hostname; see the SmilePay entry above \u2014 same operator as smilepay.net; test mode uses the \/api_test path on the same hostname). Terms: https:\/\/www.smilepay.net\/em\/servicepolicy.asp \u2014 Privacy: https:\/\/www.smilepay.net\/em\/servicepolicy.asp (single combined service &amp; personal-data-protection document)<\/li>\n<li><strong>PayNow e-Invoice (\u7acb\u5409\u5bcc\u96fb\u5b50\u767c\u7968)<\/strong> \u2014 Endpoints: invoice.paynow.com.tw (test mode: testinvoice.paynow.com.tw). Terms: https:\/\/www.paynow.com.tw\/PayNowUserAgreement.aspx \u2014 Privacy: https:\/\/www.paynow.com.tw\/safepolicy.aspx<\/li>\n<li><strong>AMEGO e-Invoice (\u5149\u8cbf\u96fb\u5b50\u767c\u7968)<\/strong> \u2014 Endpoints: invoice-api.amego.tw. Terms: https:\/\/invoice.amego.tw\/term \u2014 Privacy: https:\/\/invoice.amego.tw\/privacy<\/li>\n<\/ul>\n\n<h4>Carrier tracking links (hyperlinks only \u2014 the plugin itself never contacts these hosts)<\/h4>\n\n<p>When a shipment has a tracking number, the order screen renders a plain hyperlink to the carrier's own public parcel-tracking page. The plugin makes no HTTP request to any of these hosts and transmits no data to them; the shipment number only leaves your site if a person clicks the link, at which point the carrier's own terms and privacy policy apply in their browser:<\/p>\n\n<ul>\n<li><strong>T-Cat \u9ed1\u8c93\u5b85\u914d<\/strong> (t-cat.com.tw, incl. the tracking link shown for PAYUNi home-delivery shipments) \u2014 Privacy: https:\/\/www.t-cat.com.tw\/member\/privacy.aspx<\/li>\n<li><strong>7-ELEVEN<\/strong> (eservice.7-11.com.tw) \u2014 Privacy: https:\/\/www.7-11.com.tw\/privacy.asp<\/li>\n<li><strong>7-ELEVEN pickup status via PAYUNi logistics<\/strong> (tracking.shopmore.com.tw, operated by the Uni-President group for PAYUNi shipments) \u2014 service info: https:\/\/help.shopmore.com.tw\/ ; the PAYUNi logistics policies above apply to the shipment itself<\/li>\n<li><strong>FamilyMart \u5168\u5bb6<\/strong> (fmec.famiport.com.tw), <strong>Hi-Life \u840a\u723e\u5bcc<\/strong> (www.hilife.com.tw), <strong>OK Mart<\/strong> (ecservice.okmart.com.tw) \u2014 public tracking pages of each chain; their site policies are linked from those pages<\/li>\n<li><strong>Chunghwa Post \u4e2d\u83ef\u90f5\u653f<\/strong> (postserv.post.gov.tw) \u2014 Privacy: https:\/\/www.post.gov.tw\/post\/internet\/Group\/index.jsp?ID=156739569921<\/li>\n<\/ul>\n\n<h4>Moksa AI assistant (optional, admin-only)<\/h4>\n\n<p>When an administrator actively uses the in-admin Moksa AI assistant, the typed question and the store\/order data needed to answer it (for example an order number, status, totals or invoice\/shipping numbers) are sent to the AI provider you have connected in WordPress under <strong>Settings \u2192 Connectors<\/strong> \u2014 Anthropic, Google or OpenAI \u2014 through the WordPress 7.0 AI Client. This never happens automatically and only for the administrator using the assistant. The plugin does not store these conversations on any Moksa server, sends nothing to Moksa, and never transmits your AI provider keys (WordPress manages the connector credentials). The transmitted data is governed by the terms and privacy policy of the provider you choose: Anthropic \u2014 Terms: https:\/\/www.anthropic.com\/legal\/commercial-terms \u2014 Privacy: https:\/\/www.anthropic.com\/legal\/privacy ; Google \u2014 Terms: https:\/\/ai.google.dev\/gemini-api\/terms \u2014 Privacy: https:\/\/policies.google.com\/privacy ; OpenAI \u2014 Terms: https:\/\/openai.com\/policies\/terms-of-use\/ \u2014 Privacy: https:\/\/openai.com\/policies\/privacy-policy\/<\/p>\n\n<h4>MCP server (optional, off by default)<\/h4>\n\n<p>This plugin can optionally expose a standards-compliant, stateless MCP (Model Context Protocol) endpoint on <strong>your own site<\/strong> at <code>\/wp-json\/moksa-for-woocommerce\/v1\/mcp<\/code>, so a standard MCP client you control (for example mcp-remote or Claude) can look up orders and reports through the WordPress REST API. This is <strong>not a Moksa service and is not a phone-home<\/strong>: nothing is sent to Moksa, the endpoint only runs on your server and only exposes the plugin's own WordPress Abilities. It is <strong>off by default<\/strong> and must be turned on under WooCommerce \u2192 Moksa AI \u2192 Settings. Access requires authentication with a WordPress Application Password for a user that has the \"edit orders\" capability (use a dedicated, limited account). By default only read-only tools are exposed; order-changing tools stay hidden unless you also enable the separate \"allow external AI to make changes\" option, and every request is permission-checked on your server.<\/p>\n\n<!--section=installation-->\n<h4>Minimum Requirements<\/h4>\n\n<ul>\n<li>PHP 8.2+<\/li>\n<li>WordPress 7.0+<\/li>\n<li>WooCommerce 9.9+<\/li>\n<\/ul>\n\n<h4>Setup<\/h4>\n\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Go to <strong>WooCommerce \u2192 Settings \u2192 Moksa for WooCommerce<\/strong> to enable the modules you need.<\/li>\n<li>Configure the credentials for each enabled provider on its dedicated tab.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20with%20the%20block-based%20checkout%3F\"><h3>Does it work with the Block-based Checkout?<\/h3><\/dt>\n<dd><p>Yes. Every payment method ships an <code>AbstractPaymentMethodType<\/code> + React component, and the convenience-store picker \/ invoice fields render inside the Checkout block.<\/p><\/dd>\n<dt id=\"is%20it%20hpos-compatible%3F\"><h3>Is it HPOS-compatible?<\/h3><\/dt>\n<dd><p>Yes. All order meta uses <code>$order-&gt;update_meta_data()<\/code> \/ <code>$order-&gt;save()<\/code>, never <code>update_post_meta()<\/code>.<\/p><\/dd>\n<dt id=\"can%20i%20mix%20providers%3F\"><h3>Can I mix providers?<\/h3><\/dt>\n<dd><p>Yes. Payment, shipping and invoice modules are fully independent \u2014 any combination works.<\/p><\/dd>\n<dt id=\"what%20is%20the%20moksa%20ai%20assistant%20and%20what%20does%20it%20need%3F\"><h3>What is the Moksa AI assistant and what does it need?<\/h3><\/dt>\n<dd><p>It is an optional in-admin chat assistant for managing orders, e-invoices, shipping labels and module settings in natural language. It requires WordPress 7.0 (for the built-in AI Client) and an AI provider connected under <strong>Settings \u2192 Connectors<\/strong>; enable it under the plugin's Advanced settings. Every action that changes data first asks for your confirmation, and the assistant can never read or change your provider credentials, switch sandbox\/live mode, or issue refunds.<\/p><\/dd>\n<dt id=\"can%20external%20ai%20tools%20connect%20to%20my%20store%20over%20mcp%3F\"><h3>Can external AI tools connect to my store over MCP?<\/h3><\/dt>\n<dd><p>Yes, optional and off by default. Turn it on under <strong>WooCommerce \u2192 Moksa AI \u2192 Settings \u2192 \"Enable external MCP server\"<\/strong>. The plugin then serves a standards-compliant, stateless MCP (Model Context Protocol) endpoint at <code>\/wp-json\/moksa-for-woocommerce\/v1\/mcp<\/code> that any standard MCP client (for example mcp-remote or Claude) can connect to directly \u2014 no bridge required.<\/p>\n\n<p>Authentication uses a WordPress Application Password for a user that has the \"edit orders\" capability; use a dedicated, limited account rather than an administrator. Connect your client to the endpoint with an <code>Authorization: Basic &lt;base64 of username:application-password&gt;<\/code> header. By default only read-only tools (look up orders, reports, settings overview) are exposed; order-changing tools stay hidden unless you also enable the \"allow external AI to make changes\" option, and destructive actions still require in-store confirmation. Every request is permission-checked on the server.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5.0 - 2026-08-01<\/h4>\n\n<ul>\n<li>i18n: every translatable string is now written in English in the source, and Traditional Chinese ships as a real translation. Previously the source strings were Chinese, which meant the plugin could never be translated into any other language and WordPress.org reported it as having no Traditional Chinese localisation at all. 2,442 strings are covered, so Chinese stores see exactly the same wording as before.<\/li>\n<li>i18n: Taiwanese cities and districts now use a translator context (<code>_x<\/code>), so the districts that share a name across cities \u2014 Zhongzheng in both Taipei and Keelung, for example \u2014 are no longer collapsed into one entry that translators cannot tell apart.<\/li>\n<li>Fix: invoice line-item units sent to the e-invoice services were wrapped in a translation call, so on a non-Chinese site they would have been submitted in the site language instead of the value the tax authority expects. They are now sent as fixed data.<\/li>\n<li>Fix: the order-status labels shown as post-status counts in the admin order list are now translatable in their own right rather than reusing an unrelated shipment-tracking string.<\/li>\n<li>Dev: the translation catalogue is generated from a single English-to-Chinese map and the build fails if any string is missing a translation, so a new string can no longer ship untranslated.<\/li>\n<\/ul>\n\n<h4>1.4.9 - 2026-07-26<\/h4>\n\n<ul>\n<li>Security: two SmilePay logistics endpoints (T-cat tracking-number retrieval and C2B label data) were still declared with plain http:\/\/; both now use https:\/\/ (verified reachable), so every request the plugin makes is TLS-encrypted as the readme states.<\/li>\n<li>Security: the module on\/off save handler and the order-status colour save handler verified neither a nonce nor a capability inside the method, relying on the WooCommerce settings page upstream. Both now verify the WooCommerce settings nonce and the manage_woocommerce capability inline, in the same form WooCommerce core uses.<\/li>\n<li>Security: the quick-edit and bulk-edit handlers for the product temperature-zone field verified a nonce name that WooCommerce never issues for those forms, so the check always failed and the field silently stopped saving from quick\/bulk edit. They now verify the same woocommerce_quick_edit_nonce that WooCommerce core verifies, restoring the feature.<\/li>\n<li>Security: the classic-checkout store validation and the PAYUNi store-restore handler now verify their nonces first, in straight-line form, before touching any request field.<\/li>\n<li>readme: every provider entry now lists its test\/sandbox hostname inline and carries an explicit Terms link and an explicit Privacy link (providers publishing a single combined document have both links pointing at it, with a note); the AMEGO terms link points at the actual terms page; added the previously undocumented ecpayment-stage.ecpay.com.tw test hostname.<\/li>\n<\/ul>\n\n<h4>1.4.8 - 2026-07-19<\/h4>\n\n<ul>\n<li>i18n: the text domain is now <code>moksa-for-woocommerce<\/code>, matching the assigned plugin slug (all 4,000+ gettext calls, the plugin header, the block-checkout scripts and the bundled zh_TW translation files were updated; the main plugin file was renamed accordingly).<\/li>\n<li>Security: the PChomePay webhook no longer trusts its payload at all. On top of the source-IP allowlist, every notification now triggers a server-to-server query back to PChomePay (<code>GET \/v1\/payment\/{id}<\/code>) and the authoritative API response gates the order transition: <code>order_confirm<\/code> requires API status S with a matching amount, and expiry\/failure notifications are rejected for orders the API reports as paid. The allowlisted IPs are now filterable via <code>moksafowo_pchomepay_notify_ips<\/code>.<\/li>\n<li>Security: the product temperature quick-edit \/ bulk-edit \/ product-save \/ variation-save handlers now re-verify the WooCommerce nonce and check <code>edit_product<\/code> capability in-place (fail-closed) instead of relying on the upstream caller having done so.<\/li>\n<li>readme: each SmilePay integration now explains that ssl.smse.com.tw is SmilePay's own API hostname (smse.com.tw and smilepay.net are operated by the same company, \u8a0a\u822a\u79d1\u6280); OpenAI policy links point at the individual terms and privacy pages.<\/li>\n<\/ul>\n\n<h4>1.4.7 - 2026-07-12<\/h4>\n\n<ul>\n<li>Naming: the PHP namespace root was changed from <code>MoksaWeb\\Mowc\\<\/code> to <code>Moksafowo\\<\/code>, so every global identifier the plugin declares (namespaces, constants, options, hooks, AJAX actions, database tables) now shares the single <code>moksafowo<\/code> prefix.<\/li>\n<li>Naming: six filters were still published under WooCommerce-prefixed hook names (<code>woocommerce_get_sections_*<\/code>, <code>woocommerce_get_settings_*<\/code>, <code>woocommerce_shipping_*_is_available<\/code>) even though the methods that fire them fully override WooCommerce and never call the parent implementation. They are now <code>moksafowo_*<\/code>.<\/li>\n<li>Naming: the checkout field namespace and admin CSS class prefix were unified under <code>moksafowo<\/code>; the unused legacy <code>MOWP_VAULT_KEY<\/code> constant fallback was removed.<\/li>\n<li>Database: every table name now goes through <code>$wpdb-&gt;prepare()<\/code> using the <code>%i<\/code> identifier placeholder, and every <code>LIKE<\/code> pattern through <code>%s<\/code>. No table name or search term is interpolated into SQL anywhere in the plugin, including <code>uninstall.php<\/code>.<\/li>\n<li>Fix: <code>Aes::decrypt_cbc_hex()<\/code> validated its input only after calling <code>hex2bin()<\/code>, which emitted a PHP warning on malformed input before the exception was thrown. It now validates first.<\/li>\n<li>Admin: order detail notes no longer expose the internal plugin codename.<\/li>\n<\/ul>\n\n<h4>1.4.6 - 2026-07-12<\/h4>\n\n<ul>\n<li>Security fix: the NewebPay logistics store-map callback verified its signature only when a HashData value was actually supplied, so an attacker could omit it to skip verification. Now rejected (fail-closed) whenever HashData is missing.<\/li>\n<li>Security fix: PayNow's secondary PassCode2 check (barcode\/e-wallet payments) was skipped when the field was empty instead of being required; now fail-closed.<\/li>\n<li>Settings: corrected the SmilePay \"Mid\" field description, which still described the old skip-if-empty behaviour after the fail-closed fix.<\/li>\n<li>readme: OpenAI's Terms\/Privacy links replaced with OpenAI's policy hub, which several individual policy sub-pages intermittently blocked as bot traffic.<\/li>\n<li>Added explicit references to the exact WooCommerce core methods (<code>WC_Settings_Page<\/code>, <code>WC_Shipping_Method::is_available()<\/code>) that mandate the <code>woocommerce_*<\/code>-prefixed filter tag names flagged by the automated prefix scan \u2014 these are WooCommerce's own extension-point names, not ones this plugin defines.<\/li>\n<\/ul>\n\n<h4>1.4.5 - 2026-07-12<\/h4>\n\n<ul>\n<li>Security hardening: the SmilePay payment callback now rejects requests when the merchant verification code (\u53c3\u6578\u78bc) is not configured (fail-closed) and only accepts callbacks for orders actually paid via SmilePay.<\/li>\n<li>The LINE Pay admin confirm action now uses the standard check_ajax_referer() flow.<\/li>\n<li>Readme: clarified SmilePay\/ezPay combined terms &amp; privacy documents and documented carrier tracking links (pure hyperlinks \u2014 the plugin never contacts those hosts) with verified policy links.<\/li>\n<\/ul>\n\n<h4>1.4.4 - 2026-07-05<\/h4>\n\n<ul>\n<li>Removed a non-functional leftover PAYUNi credentials migrator (its map used identical source and target option names, so it did nothing).<\/li>\n<li>The e-invoice donation-organization option is now written under a statically-prefixed, allow-listed option name.<\/li>\n<li>Reworked the PAYUNi store-selection restore so the nonce verification is inline and explicit.<\/li>\n<\/ul>\n\n<h4>1.4.3 - 2026-06-28<\/h4>\n\n<ul>\n<li>Completed the \"External services\" documentation in the readme to list every payment, shipping and e-invoice endpoint the plugin can contact, including the credit-card query endpoint and all sandbox\/test hostnames.<\/li>\n<li>Minor security hardening of the PAYUNi store-selection AJAX handler: the request nonce is now verified before any other processing.<\/li>\n<\/ul>\n\n<h4>1.4.2 - 2026-06-21<\/h4>\n\n<ul>\n<li>Improved the AI assistant's handling of multi-part questions (e.g. asking for revenue and pending-shipment counts in one message) so they are answered reliably in a single reply.<\/li>\n<\/ul>\n\n<h4>1.4.1 - 2026-06-20<\/h4>\n\n<ul>\n<li>Further hardened output escaping on the admin order payment panel and the customer payment-information notice and email (allow-listed HTML at the point of output).<\/li>\n<\/ul>\n\n<h4>1.4.0 - 2026-06-20<\/h4>\n\n<ul>\n<li>E-invoice fields on the block checkout now show, hide and validate through WooCommerce's native conditional field logic (JSON Schema) instead of custom scripting, for reliable behaviour across WooCommerce updates.<\/li>\n<li>The mobile-barcode and personal-certificate carrier inputs are now separate fields, each with its own format validation.<\/li>\n<li>Raised the minimum WooCommerce version to 9.9, required by the native conditional checkout fields.<\/li>\n<li>Internal consolidation of the e-invoice checkout-field code, plus further hardening of asset loading and input handling.<\/li>\n<\/ul>\n\n<h4>1.3.0 - 2026-06-18<\/h4>\n\n<ul>\n<li>New Moksa AI in-admin assistant (requires WordPress 7.0 AI Client and a configured AI connector): query and manage orders, e-invoices, shipping labels and module settings in natural language, with a human confirmation step before any change is applied.<\/li>\n<li>Order tools via the WordPress Abilities API: find order by number, order details, order counts, status changes (single and batch), order notes, and an advanced order list.<\/li>\n<li>Taiwan e-invoice actions: issue, void and allowance, plus per-channel issuing-method toggles.<\/li>\n<li>Shipping: create a logistics booking and print labels (single and batch).<\/li>\n<li>Manage settings by natural language: enable or disable provider modules, individual payment methods and invoice issuing methods \u2014 each behind a confirmation step. Credentials and sandbox\/live switches are never exposed.<\/li>\n<li>Raised the minimum WordPress version to 7.0, required by the AI assistant and the Abilities API. Core payment, shipping and invoice features are unchanged.<\/li>\n<li>Removed the unused SMS module.<\/li>\n<\/ul>\n\n<h4>1.1.0 - 2026-06-05<\/h4>\n\n<ul>\n<li>All global identifiers renamed to the unique <code>moksafowo<\/code> prefix (options, hooks, AJAX actions, gateway IDs, script handles, order meta, custom order statuses) per WordPress.org review.<\/li>\n<li>Hardened all payment \/ logistics webhook handlers: signature verification before any use, full per-field input sanitization, no raw request logging.<\/li>\n<li>Store-selection restore at checkout now requires a nonce.<\/li>\n<li>All inline <code>&lt;script&gt;<\/code> \/ <code>&lt;style&gt;<\/code> output replaced with <code>wp_enqueue_*<\/code>, <code>wp_add_inline_*<\/code> and <code>wp_print_inline_script_tag()<\/code>.<\/li>\n<li>All dynamic admin card \/ tracking-link HTML now escaped through explicit <code>wp_kses<\/code> allowlists at output time.<\/li>\n<\/ul>\n\n<h4>1.0.0 - 2026-05-26<\/h4>\n\n<ul>\n<li>Initial public release on the WordPress.org Plugin Directory.<\/li>\n<\/ul>","raw_excerpt":"A Taiwan e-commerce toolkit for WooCommerce. Bundles Taiwanese payment, shipping and e-invoice integrations.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/319092","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=319092"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/moksa0923"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=319092"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=319092"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=319092"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=319092"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=319092"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=319092"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}