Woocommerce linked licensing system for your plugins
-
@steve-mohican said in Woocommerce linked licensing system for your plugins:
@orange One question,
How do you handle the serial numbers in Woocommerce License Manager plugin? Do you upload serials before purchase, or any ideas?
Both ways are possible. Like @dustbro said, I am using automatic license creation, it's very handy and you don't have to worry about if the serials are running out or not. Instead of uploading thousands of serials, also automatic license way makes your database more clean.
-
Do you need to include REST api keys in your HISE project?
-
@d-healey said in Woocommerce linked licensing system for your plugins:
Do you need to include REST api keys in your HISE project?
No. Wordpress, Woocommerce and any other REST api keys are not required.
Because Wordpress account authentication is done with the user email and password credentials (thanks to
JWT Authentication for WP REST API
plugin).And Woocommerce queries is done by the
Woocommerce License Manager plugin's API v3
using JWT method, if the users got the licenses in their accounts.Very simple, fast and secure!
-
I've tried the woocomemrce licensing plugin that you recommend, it is a great plugin and the specific solution for me exactly. I'll go with this.
And also I've just tested your License Manager app, it works great. Fantastic job congrats.
Can you use the same license activation system in your plugins too, just like in the License Manager app?
-
@harris-rosendahl said in Woocommerce linked licensing system for your plugins:
I've tried the woocomemrce licensing plugin that you recommend, it is a great plugin and the specific solution for me exactly. I'll go with this.
And also I've just tested your License Manager app, it works great. Fantastic job congrats.
Can you use the same license activation system in your plugins too, just like in the License Manager app?
Thanks. Yes of course, the same Hise server API system is used in the plugins too. Connecting to the servers, activating/deactivating the products with the device id, add license...etc. features are the same.
Only difference is standalone License Manager app is more flexible than the plugin for license management process; because standalone app handles all of the product licenses in one place, and also deactivates multiple computers.
Because of the GUI limitation, in the plugin, user will activate/deactivate only for the dedicated product and computer. I think in the plugin GUI, deactivating "Product B" in "Product A" does not makes sense. License Manager standalone app stands for this purpose.
-
@orange said in Woocommerce linked licensing system for your plugins:
Yes of course, the same Hise server API system is used in the plugins too. Connecting to the servers, activating/deactivating the products with the device id, add license...etc. features are the same.
Ok. I made a quick tester plugin with this Woo commerce license manager plugin and jwt auth that you suggested, it works great! I was lost before but not found the right thing.
I will definitely go with this way, it is the all in one solution for a plugin developer. Thank you so much for this useful information
-
I'm on my first steps of communicating with my server to setup an authorization system, and currently I'm just testing the server functions in HISE by calling for the auth token.
JWT in installed and everything is (supposed to be) set up correctly on my server.
I'm able to receive the token by making a POST request here :
"/wp-json/jwt-auth/v1/token"But i'm getting an error when testing the token here :
"/wp-json/jwt-auth/v1/token/validate"Everything is working fine when testing the procedure with Postman.
The thing is, if I setup the http header with the token string, it works :
Server.setHttpHeader("Authorization: Bearer " + "token.TypedManuallyAsA.String");
I'm getting a 200 response, but
if I setup the http header withServer.setHttpHeader("Authorization: Bearer " + text);
, I end up with a "Authorization header malformed".I checked this thread where @d-healey 's
mentionned having header problems but I changed the htacces and the wp-config.php accordingly to the JWT docs so it's supposed to be ok on this side.If someone has any clue about what's going on :)
-
@matt_sf I use
Server.setHttpHeader("Authorization: Bearer " + token);
Console.print() your
text
variable to make sure it contains what you think it does. -
@d-healey here's a snippet, the "text" variable contains only the token as a string.
If I use a the token as a string I get a "Wrong number of segments" error.
If I use the token as an object I get a "Signature verification failed" error...HiseSnippet 1336.3ocsWstaaaCElJIpn1adXEaO.B5WxXN9RaV2PJ1lqykUilKd0osa+piVhNlIxjBjTw0MH.6QaOR6MX6PQcytNYAFs5OIj7b467cNjmiGH39DojKPVUNadDAY8k1CmyTS1aBlxP82GY8M1CIhqHh8vggNW0tYmlOA0adDVJIAHKqM+UsfVU1Bk78O+RObHl4SJ1BgdCm5SNhNkpJ1cP2WRCCODGPNiNsjz6zsuOmsGOjGCfZS61nHr+k3yImf0hsgMx5AGDPUbwPEVQjHqs5wClObBeFyH+anR5nPhdQGzPvPlsOjGFnQrdWzdSngACxBdIBrxfBpXSCU7s1GSCn46WPIecxANEZTlOr1XQ3s4BvqSY30tD7VAjrJAosLP5Q1C8EzHUwIZ77E18YJhXLFn8xPwHKZCmGXuGGjfoZNEeI4PArHWCum1tcCmG2tc8mUqZsp.4KUNWgENgiBesjHX.u67SNYF3bhZO9zHNCV34VRFWs9Kn8..Hy3hf6R6LYbMdWPN2IFLHnRISqUyyUQduJQLsP5fzHTlEVRnLrPX9h4QJJm8RxbPiNO9I6jCz.h7REOB19PZHY3bohLUamjZEgWoM22HYQLRYi4fdoVHIvzIPsJdt5CapxQh4BTSIQ0CKIu9UG44NQohj61pkjGyBFSYmSDxl97otKmE.vUq500pVwMNin2MghZ3n2LJi+1MgRpU8lD8orPJi3LNl4qCcGNqmhMjvBzIBAOzyOKKz.7RXLotwIgbeLbKGBLkPWaHHRPLIo9ybfOskqPG63koRkqcR+f+uRZXBVH7sT0jAmN7LO2Vyh19BIm05hYpswwpIstpSKE+RBysgSTibH5Ig6KwxFN4tzojs0+457+qRB+NSPUjSGcAwWkiylIVVygFAgvUxCIMiDTcA2qREyYWGWmua4XzDjk73MYgckaxH1UWHOxPtt0043TJV+d4H3oKuk495OKwRqJIA14MDAc77+mzzh4.M2aRb5peH2kPOgbbvykCUPjetWBirLabllqxnBPybZqnd8EPY5KHX8kA2mCIOtf9ArFr65zifEvE0xJun5225fVPjPCfGKgBBW26phHqPnR5+n+VLlLYTih0yimaStRY9hL98JaaxR2V9d4zX8zDdoL8Ibn1k4Uu50UqT8lpNKez3wq7rTCFB4iUcrtUp3tTziEOcj9sCS0SlfP+kEaZYe6MsJ2S02vOkDjy5ynpSiHraqSKJkT0M3RQEHpJo81Wk1dqWrRwYHZft2VNahR.c4AKPut+9XENyTfUAOEQDJpNHr1mbEL3goyYE6zmvgXMOWByRbqNthc5sZz6Kb4ezcd9ht+YWI9JRe1.nNhnLLBUdLeJXYrXdFAT3rGZbVsTmcDdDILwW0rK0sqr+Noj+P62UeQCvrs98ezLZfZRwoztSHzymTZDqet6XfTFR+PINqc26Ofx5rda.5u9sT.U0NqMzmBP8f6UsPAl96YKlTLX5g1oB9wYjOdrJXfNdPbHVs3Td5QaSO.tEsvnU5wmXRpZd4Qe+jM528EhOxd.U4OY0XbiUfQ3lxmCLlNvbM6CFOFZGW.vsrO72+7LcL5U7XEzZ6XLzgCJFrOId5P32L3S.uyXjP8qXVaneuwrtsdslAz2oSV7uvW5gczqsROrS1gnoXeA+c9lWozij+vjc.LkbQEdi3X8ZmNYOMYa2tYazT3WG7Neec3uMTusZcd7ZnySVCc1YMz46WCcd5ZnyOrF57i2oN5eXFLnBep45.rwfCRZQXYc.CCUVIUgn+CjFkKIA
Also a weird thing : when I get the token then ask for validation and get a header error, if I start again from the beginning, I don't receive the token and get a 403 error... I don't know if it's supposed to happend serverwise...
-
@matt_sf I'm getting
403
when clicking btnSend -
@d-healey ... sorry it was a generic snippet, here I put some test credentials :
HiseSnippet 1361.3ocsWs0aaaCElJIJnxadXEa6cA8jLVpuz10Mjhs45bYMnMIdwIoaO0QKQGyFYRARp35FDf8Sa+j1+fsCE0M65jEXrpWRH44x246bHOG2WvCHRIWfrbNcVLAY841ClwTi2YLlxPGrKx5qrGPDWQD6fihbupcyNMeBp2rXrTRBQVVq+KZAsb1.k982+bObDlEPJ2BgNmSCHulNgpJ2se2WQih1GGRNkNohzOs6AAb1N7HdB.p0saihwAWhufbDVK1Z1HqM2Kjp3hAJrhHQVaziGNavX9TlQ9yoR5vHhdQGz.vPls2mGEpQrdWzNioQg8yCdIBrR+RpXcCU701GRCoE6WRIeY5AtkZTkOrVad3s9bvqSU30tB7VBjrp.oMLP5g1CBDzXU4IZ77Y1GvTDwHLP6UghQVzZtaZuCGjfoZNAeIYeArnPC+m0t8VtOtc6FOuds50.xWpbuBKbiFFcljHX.u69it4F3BhZG9jXNCV36UQFOs9yoce.HS4hv6R6bY7LdWPtvMALHnRESqUy2SQduJULsP5fzHTtEVPnbrPXAhYwJJm8JxLPiNO9IOs.ngD4kJdLr89zHxfYREYh1No0JB+JatqQxxXjxFwA8xrPZfoSfZU78zG1TUfDyEnlRhpGVRN6jW66MVohka2pkjmvBGQYWPDxlA7IdKlE.vUu100q43kjSzamRQa4p2LNm+1NkRpW6lT8orHJi3NJgEnCcWNqmhMfvB0IBAOxOHOKrE3knDRCiSh3AX3VNDXJgt1PPjfXRRim6BeZK6PG45mqhy0tYev+6jElfEhdCUMt+wCN02q0z3G8NIm05cSUOBmnF25pNsT7KILusbi2p.h9R39RhbK2BW5Vw15+bcw+4jxuSETE43guiDnJvYyTKq4PifP3J4QjlwBptf6jLwb210y8aWLFMAYEOdSdX6bSNwt7B4gFx0qgNGmQw52KGBOc4uH2234oVZYIIvNmSDzQy9ORSymCzbuIwoq9gbWJ8DwwguPNPAQ9E9oLxhrwoZtJmJ.MKnsx50WBkoujf0WF7dAj73B5GvZvtsaOBV.WTqp77peeqCZAQBMDdrDJH77tqJh7BAmr+Q+MeLYxnFEaTDO2lbUx7kY76U11jkts78howFYI7JY5i3PsKyuQsqq4T6lZtKdznQK8rLCFA4ikcrtUp3tTzmkLYn9sCS0StfP+k4aZYe6Msp1SMvvOUDjyNfQUGGSX2VmVTFopavkgJPTUZ6suHq8VuDkhyPzPcusB1DkB5pCVfN6fcwJbto.qBdJlHTTcPXsK4JXvCSmSG6rmvgXsHWByRbqN1wN6VM58kt726NqXQ2+nqDeE4.VenNhnLLBUdHeBXYrXVNAT5rGXbV8Lm8Z7PRTpupaWoaWU+cTE+g1sq9hldDM4nlPZR0DX4ozP03RYncGSnWLtxfV+T2Q.0Lf9gJLW6tUgkycBq79q2Fr9yeMCVeictnmBX6EAAPqM0phuz8Tyzkb0Jr6bj4l2qRlRP+WSmO2Y.8CryD7iSbe7zWvbe7vjHrZ9gA0S.mc.bYatIvzSYwjT0rpSH++1Dh2WH9P69TUv3kiw0VBFgKTeJvX1b00s2azHnqcI.2vd+e6SyPznS3IJnC3gXnQHTLXeTxjAvOsHf.dmwHQ5G6rVS+rjYca8ZMCnu5mt3efurC6nWakcXm7CQSvAB9aCLOlomb+Ao6.XJ89L7Txg50tcxeAy1tcy1nIvOh3sAA5v+QP81x04wqfNOYEz4oqfNe2JnyyVAc99UPme3N0Q+62f4Y3SLWGfM5uWZmDKq8XXnxJsJD8uPIY6vM
-
@matt_sf Mystery solved. Look in your info.txt file, see those quotation marks? They're not part of your token are they :)
Try
local text = info.loadAsString().replace('""');
-
@d-healey aaaarrh, I sensed they might be the cause of the error, I tried to use
.replace
but didn't write it correctly.
Thanks a lot David, as always you're here to save the day -
@d-healey I tried it this morning but no luck, the
.replace
function didn't work, I still ended up with the quotation marks...
But I tried different things and ended up writing the whole response object (not just the token) to a file and load it as anobject.value
and it finally worked.HiseSnippet 1368.3ocsWs0aaaCElJIpnxadXEa6cA8jLVpuz10Mjhs45bYMnMod0oYaO0QKQGyFYRARp35FDf8Sa+j1+fsyQWrjcbRKLV8KQj7b467cNjmS5qjALsVpHVNmLKlQr9b6AyDlw6NlxEjC2iX8U1CXpKXpcoQQtWztYmlOjzaVLUqYgDKqM+ETPKmsHo+9metGMhJBXkaQHmJ4ArWvmvMk61u6y4QQGPCYmvmTQ5G08v.oXWYjLA.0l1sIwzfyomwNlhhsgMw5N6GxMR0.C0vzDqs5ICmMXrbpHS9S4Z9vHFtnCY.XnrsOPFEhHF2kr6XdTX+hfWS.qzujJ1LiJ9Z6i3g746WRIeY5AtkZTkOr1XQ3s4BvqSU30tB7VAjrp.osxfz8rGDn3wlxSP77Y1GJLL0HJP6UgRlrjM5dG6ckfDBSyIzyYGnfEy0v+wsaus6CZ2twSpWqdMf70F2KnJ2ngQuVyTBf2c+Q2BCbFyrqbRrT.K78pHiGp+BZ2G.xToJ71ztPFuLuqXm4l.FDTohoQ078Lr2YRECEBCxLgJrvRBUfElHPMK1vkhmylAZz4AO7QyAZHSetQFCae.OhMXl1vlf1IsVQ4WYy8xjrLF4hQRPubKjFXXBDUw2COroYNRxt.0TyL8nZ1qe0K78FaLw5cZ0RKSDgi3hyXJcy.4DukyB.3pW6x50b7RJH5cRonscwMiK3ucRoj50tJUetHhKXtiRDAXn6JE8LhALQHlHTxH+fhrv1fWhRXMxbRjLfB2xg.ynvZCESChoYMdhK7CsrCejqegJNW5l+C91IOLAKD8aby39ubvI9dslFe+2pkhVucp49zDy3VWzokQdNS3ssa71ygnuFtujn21ctKcqXa7OWN+KHHzxHVyXEGKidUtFt63549sKibjPS0xIMqLUwMrWN7sr.SknqPjkb4UEwsyUEL6pqjGlwtdMvjbNGiOXNDd6xeYxuwSRszpxRfcNko3il8AxSKlDPxOKygk+PxKMRijzvmpyC0zPrPHj8wTLHbyzEoGtDqdRpT4TJ98bVprb9YPU7yXT7th2SgbqTweOECkcb6wnJ3d7BZun9er0Isf.kGBOlBELdd2VESQghS9GWuVIq1HSwxJiaRtqWCcU5We3hgrj3MUNrbVtQd8PkBgikPUpvuQsKq4T6pZtKeznQq7rbCFAIjUcL1pUcaJ5KRlLDeaIq3pPPn+yhM0ru4lZU64FjwOUDTJNTvMuLlItoNwjbREa.liJPTSZ6uuHu8WuDiQJH7Pr22b1jjB5pCdPd8g6QMzBSAVE7TLSY3XPXsG6BXvjrNqN14OwCw57bILqwM5XG67K8j2U5x+n6r4K59mc0zKXGJ5C0QLSFiv0GIm.VlplUP.kN6tYNqdtydAcHKJ0W0sqzMrp+Nth+H60EuQiivoG0DRSll.KOkGZFWJCu6XF+rwUFD6m5NBnlA72Wg4Z2sJrbtUXUz+8lf0e8q4v5arKD8D.aOMH.Z8YVW7ktmYFVxUatcWfLuyGUISIn+6oKl6x.8csyE75ItqOcFLWnLLIhZVbXQbB47CfKaKLgFNElPyMypNA8+aSP9wBw6Y2maBFuZLtwJvHbg5SAFym6tt89iFAMsJA3V1G76eZFxl7JYhAF+5HpQwghA6iSlL.9WOBXf2EBVD9Xm0F3yRYqaiqQF.u5mt3ege4G1AWakeXmhCISnAJ4aBxdLCmr+to6.XJ89L7TxQ3Z2NEufYa2tYaxD3ex3MAAX3eenda057f0PmGtF57n0PmuaMz4wqgNe+ZnyObq5f++cv.MxIYWGfM5ueZmDKq8ETnxJsJj7efpnPjI
Edit : I tried just this little bit of code and the
.replace
function doesn't work as expected...? :const text = '"text"'; Console.print(text.replace('""'));
Console prints :
"text"
-
HiseSnippet 685.3ocsU0taSCCE0tsdhV9bR7.D0e0JMpZgw.oIDi0OfJXaUjwD+axywc0ZN1QNNiUg3cl2.35jrkVnTFQh7ijd+33bx8dt2NwnY73XsAgqe77HNBeOh+bkcV+YTgBMd.B+.xAzXK23k4Z+4Qz3Xd.Biq9VmCb8Znzqu+58oRphwKbgPmnEL9GDgBag2I68dgTNhFvOVDtP1au2XlV0WK0I.epR5hhnrKnmyOj5RqBAg2XXfvpM9VpkGiv01WGL2el9Kpr7OQDKNSxcF8P9vAk4djVF3XryKp+LgLXx0e2wH3TlTTEplUEdL4.Qf3F+EUiGkFvq.wh0CbkkoW0knWu+D8VAkvKPoZYTZShOyHhrEQb74tjwJn4LkBk8EoRVtnJODS5qgLT1NgzK3iLfwMHZsS2ta4A2ZuaiFPoO15Y4WY8dkWS2ylfW.brVx6DYDJaKm2NFdjzAtoKks7ZNi68NsbtWHkQgiWzrc6cmlnXVgV4oUGps7iTsZ23qMp23aM790PSmtxXNVazRI2rxvNkiYc.aoRBOia1x6RpLgeShP4b4dzF2tdDKqHtPhZ0XkvdTDO2d8hLTdW.90mFOfZotlbtOHuHtwJbzAOfeILwj0xqSFviuvpifYleSO.JQcPhjZWVd5lIyC.0ikzDt9tJVXmu3L6+fls6Z0r2VJtIYhvxlsZNVYEbDpT+O3X9j98ICmNkyrEDrFYzmK6X8e40+QchUnN+.p0HtBgIGlD5CK6Xb3sqTbIb3DbEmZIytqy1UA74pfTie.W4A64rw4A6ccPDLFZzmxxlBb6RtSpGfSpz0n0g84fsWOT5jAfizsSWTHrV6TFy84+DP.uZLOsDXdVIvrcIv77RfYmRf4Ek.yKWKF2+n7lDqNLab.bLYX5JBLdnhBJqTUH5mbvmDj.
-
@matt_sf Console always shows quotation marks for strings. I tested the code before I suggested it to you with your snippet and it worked for me.
-
@d-healey @ustk oh that's odd.
@matt_sf said in Woocommerce linked licensing system for your plugins:
const text = '"text"';
Console.print(text.replace('""'));
Ok in this example I put the
"string"
inside the simple quotes'
so that was my mistake.But If I use a txtFile.txt containing
"Some text"
(with the double quotes like I get when writing theresponse.token
into a file) and use this code:const desktop = FileSystem.getFolder(FileSystem.Desktop); const textFile = desktop.getChildFile("txtFile.txt"); const test = "test"; Console.print(test.replace('""')); Console.print(textFile.loadAsString().replace('""'));
It doesn't work. The console output correctly
test
but outputs"Some text"
...HiseSnippet 741.3ocsU01aSCCD1tsdhVXHlD+.h5WVpznpEFCjlPrs9BpB1VEYLw2l7bbWslicThyXUH9yvuP9G.mSxVRGkxnRjOzz64tG6Ge9tKiizLdbrNBgqexrPNB+Hh2LkYZuoTgBMpOB+XxgzXCOxIC5fYgz3XtOBiq9NK.tdMT5yOd6ATIUw3EPHzoZAi+AQfvTfNdu2KjxgTe9IhfRQu8diXZUOsTm.5oJoCJjxtjdA+HpMrJDDdsA9BiNxyPM7XDt1AZ+YdS0eQkE+ohXw4Rt0nKxCVnL3gZouUwVTTuoBo+3aN2wHXUFWjEplkEdJ4Pgu3V7hrwSRc3Tvnb9.WYd4UcN408OIuEHIbIIUKSRaP7XQhPSgGqddHYjBtblPgzdYojEKpx2wjdZHBkoc.8R9vHv3VFt6zoyVNvOs1sQCH0Gab74wWZzgNuwYnPx8lA27AsufaRSgQtk.6mEYqcWOmpgesw5G3luJVhomMKraSSl+1v6lE6HjoL.kl12MATPtwZHpvHgx3ZQaGwCkV4tYyla1BXd2PxWWol5uermAPuvs0cYMIQwLBsxQqNRa3Gqba03qMp23aMbtqqISVnOahLRKkPdXQtsEyQKinqJI3bdzVNWQkI7aCDtgmurYs6WYCK6dsTfZ0HkvbbHO2d408n7BC3eeZTepgZq6xwf3B4QFgUN397qfl3rpv5j76cnM92JQglCsehjZluiwNlH2AjOlqL0VJphElYkGi7OzF0YosQ2WItAYrvvltXMVYAZDxT+OzX9vm0IClLgyLEBrFY3mW0IM+ks+i5DCzubHEZatFgIGkD3AyeYbX2UJtDVbBthsZIyti01lA73J+TieBO4N6Zsw4N6diST.kEoOik0EXGu8fTDPSpzI60gOw.1NcQocF.ORm1cPAvj1yXL6w+YPA7h477UfyKVANauBbd4JvYmUfyqVANudobreja+DiNHqc..FOHcDAFOPQgJqzpPzuvoOTjw
The other answer would be that I'm totally losing It (which wouldn't be impossible) :face_with_tears_of_joy:
-
@d-healey said in Woocommerce linked licensing system for your plugins:
I tested the code before I suggested it to you with your snippet and it worked for me.
I thought so, that's why I was surprised it didn't work here....
-
Try below snippet. By the way, why are you using replace? For removing spaces? If yes, you should use it like this:
textFile.loadAsString().replace(" ", "")
HiseSnippet 738.3ocsU0taSCCE0tqAQKTDShGfn7qToQUJLFHgPrs9ApB1VEYLw+l7bbWslicThyXUHdt30h2.353rkrQ2zTkVpTS84dOtmb84dyzTEkkkoRQ3VGtHggvO0IbgTOevbBWhlLDgelydjLMK00Bs6hDRVFKBgwq8IC.tUSTw0e93tDAQRYUPHzQJNk8EdLWWgNc6OyEhwjH1g73ZYu41SnJ4.kPkC5YMm.TBgdF4T19DSZMbP3GMJhqUogZhlkgvM2UEsHbt5GRa9Gwy3mHXlE8QgvFYgGqDQFEaPQClyEQSu74NCA6xzppvZ1pvKb1iGwuBupZ77h.tULpWOvMtK40ut7Bt+xCWSdMsxacmPZJOQWEwnsm3LQBGTyHvQPcYYyE032XmNsGnfbj5dwjyXiSgEWwweqffMbgu599Ns6zFNJxztQrryzpD2O3NlKXgK.mPbuSY5BMm5WCbnMSCYKUM6BsINvsbWLDKd9Lv9dZa7dvcu5+mPsSCj7L28JvAQmofLSR4RsuAuWJKQXDsm2FtddcM7uYVkauPQh1IKTCnm52cYDselkKoZtR5pj6qzrCj9ca+y1sZ+q1t2LzrYKMlo1lpDBnvrrvF2d5cQzWlGeBKcC2yIhb1UIBG6W2W4b69p51dp8ntVhJ4DIWePBSdatMTo+.902lLjnIFCXIFjWBKUyMR.OjcNzYasisbJO7gd6+yqBcLpnbAQe81Hyrix.PM3Z9UiiTlw0KpOa4Ao259J20clx0z4KWuMVhdgp1CsdKmT0wYzrYLptRrMcF+8G9wRnupx0PG0dDnw5BvStedbHL3lx.kHkLgwmhaXbT10Al0lJSHSFUr3uvUYv9l03xf8uLHJlPSUGSscGlYgOt.Azjr3UBsf2MAqc6iJ5X.dNA8BPwvH5ioTSo3kf1WNmWsBbd8JvYyUfyaVANasBbd6Jv4c2IGyaG2IWqhssI.vzQEiQv3QRB3xJbjn+Q023zw
-
@orange said in Woocommerce linked licensing system for your plugins:
For removing spaces?
No, we're removing quotation marks
""