{"id":338028,"date":"2026-08-21T15:08:48","date_gmt":"2026-08-21T15:08:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/glin-payments-for-woocommerce\/"},"modified":"2026-09-17T23:33:58","modified_gmt":"2026-09-17T23:33:58","slug":"glin-payments-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/ur.wordpress.org\/plugins\/glin-payments-for-woocommerce\/","author":23530095,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.8","stable_tag":"0.1.8","tested":"7.0.5","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Glin Payments for WooCommerce","header_author":"Glin","header_description":"Accept Brazilian card and PIX payments in BRL through Glin while settling WooCommerce orders in the merchant currency.","assets_banners_color":"","last_updated":"2026-09-17 23:33:58","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/glin.com.br","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":314,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.1":{"tag":"0.1.1","author":"lucianoglin","date":"2026-08-21 15:08:25","revision":3659262},"0.1.2":{"tag":"0.1.2","author":"lucianoglin","date":"2026-08-21 16:06:54","revision":3659335},"0.1.3":{"tag":"0.1.3","author":"lucianoglin","date":"2026-08-27 16:09:53","revision":3669206},"0.1.4":{"tag":"0.1.4","author":"lucianoglin","date":"2026-09-02 20:59:59","revision":3678665},"0.1.5":{"tag":"0.1.5","author":"lucianoglin","date":"2026-09-02 21:47:43","revision":3678711},"0.1.6":{"tag":"0.1.6","author":"lucianoglin","date":"2026-09-16 05:24:39","revision":3697938},"0.1.7":{"tag":"0.1.7","author":"lucianoglin","date":"2026-09-17 14:28:26","revision":3700434},"0.1.8":{"tag":"0.1.8","author":"lucianoglin","date":"2026-09-17 23:33:58","revision":3701107}},"upgrade_notice":{"0.1.5":"<p>Adds safer debug logs for failed Glin API requests. Debug logging remains disabled\nby default and does not include card tokens, CPF\/CNPJ, email, phone, or address\nvalues.<\/p>","0.1.4":"<p>Improves checkout errors when an order amount is outside Glin&#039;s supported API\nrange.<\/p>","0.1.3":"<p>Fixes webhook signature verification. Earlier versions rejected every Glin webhook as\nhaving an invalid signature, so paid orders were never marked paid automatically.\nUpdate as soon as possible.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3669205,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3669205,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3659387,"resolution":false,"location":"assets","locale":false}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.1","0.1.2","0.1.3","0.1.4","0.1.5","0.1.6","0.1.7","0.1.8"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[11475,6593,1887,49349,286],"plugin_category":[45],"plugin_contributors":[276843],"plugin_business_model":[],"class_list":["post-338028","plugin","type-plugin","status-publish","hentry","plugin_tags-credit-card","plugin_tags-payment-gateway","plugin_tags-payments","plugin_tags-pix","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-lucianoglin","plugin_committers-lucianoglin"],"banners":[],"icons":{"svg":"https:\/\/ps.w.org\/glin-payments-for-woocommerce\/assets\/icon.svg?rev=3659387","icon":"https:\/\/ps.w.org\/glin-payments-for-woocommerce\/assets\/icon.svg?rev=3659387","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Glin Payments for WooCommerce adds Glin as a WooCommerce payment gateway. It lets Brazilian shoppers pay in BRL using card or PIX while the WooCommerce order remains in the merchant settlement currency supported by Glin.<\/p>\n\n<p>The plugin loads the official Glin Checkout SDK automatically, sends tokenized payment data from WordPress to Glin with the merchant API key, and reconciles final order state through signed Glin webhooks. Merchants do not need to configure a custom SDK URL.<\/p>\n\n<p>Main capabilities:<\/p>\n\n<ul>\n<li>Card and PIX checkout support.<\/li>\n<li>Classic checkout and WooCommerce Checkout Blocks support.<\/li>\n<li>Automatic Glin remittance reservation during checkout.<\/li>\n<li>Automatic webhook registration when gateway settings are saved.<\/li>\n<li>Short card status polling so fast declines can keep shoppers on checkout.<\/li>\n<li>Order-received polling and bounded WordPress cron reconciliation as webhook fallbacks.<\/li>\n<\/ul>\n\n<p>Requirements:<\/p>\n\n<ul>\n<li>WooCommerce 7.8 or newer.<\/li>\n<li>A Glin merchant account.<\/li>\n<li>Glin API and public checkout keys for sandbox or live mode.<\/li>\n<li>A WooCommerce store currency supported by Glin.<\/li>\n<li>Public HTTPS store URL for automatic webhook registration.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to Glin services to process payments and keep WooCommerce orders synchronized with Glin payment status.<\/p>\n\n<p>Service provider: Glin Brasil Servicos Digitais LTDA and Glin, INC.<\/p>\n\n<p>Service endpoints used by the plugin:<\/p>\n\n<ul>\n<li><code>https:\/\/sdk.glin.com.br\/v1\/glin-checkout.js<\/code> loads the Glin Checkout SDK in the shopper browser when Glin is available at checkout.<\/li>\n<li><code>https:\/\/pay.glin.com.br<\/code> is used by the WordPress server in Live mode.<\/li>\n<li><code>https:\/\/pay.staging.glin.com.br<\/code> is used by the WordPress server in Sandbox mode.<\/li>\n<\/ul>\n\n<p>Data sent to Glin and when it is sent:<\/p>\n\n<ul>\n<li>When checkout is prepared, the plugin sends the WooCommerce cart amount, currency, generated checkout reference, success URL, and cancel URL so Glin can create or reuse a remittance.<\/li>\n<li>When the shopper submits payment, the plugin sends the Glin remittance ID, selected payment method, tokenized card data or PIX request data, installments when applicable, billing name, email, phone, CPF\/CNPJ, and billing address so Glin can process the payment.<\/li>\n<li>When payment status is checked, the plugin sends the Glin remittance ID and public checkout key so Glin can return the current payment status.<\/li>\n<li>When gateway settings are saved and the store URL is public HTTPS, the plugin sends the WooCommerce webhook URL and subscribed event types so Glin can deliver payment status updates to the store.<\/li>\n<li>Glin sends signed webhook events back to the WooCommerce store webhook URL when a remittance is paid, canceled, expired, delivered, or disbursed.<\/li>\n<\/ul>\n\n<p>Terms of service: https:\/\/www.glin.com.br\/legal\/terms<\/p>\n\n<p>General platform terms: https:\/\/www.glin.com.br\/legal\/general-terms<\/p>\n\n<p>Privacy policy: https:\/\/www.glin.com.br\/legal\/privacy<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate WooCommerce.<\/li>\n<li>Install this plugin from Plugins &gt; Add New, or upload the plugin ZIP from Plugins &gt; Add New &gt; Upload Plugin.<\/li>\n<li>Activate Glin Payments for WooCommerce.<\/li>\n<li>Open WooCommerce &gt; Settings &gt; Payments.<\/li>\n<li>Enable Glin.<\/li>\n<li>Choose Sandbox or Live mode.<\/li>\n<li>Enter the matching Glin API key and public checkout key.<\/li>\n<li>Choose the payment methods to expose, then save settings.<\/li>\n<\/ol>\n\n<p>After settings are saved, the plugin attempts to register the store webhook with Glin. Local HTTP stores can still test checkout flows, but webhook registration requires a public HTTPS URL.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20this%20plugin%20be%20used%20without%20woocommerce%3F\"><h3>Can this plugin be used without WooCommerce?<\/h3><\/dt>\n<dd><p>No. This is a WooCommerce payment gateway. WordPress can install the plugin, but checkout functionality requires WooCommerce to be installed and active.<\/p><\/dd>\n<dt id=\"does%20the%20merchant%20need%20to%20configure%20an%20sdk%20url%3F\"><h3>Does the merchant need to configure an SDK URL?<\/h3><\/dt>\n<dd><p>No. The plugin uses Glin's configured Checkout SDK URL internally.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20support%20sandbox%20testing%3F\"><h3>Does the plugin support sandbox testing?<\/h3><\/dt>\n<dd><p>Yes. Merchants can choose Sandbox mode and enter sandbox API\/public checkout keys.<\/p><\/dd>\n<dt id=\"how%20do%20webhooks%20work%3F\"><h3>How do webhooks work?<\/h3><\/dt>\n<dd><p>When gateway settings are saved, the plugin attempts to register the WooCommerce store webhook URL with Glin. Glin sends signed payment\/remittance events to that URL. The plugin verifies the signature, finds the WooCommerce order by stored Glin identifiers, and updates the order status idempotently.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20a%20webhook%20is%20delayed%3F\"><h3>What happens if a webhook is delayed?<\/h3><\/dt>\n<dd><p>The plugin also polls pending order-received pages and schedules bounded WordPress cron reconciliation for orders left waiting.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.8<\/h4>\n\n<ul>\n<li>Load the checkout styles and the payment-status script on the My Account order page too.\nA pending PIX order shown there had an unstyled QR code and a status line that said it\nwas waiting for confirmation but never updated, because nothing was polling it.<\/li>\n<\/ul>\n\n<h4>0.1.7<\/h4>\n\n<ul>\n<li>Stop the PIX QR code filling the whole column on desktop. The size was set on the image,\nand Elementor's <code>.elementor img { max-width: 100% }<\/code> is a more specific selector, so it\nwon and the code stretched to the width of the page. The QR code is now sized by a\ncontainer of its own, which a theme has no reason to restyle.<\/li>\n<\/ul>\n\n<h4>0.1.6<\/h4>\n\n<ul>\n<li>Fix classic checkout never sending payment data. WooCommerce dispatches\n  checkout_place_order_ with <code>triggerHandler()<\/code>, which does not bubble, so the\nhandler bound on <code>document.body<\/code> never ran and orders were placed with an empty payload\nand immediately failed with \"Glin payment was not ready.\"<\/li>\n<li>Bind the place-order handler to <code>form.checkout<\/code> directly and re-bind it after each\ncheckout update.<\/li>\n<li>Fix every card payment failing with \"This remittance is not available for the current\ncheckout session.\" The <code>{remittanceId}<\/code> placeholder in the prepare endpoint URL was\nstripped by <code>esc_url_raw()<\/code>, so the request went to a literal <code>remittanceId<\/code> path.\nAffected both classic and block checkout.<\/li>\n<li>Send the billing phone in E.164 when preparing a payment. WooCommerce stores whatever\nthe shopper typed, and the unnormalized value was rejected, so card payments could not\nget past the prepare step. The pay request already normalized; prepare did not.<\/li>\n<li>Stop mangling phone numbers in area code 55, and accept a phone written with the\nnational trunk \"0\" before the area code. Brazil's country code and the Santa Maria area\ncode are the same two digits, so testing for a \"55\" prefix removed those shoppers' area\ncode instead of adding the country code and their payments were rejected. Length tells\nthe two apart once the trunk \"0\" is stripped.<\/li>\n<li>POST the 3D Secure challenge with its <code>creq<\/code> field instead of opening the ACS URL as a\nplain link. EMV 3DS 2.x answers a bare GET with an error page. Falls back to a link when\nthe provider sends no <code>creq<\/code>.<\/li>\n<li>Treat an expired or canceled remittance as terminal. A checkout abandoned before any\norder exists reports only <code>remittanceStatus<\/code>, so orders previously stayed in \"pending\npayment\" forever and consumed every reconciliation attempt.<\/li>\n<li>Keep polling for payment confirmation for the full 32 minutes a PIX code can be paid in,\nup from 6, and tell the payer when the page stops watching instead of leaving \"Waiting\nfor payment confirmation\" on screen forever.<\/li>\n<\/ul>\n\n<h4>0.1.5<\/h4>\n\n<ul>\n<li>Log sanitized Glin API failure context to WooCommerce logs when debug logging is\nenabled.<\/li>\n<li>Include request method, endpoint path, status code, safe remittance fields, and\nboolean presence checks for sensitive customer, address, and card payload fields.<\/li>\n<li>Keep card tokens, device fingerprints, CPF\/CNPJ, email, phone, and full address\nvalues out of plugin logs.<\/li>\n<\/ul>\n\n<h4>0.1.4<\/h4>\n\n<ul>\n<li>Validate WooCommerce order totals against the Glin merchant API amount range before\ninitializing checkout.<\/li>\n<li>Replace raw API validation text with a shopper-safe order amount message.<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Verify the webhook JWS over the raw request body, as required by the unencoded\ndetached payload form (RFC 7797). Earlier versions base64url-encoded the body first\nand rejected every valid signature.<\/li>\n<li>Check the protected header claims before trusting a webhook: <code>alg<\/code> is RS256, <code>b64<\/code> is\nfalse, <code>aud<\/code> matches the integration account, and <code>kid<\/code> names a key in Glin's JWKS.<\/li>\n<li>Send the API key as a Bearer token when fetching the JWKS, which that endpoint requires.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Remove screenshot captions until matching WordPress.org screenshot assets are available.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Initial pilot release of the Glin WooCommerce gateway.<\/li>\n<\/ul>","raw_excerpt":"Accept Brazilian card and PIX payments through Glin in WooCommerce.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/338028","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=338028"}],"author":[{"embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/lucianoglin"}],"wp:attachment":[{"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=338028"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=338028"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=338028"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=338028"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=338028"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ur.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=338028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}