{"id":326086,"date":"2026-11-05T20:13:01","date_gmt":"2026-11-05T20:13:01","guid":{"rendered":"https:\/\/pt.wordpress.org\/plugins\/360pay-pagamentos-por-carteiras-moveis-para-masterstudy\/"},"modified":"2026-11-05T20:12:48","modified_gmt":"2026-11-05T20:12:48","slug":"mais360-mobile-wallet-payments-for-masterstudy","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/mais360-mobile-wallet-payments-for-masterstudy\/","author":23515939,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.3","stable_tag":"1.4.3","tested":"7.1.4","requires":"6.2","requires_php":"8.1","requires_plugins":null,"header_name":"360Pay \u2013 Pagamentos por Carteiras M\u00f3veis para MasterStudy","header_author":"Ag\u00eancia +360\u00ba","header_description":"Gateway de pagamentos por carteiras m\u00f3veis para o checkout nativo do MasterStudy LMS, sem WooCommerce.","assets_banners_color":"3e314a","last_updated":"2026-11-05 20:12:48","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/agenciamais360.co.mz\/","header_author_uri":"https:\/\/agenciamais360.co.mz","rating":0,"author_block_rating":0,"active_installs":0,"downloads":66,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.4.3":{"tag":"1.4.3","author":"hteezy","date":"2026-11-05 20:12:48","revision":3786702}},"upgrade_notice":{"1.4.3":"<p>First public release on WordPress.org.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3786702,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3786702,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3786702,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3786702,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.4.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3786702,"resolution":"1","location":"assets","locale":"","width":1160,"height":424},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3786702,"resolution":"2","location":"assets","locale":"","width":1160,"height":558},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3786702,"resolution":"3","location":"assets","locale":"","width":1140,"height":648},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3786702,"resolution":"4","location":"assets","locale":"","width":1113,"height":2238},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3786702,"resolution":"5","location":"assets","locale":"","width":1190,"height":445},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3786702,"resolution":"6","location":"assets","locale":"","width":1190,"height":857},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3786702,"resolution":"7","location":"assets","locale":"","width":1018,"height":678}},"screenshots":{"1":"Mobile wallet selector inside the native MasterStudy LMS checkout.","2":"After choosing a wallet, the phone field adapts to it (logo, colour and accepted prefixes).","3":"Payment status shown in the checkout after the student confirms the payment on the phone.","4":"General settings: gateway, currency, environment, expiry, debug logs, invoicing and B2C options.","5":"Mobile wallet providers: enable and configure M-Pesa, e-Mola, mKesh or custom wallets.","6":"Transactions list with status, masked phone numbers, filters and CSV export.","7":"Transaction details: student, purchase summary and provider tracking information."}},"plugin_section":[],"plugin_tags":[2195,179378,44121,3050,6593],"plugin_category":[],"plugin_contributors":[290953],"plugin_business_model":[],"class_list":["post-326086","plugin","type-plugin","status-publish","hentry","plugin_tags-lms","plugin_tags-masterstudy","plugin_tags-mobile-wallet","plugin_tags-mpesa","plugin_tags-payment-gateway","plugin_contributors-hteezy","plugin_committers-hteezy"],"banners":{"banner":"https:\/\/ps.w.org\/mais360-mobile-wallet-payments-for-masterstudy\/assets\/banner-772x250.png?rev=3786702","banner_2x":"https:\/\/ps.w.org\/mais360-mobile-wallet-payments-for-masterstudy\/assets\/banner-1544x500.png?rev=3786702","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/mais360-mobile-wallet-payments-for-masterstudy\/assets\/icon-128x128.png?rev=3786702","icon_2x":"https:\/\/ps.w.org\/mais360-mobile-wallet-payments-for-masterstudy\/assets\/icon-256x256.png?rev=3786702","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/mais360-mobile-wallet-payments-for-masterstudy\/assets\/screenshot-1.png?rev=3786702","caption":"Mobile wallet selector inside the native MasterStudy LMS checkout."},{"src":"https:\/\/ps.w.org\/mais360-mobile-wallet-payments-for-masterstudy\/assets\/screenshot-2.png?rev=3786702","caption":"After choosing a wallet, the phone field adapts to it (logo, colour and accepted prefixes)."},{"src":"https:\/\/ps.w.org\/mais360-mobile-wallet-payments-for-masterstudy\/assets\/screenshot-3.png?rev=3786702","caption":"Payment status shown in the checkout after the student confirms the payment on the phone."},{"src":"https:\/\/ps.w.org\/mais360-mobile-wallet-payments-for-masterstudy\/assets\/screenshot-4.png?rev=3786702","caption":"General settings: gateway, currency, environment, expiry, debug logs, invoicing and B2C options."},{"src":"https:\/\/ps.w.org\/mais360-mobile-wallet-payments-for-masterstudy\/assets\/screenshot-5.png?rev=3786702","caption":"Mobile wallet providers: enable and configure M-Pesa, e-Mola, mKesh or custom wallets."},{"src":"https:\/\/ps.w.org\/mais360-mobile-wallet-payments-for-masterstudy\/assets\/screenshot-6.png?rev=3786702","caption":"Transactions list with status, masked phone numbers, filters and CSV export."},{"src":"https:\/\/ps.w.org\/mais360-mobile-wallet-payments-for-masterstudy\/assets\/screenshot-7.png?rev=3786702","caption":"Transaction details: student, purchase summary and provider tracking information."}],"raw_content":"<!--section=description-->\n<p>360Pay adds a modular integration for mobile wallet payments directly inside the native MasterStudy LMS checkout.<\/p>\n\n<p>This is an independent, third-party plugin. It is not affiliated with, endorsed by, or sponsored by MasterStudy LMS \/ StylemixThemes or by Vodacom \/ M-Pesa. \"MasterStudy\" and \"M-Pesa\" are trademarks of their respective owners and are used here only to describe the services this plugin integrates with.<\/p>\n\n<p>The plugin is designed to:\n* Keep orders in pending status until the API confirms the payment.\n* Ensure all payment confirmations are verified server-side.\n* Validate transaction reference, amount, currency, student, course, and payment status before granting access.\n* Receive callbacks\/webhooks through a secure REST API.\n* Fallback to automated polling via WP-Cron.\n* Support multiple mobile wallets, including M-Pesa, e-Mola, mKesh, or custom wallets configured manually.\n* Never ask for PINs, OTPs, or private wallet data on the site.\n* Keep detailed transaction logs without exposing credentials or sensitive info.<\/p>\n\n<p>Technical details:\n* Order post type: <code>stm-orders<\/code>.\n* Native order items table: <code>{$wpdb-&gt;prefix}stm_lms_order_items<\/code>.\n* Native enrollment function: <code>stm_lms_add_user_course()<\/code>.\n* Cart helper: <code>stm_lms_get_cart_items()<\/code>.\n* Action hook: <code>stm_lms_purchase_action_done<\/code>.<\/p>\n\n<h3>General Settings<\/h3>\n\n<p>In General Settings, you can configure:\n* Enable Gateway: Globally enable or disable the mobile wallet gateway.\n* Environment: Sandbox (testing) or Production.\n* Default Currency: e.g., <code>MZN<\/code>.\n* Expiry Minutes: Maximum time allowed for payment confirmation before expiration.\n* Debug Logging: Enable additional developer logs.<\/p>\n\n<h3>Wallet Configuration<\/h3>\n\n<p>Each wallet config allows you to customize:\n* Name and slug.\n* Logo via the Media Library.\n* Description and instructions for the student.\n* Phone number prefixes and length constraints.\n* Sandbox and Production API base URLs.\n* Initiate Payment endpoint.\n* Check Status endpoint.\n* API key, secrets, bearer token, Merchant ID, and Webhook secret.\n* Auth Method: none, basic_auth, bearer_token, api_key_header, oauth2, or custom.\n* Timeout, max retries, and check interval.\n* JSON headers.\n* Request JSON template.\n* Response field mapping.\n* Status value mapping for success, pending, failed, and cancelled.<\/p>\n\n<p>Available tokens in endpoints\/templates:\n* <code>{reference}<\/code>\n* <code>{external_reference}<\/code>\n* <code>{amount}<\/code>\n* <code>{currency}<\/code>\n* <code>{phone}<\/code>\n* <code>{merchant_id}<\/code>\n* <code>{callback_url}<\/code><\/p>\n\n<h3>REST Endpoints<\/h3>\n\n<p>Wallet Callback URL:\n    \/wp-json\/ms-wallet-payments\/v1\/callback\/{wallet_slug}<\/p>\n\n<p>Public Status Check URL:\n    \/wp-json\/ms-wallet-payments\/v1\/status\/{transaction_reference}<\/p>\n\n<p>Reprocess Callback (Admin only):\n    \/wp-json\/ms-wallet-payments\/v1\/reprocess\/{transaction_reference}<\/p>\n\n<p>Start Payment (Frontend AJAX):\n    \/wp-json\/ms-wallet-payments\/v1\/start<\/p>\n\n<p>List Active Wallets:\n    \/wp-json\/ms-wallet-payments\/v1\/wallets<\/p>\n\n<h3>Developer Hooks<\/h3>\n\n<p>You can customize checkout context, order creation, order completion, enrollment, and status checks using filters:<\/p>\n\n<pre><code>add_filter( 'mswp_masterstudy_checkout_context', function ( $context, WP_REST_Request $request ) { ... } );\nadd_filter( 'mswp_masterstudy_create_pending_order', function ( $order_id, $transaction ) { ... } );\nadd_filter( 'mswp_masterstudy_complete_order', function ( $completed, $transaction ) { ... } );\nadd_filter( 'mswp_masterstudy_enroll_user', function ( $enrolled, $transaction ) { ... } );\nadd_filter( 'mswp_masterstudy_mark_order_not_paid', function ( $updated, $transaction, $status ) { ... } );&lt;h3&gt;Fallback Shortcodes&lt;\/h3&gt;\n<\/code><\/pre>\n\n<p>If you need to manually integrate a checkout button for testing:\n    [mswp_wallet_checkout course_id=\"123\" amount=\"1500\" currency=\"MZN\"]<\/p>\n\n<p>To display payment status:\n    [mswp_payment_status]<\/p>\n\n<h3>Security<\/h3>\n\n<ul>\n<li>Access to courses is only granted after successful payment confirmation from the API.<\/li>\n<li>Duplicated callback\/webhook requests are ignored.<\/li>\n<li>Webhook requests are validated with HMAC SHA-256 signatures if a webhook secret is defined.<\/li>\n<li>Sensitive keys and credentials are masked in the admin dashboard and logs.<\/li>\n<li>Direct SQL queries are sanitized using <code>$wpdb-&gt;prepare<\/code> and identifier escaping.<\/li>\n<li>Admin forms are secured with nonces and capability checks.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to third-party mobile wallet payment APIs to initiate and verify payments. Card\/PIN\/OTP data is never handled by the site. The following external services may be contacted:<\/p>\n\n<ol>\n<li>Vodacom M-Pesa Mozambique API (default provider)<\/li>\n<\/ol>\n\n<ul>\n<li>What it is and what it is used for: the official Vodacom M-Pesa Mozambique payment gateway. It is used to initiate a Customer-to-Business (C2B) USSD push payment request and to verify the resulting transaction status, so the plugin can release the purchased course only after the payment is confirmed server-side.<\/li>\n<li>What data is sent and when: the customer phone number (MSISDN), the transaction amount, the currency and a unique transaction reference are sent (a) when the student clicks \"Pay\" on the checkout page to start the payment, and (b) afterwards through automated polling \/ WP-Cron checks to update the payment status.<\/li>\n<li>Endpoints used: https:\/\/api.vm.co.mz:18352 (production) and https:\/\/api.sandbox.vm.co.mz:18352 (sandbox\/testing).<\/li>\n<li>Terms of Service: https:\/\/www.vm.co.mz\/artigo\/termos-e-condicoes<\/li>\n<li>Privacy Policy: https:\/\/www.vm.co.mz\/privacidade<\/li>\n<li>Developer portal: https:\/\/developer.mpesa.vm.co.mz\/<\/li>\n<\/ul>\n\n<ol>\n<li>Other mobile wallet APIs configured by the site administrator (optional)<\/li>\n<\/ol>\n\n<ul>\n<li>What it is and what it is used for: the plugin can also connect to other mobile wallet providers (for example e-Mola, mKesh or a custom wallet) only if the site administrator manually enables and configures them by entering the provider's base URLs and credentials. They are used for the same purpose: initiating a payment request and verifying its status.<\/li>\n<li>What data is sent and when: the same data (phone number, amount, currency and transaction reference) is sent to the endpoint configured by the administrator, at the same moments described above.<\/li>\n<li>Terms of Service \/ Privacy Policy: these depend on the provider chosen and configured by the administrator, who is responsible for reviewing and complying with that provider's terms and privacy policy before enabling it.<\/li>\n<\/ul>\n\n<h3>Checklist<\/h3>\n\n<ol>\n<li>Verify that the plugin activates without any errors.<\/li>\n<li>Check that MasterStudy LMS dependency notice is shown if it is deactivated.<\/li>\n<li>Add a new wallet under settings.<\/li>\n<li>Edit the wallet settings and verify they are saved.<\/li>\n<li>Deactivate a wallet and check that it is no longer shown.<\/li>\n<li>Verify validation on checkout phone number field.<\/li>\n<li>Conduct a sandbox payment transaction.<\/li>\n<li>Receive a payment confirmation webhook.<\/li>\n<li>Confirm the order status changes to completed.<\/li>\n<li>Confirm course enrollment for the user.<\/li>\n<\/ol>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>mais360-mobile-wallet-payments-for-masterstudy<\/code> folder to your <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>Verify that MasterStudy LMS is active.<\/li>\n<li>Go to MasterStudy &gt; Mobile Wallet Payments (or click the 'Mobile Wallets' submenu if the parent menu is not detected).<\/li>\n<li>Configure the general settings.<\/li>\n<li>Configure at least one mobile wallet provider.<\/li>\n<li>Configure callbacks at your provider using the webhook URLs displayed in the Diagnostics tab.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20require%20woocommerce%3F\"><h3>Does it require WooCommerce?<\/h3><\/dt>\n<dd><p>No. The plugin works directly inside the native MasterStudy LMS checkout and creates native MasterStudy orders.<\/p><\/dd>\n<dt id=\"which%20mobile%20wallets%20are%20supported%3F\"><h3>Which mobile wallets are supported?<\/h3><\/dt>\n<dd><p>M-Pesa (Vodacom Mozambique) is supported out of the box. e-Mola, mKesh or any other wallet with an HTTP API can be added and configured manually in the wallet settings.<\/p><\/dd>\n<dt id=\"does%20the%20site%20ever%20ask%20for%20the%20wallet%20pin%3F\"><h3>Does the site ever ask for the wallet PIN?<\/h3><\/dt>\n<dd><p>No. The student only types the phone number. The payment is confirmed on the student's phone, in the wallet's own prompt. PINs, OTPs and private wallet data never reach the site.<\/p><\/dd>\n<dt id=\"when%20does%20the%20student%20get%20access%20to%20the%20course%3F\"><h3>When does the student get access to the course?<\/h3><\/dt>\n<dd><p>Only after the wallet API confirms the payment server-side, either through the callback\/webhook or through the automatic WP-Cron status check. Until then the order stays pending.<\/p><\/dd>\n<dt id=\"what%20does%20%22temporarily%20unavailable%20%28gateway%20error%29%22%20mean%3F\"><h3>What does \"temporarily unavailable (gateway error)\" mean?<\/h3><\/dt>\n<dd><p>The wallet API, or a proxy in front of it, returned an HTTP 5xx error, so the request did not reach the payment service. The plugin retries once automatically and keeps the transaction pending; the student can try again a moment later.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.3<\/h4>\n\n<ul>\n<li>First public release on WordPress.org.<\/li>\n<li>Mobile wallet selector with side-by-side wallet logos and a phone field that adapts to the selected wallet.<\/li>\n<li>Clear message and one automatic retry when the wallet API returns an HTTP 5xx gateway error.<\/li>\n<li>The plugin no longer writes to MasterStudy's own settings option; the payment method is exposed through a read-only filter.<\/li>\n<li>Uninstall also removes the internal migration flag option.<\/li>\n<\/ul>","raw_excerpt":"Professional mobile wallet payment gateway for MasterStudy LMS checkout, without requiring WooCommerce.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/326086","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=326086"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hteezy"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=326086"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=326086"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=326086"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=326086"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=326086"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=326086"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}