Tuesday, May 17, 2022 5:41:44 AM

Plugins ontwikkelen en licenties uitgeven

2 years ago
#690 Quote
Als je zelf een plugin hebt ontwikkeld, en je wilt dat je klanten jouw plugin op licentiebasis mogen gebruiken dan heb je twee mogelijkheden om dat op te zetten:

OPTIE 1
Allereerst kun je zelf een licentiemanager ontwikkelen die rechtstreeks met jouw webwinkel communiceert. Jouw commerciele plugins koppel je weer aan je licentiemanager. Hiermee heb je volledige controle over jouw licenties en werk je geheel buiten shop.nopfinance.com om.

OPTIE 2
Een tweede mogelijkheid is je licenties te laten beheren door shop.nopfinance.com. Hoe werkt dat in de praktijk?

1) In je plugin bron project maak je onder 'References' een koppeling met de dll 'NopFinance.Plugins.Licensing.LicenseManager.dll'. Deze vind je in de CustomPlugins\NopFinance.Plugins.Licensing.LicenseManager folder.  Zet de 'Copy Local' property van de plugin altijd op False

Nu heb je de beschikking over de licentiemanager van NopFinance. Je bepaalt nu waar je in je broncode op de licentie wilt controleren. Dat doe je als volgt:

Declareer in de klasse waarin je wilt controleren op licentie een member naar ILicenseManagerService:
#region IoC
  private ILicenseManagerService _licenseManagerService;
#endregion

Je kunt nu via Dependency Injection een instantie verkrijgen via AutoFac:
public MyClass(ILicenseManagerService licenseManagerService)
{
_licenseManagerService = licenseManagerService;
}

of je gebruikt de EngineContext om dynamisch een instantie te verkrijgen:
_licenseManagerService = EngineContext.Current.Resolve<ILicenseManagerService>();

Je klasse moet ook een interface ondersteunen te weten ILicensable. Dus je klass-definitie komt er bijvoorbeeld zo uit te zien:
 public class MyPlugin : BasePlugin,  ILicensable,
        IConfigurationMenuPlugin,
        INopMenuItemPlugin,
        ITabMenuItemPlugin

Nu ben je klaar om te controleren op een geldige licentie. Bijvoorbeeld voordat je een scherm opent of een betaalde functie wilt uitvoeren:
if(_licenseManagerService.HasActiveLicense(this))
{
...doe wat je mag doen met licentie
}


Belangrijk: In de licentiemanager wordt de uitkomst van de functie HasActiveLicense(..) gecached voor 60 minuten. Dat betekent in de praktijk dat je de functie regelmatig mag aanroepen zonder dat dat performance-problemen zal veroorzaken. Na 60 minuten zal de request weer iets langer duren omdat dat dan de hash wordt doorgerekend.

Nu je jouw kant voor elkaar hebt zul je je plugin ook nog bekend moeten maken op het shop.nopfinance.com platform.

Hiervoor moet de AssemblyName van je plugin geregistreerd worden in onze webshop. Momenteel kan dat alleen nog door de beheerder gedaan worden. Stuur daarom een mail met de volgende gegevens naar info@nopfinance.com

-De Assembly Name (uit je project>properties>application pagina)
-De naam van je plugin

of je Description.txt bestand

en verder
-De duur van de geldigheid van je licentie in maanden of in jaren, bijvoorbeeld 1 jaar of 6 maanden, 9 maanden etc.
-De prijs van je plugin ex btw
-Een afbeelding voor je plugin

Later zul je middels een verkopers account zelf je plugins kunnen beheren.

Als je niet zeker weet wat je Assembly Name is dan kun je die opvragen met het volgende stukje code:

var assemblyName = this.GetType().Assembly.FullName.Split(new[] { ',' })[0];
0
"In an age where information is abundantly available, it is no longer enough to possess it. You have to act on it!"
2 years ago
#691 Quote
"Na 60 seconden zal de request weer iets langer duren omdat dat dan de hash wordt doorgerekend."
Hier wordt waarschijnlijk 60 minuten bedoeld?

Is er of komt er ook een oplossing als de client op dat moment dat je de licentie informatie nodig hebt geen internet verbinding heeft?
Bv. een handmatig in te geven "noodcode" welke door de plugin leverancier gegenereerd kan worden?

Zijn er nog voorwaarden of verplichtingen gekoppeld aan het gebruik van het nopFinance licentie systeem?
0
nopFinance plugin developer
E-commerce specialist sinds 2003
Sinds 2003 ervaring in het begeleiden van starters en mkb-ers met het opzetten van hun bedrijfsautomatisering/administratie
0031-(0)36-7851687 / 0031-(0)6-54694849 (whatsapp)
2 years ago
#692 Quote
"Is er of komt er ook een oplossing als de client op dat moment dat je de licentie informatie nodig hebt geen internet verbinding heeft?"

Bij het ophalen van een licentie wordt deze altijd voor 1 maand uitgegeven. Later zul je ook een licentie krijgen voor de maand erop zodat altijd wordt gecontrolleerd op geldigheid van de huidge maand en de eerstvolgende maand.

Daarnaast wordt een kopie van licentie ook in de administratie opgeslagen. Die kopie geldt voor de huidige maand van de licentie. Die licentie is een combinatie van machine id, plugin en looptijd en is geencrypt in 1-richting wat wil zeggen dat decrypten geen zin zal hebben. Dit laatste is gedaan om bij wanbetaling een licentie op de server te kunnen uitschakelen waarbij de gebruiker de huidige maand (en volgende maand) nog toegang heeft tot de functies.


Onder normale en licht afwijkende omstandigheden moeten er geen problemen ontstaan. Maar omdat dit proces nog in ontwikkeling is kunnen er nog wijzigingen komen.
0
"In an age where information is abundantly available, it is no longer enough to possess it. You have to act on it!"
2 years ago
#693 Quote
"Zijn er nog voorwaarden of verplichtingen gekoppeld aan het gebruik van het nopFinance licentie systeem?"

Op dit moment nog niet. Op termijn zal hiervoor wel een fee betaald moeten worden door de aanbieder van de plugin. Dan zal ook de verkoop van de licentie door shop.nopfinance.com worden gedaan.

Shop.nopfinance.com zal overigens voorlopig geen dll's (bestanden) van developers aanbieden. Dit ivm aansprakelijkheid bij malafide plugins.
0
"In an age where information is abundantly available, it is no longer enough to possess it. You have to act on it!"
2 years ago
#694 Quote
Nog even het hele proces in vogelvlucht:

1) Client koopt licentie voor bijvoorbeeld 1 jaar via de shop.nopfinance.com website

2) NopFinance haalt licentie op vanaf de shop.nopfinance.com server en krijgt een licentie voor de huidige maand, of voor de laatste maand indien de licentie verlopen is..

3) Plugin vraagt of licentie geldig is
3a) NopFinance berekent vervolgens een hash voor de huidige maand en vergelijkt deze met de licentie.
3b) zijn de hashes niet gelijk dan is de licentie ongeldig

Het mechanisme van 1 maand verder kijken wordt later uitgewerkt in de licentiemanager.
0
"In an age where information is abundantly available, it is no longer enough to possess it. You have to act on it!"
2 years ago
#695 Quote
Vanaf 1.1.4.8 kun je ook de relatieve ouderdom van de licentie opvragen via de functie:

_licenseManagerService.GetLicenseAncienity(this)


Je krijgt dan een enum terug met de volgende waarden :

Expired = 0,
Expiring = 10,
Active = 20


De waarde Expiring wordt doorgegeven als de licentie in de laatste maand van geldigheid zit. De plugin kan daar dan zelf iets mee gaan doen!
0
"In an age where information is abundantly available, it is no longer enough to possess it. You have to act on it!"
2 years ago
#701 Quote
De licentieserver en plugin zijn nu aangepast en ondersteunen nu ook de next-month licentie. Dwz dat de licentieserver bij bijvragen altijd een licentie voor de huidige maand + een licentie voor de navolgende maand teruggeeft.

Er wordt alleen een licentie voor de navolgende maand meegegeven als het abonnement dat toestaat.

Om al deze mogelijkheden te kunnen gebruiken moet de client naar 1.1.4.9 bijgewerkt worden.
0
"In an age where information is abundantly available, it is no longer enough to possess it. You have to act on it!"