{"id":272463,"date":"2026-03-06T13:06:50","date_gmt":"2026-03-06T13:06:50","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/lhdn-myinvoice\/"},"modified":"2026-03-06T13:07:54","modified_gmt":"2026-03-06T13:07:54","slug":"myinvoice-sync","status":"publish","type":"plugin","link":"https:\/\/kir.wordpress.org\/plugins\/myinvoice-sync\/","author":17760288,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.1.0","stable_tag":"2.1.0","tested":"6.9.4","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"MyInvoice Sync","header_author":"TikusL4ju","header_description":"LHDN MyInvois Auto Submission","assets_banners_color":"798889","last_updated":"2026-03-06 13:07:54","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/tikusl4ju\/myinvoice-sync","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":249,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.1.0":{"tag":"2.1.0","author":"nadzree","date":"2026-03-06 13:07:54"},"2.1.1":{"tag":"2.1.1","author":"nadzree","date":"2026-03-06 13:15:05"}},"upgrade_notice":{"2.1.0":"<p>Security and compliance update: improved nonce checks and explicit external service documentation. It is recommended to update before submitting to the WordPress.org plugin directory.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3476406,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3476406,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3476406,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.1.0","2.1.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"MyInvoice Sync settings page with environment, seller and API configuration.","2":"WooCommerce Orders list with LHDN MyInvois status column.","3":"Invoice list showing submission status and UUID.","4":"User profile \/ My Account TIN fields and validation status."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[257254,247308,257253,247306,286],"plugin_category":[45],"plugin_contributors":[257255],"plugin_business_model":[],"class_list":["post-272463","plugin","type-plugin","status-publish","hentry","plugin_tags-einvoice","plugin_tags-lhdn","plugin_tags-myinvoice","plugin_tags-myinvois","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-nadzree","plugin_committers-nadzree"],"banners":{"banner":"https:\/\/ps.w.org\/myinvoice-sync\/assets\/banner-772x250.png?rev=3476406","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/myinvoice-sync\/assets\/icon-128x128.png?rev=3476406","icon_2x":"https:\/\/ps.w.org\/myinvoice-sync\/assets\/icon-256x256.png?rev=3476406","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>MyInvoice Sync automatically generates and submits invoices to the LHDN (Lembaga Hasil Dalam Negeri) MyInvois system in compliance with Malaysian e\u2011invoicing regulations. It integrates with WooCommerce to submit invoices, validate customer TINs, and manage credit\/refund notes.<\/p>\n\n<p>Key features:<\/p>\n\n<ul>\n<li>Automatic invoice submission based on WooCommerce order status (completed, processing, or delayed \u201cafter X days\u201d)<\/li>\n<li>UBL 1.0\/1.1 invoice generation, with optional digital signatures (PEM) for UBL 1.1<\/li>\n<li>TIN capture and validation in user profile and WooCommerce \u201cMy Account\u201d<\/li>\n<li>Background cron jobs for retries, delayed submissions, and status sync<\/li>\n<li>Credit note and refund note creation linked to original invoices<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to <strong>third\u2011party external services<\/strong> operated by LHDN (Lembaga Hasil Dalam Negeri \/ Malaysian Inland Revenue Board). Users should be aware of this before use.<\/p>\n\n<h3>What the service is and what it is used for<\/h3>\n\n<p>The plugin uses the <strong>LHDN MyInvois API<\/strong> (official Malaysian government service) to:<\/p>\n\n<ul>\n<li>Submit invoices generated from WooCommerce orders<\/li>\n<li>Validate Tax Identification Numbers (TIN) for customers<\/li>\n<li>Retrieve invoice statuses and document details<\/li>\n<li>Cancel documents and submit credit\/refund notes<\/li>\n<\/ul>\n\n<h3>Domains (where the service is hosted)<\/h3>\n\n<p>API and portal domains are selected based on environment:<\/p>\n\n<ul>\n<li><strong>Sandbox (Pre\u2011Production)<\/strong><br \/>\n\n<ul>\n<li>API: <code>https:\/\/preprod-api.myinvois.hasil.gov.my<\/code>  <\/li>\n<li>Portal: <code>https:\/\/preprod.myinvois.hasil.gov.my<\/code><\/li>\n<\/ul><\/li>\n<li><strong>Production<\/strong><br \/>\n\n<ul>\n<li>API: <code>https:\/\/api.myinvois.hasil.gov.my<\/code>  <\/li>\n<li>Portal: <code>https:\/\/myinvois.hasil.gov.my<\/code><\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h3>What data is sent and when<\/h3>\n\n<ul>\n<li><strong>Invoice data<\/strong> \u2014 When an order reaches the configured status (completed\/processing or after the chosen delay), the plugin sends:\n\n<ul>\n<li>Invoice number, date, and monetary amounts<\/li>\n<li>Buyer information (name, TIN, ID type, ID value, address, contact details)<\/li>\n<li>Seller information (TIN, SST\/TTX numbers, address, contact details)<\/li>\n<li>Line items (products, quantities, prices, descriptions)<\/li>\n<li>Tax information and industry classification codes<\/li>\n<\/ul><\/li>\n<li><strong>TIN validation<\/strong> \u2014 When a user submits or updates their TIN in their profile\/My Account, the plugin sends:\n\n<ul>\n<li>Tax Identification Number (TIN)<\/li>\n<li>ID Type (e.g. NRIC, Passport, BRN)<\/li>\n<li>ID Value<\/li>\n<\/ul><\/li>\n<li><strong>Status and document requests<\/strong> \u2014 Cron jobs and admin actions request invoice status and document details from the API.<\/li>\n<li><strong>OAuth authentication<\/strong> \u2014 Client ID and secret are sent to the token endpoint to obtain and refresh OAuth access tokens.<\/li>\n<\/ul>\n\n<p>Data is sent only when:<\/p>\n\n<ul>\n<li>Orders are submitted to LHDN (automatically or manually)<\/li>\n<li>Users explicitly validate their TIN details<\/li>\n<li>The plugin syncs invoice statuses or documents (via cron or on\u2011demand)<\/li>\n<\/ul>\n\n<p>All communication with LHDN endpoints uses HTTPS and OAuth 2.0.<\/p>\n\n<h3>Service provider and policies<\/h3>\n\n<ul>\n<li><strong>Provider:<\/strong> Lembaga Hasil Dalam Negeri (LHDN \/ Malaysian Inland Revenue Board)  <\/li>\n<li><strong>Terms of use:<\/strong> https:\/\/myinvois.hasil.gov.my\/terms  <\/li>\n<li><strong>Privacy policy:<\/strong> https:\/\/myinvois.hasil.gov.my\/privacy<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/myinvoice-sync\/<\/code><\/li>\n<li>Activate the plugin from <strong>Plugins \u2192 Installed Plugins<\/strong><\/li>\n<li>Go to <strong>MyInvoice Sync \u2192 Settings<\/strong> to configure:\n\n<ul>\n<li>Environment (Sandbox \/ Production)<\/li>\n<li>LHDN MyInvois API client ID and secrets<\/li>\n<li>Seller TIN, ID type, SST\/TTX numbers, address and contact information<\/li>\n<li>Billing circle (when invoices are submitted)<\/li>\n<\/ul><\/li>\n<li>For UBL 1.1 with signatures, upload your PEM certificate in the <strong>PEM Certificate Management<\/strong> section.<\/li>\n<\/ol>\n\n<p>Requirements:<\/p>\n\n<ul>\n<li>WordPress 5.0 or higher<\/li>\n<li>WooCommerce 3.0 or higher (for store integration)<\/li>\n<li>PHP 7.4 or higher<\/li>\n<li>Valid LHDN MyInvois API credentials<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20my%20own%20lhdn%20myinvois%20account%3F\"><h3>Do I need my own LHDN MyInvois account?<\/h3><\/dt>\n<dd><p>Yes. You must obtain API credentials from LHDN for your business. The plugin does not provide or broker credentials.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20send%20data%20to%20servers%20other%20than%20lhdn%3F\"><h3>Does this plugin send data to servers other than LHDN?<\/h3><\/dt>\n<dd><p>No. API calls are made only to the LHDN MyInvois API\/portal domains listed in the External Services section.<\/p><\/dd>\n<dt id=\"can%20i%20test%20in%20sandbox%20first%3F\"><h3>Can I test in Sandbox first?<\/h3><\/dt>\n<dd><p>Yes. You can switch between Sandbox and Production in the plugin settings. API\/portal URLs are adjusted automatically.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Improved nonce validation in user profile TIN save handler based on WordPress.org review feedback.<\/li>\n<li>Documented external LHDN API\/portal services and domains in readme files.<\/li>\n<\/ul>\n\n<h4>2.0.12<\/h4>\n\n<ul>\n<li>Maintenance and compatibility updates.<\/li>\n<\/ul>","raw_excerpt":"Automated invoice submission to LHDN MyInvois system for Malaysian businesses.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/272463","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=272463"}],"author":[{"embeddable":true,"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/nadzree"}],"wp:attachment":[{"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=272463"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=272463"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=272463"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=272463"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=272463"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=272463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}