আপনার সফটওয়্যারে লাইসেন্স যুক্ত করুন
একটি রপ্তানি সুরক্ষায় প্রায় ১৫ মিনিট ধরুন: কনফিগ, উদাহরণ, অ্যাপে সংযোগ ও প্রত্যাখ্যান পরীক্ষা। ভাষার উন্নয়ন সরঞ্জাম আগে থেকেই বসানো থাকতে হবে।
অনুরোধ, ডিভাইস পরিচয়, স্বাক্ষর, পরিচয়পত্র, ক্যাশ ও হার্টবিট SDK সামলায়। গ্রাহকের কী ও কাজের ফাংশন দিন; নিজে HTTP বা activation_id সংরক্ষণ লাগবে না।
- সংযোগ প্যাকেজ ডাউনলোডকনসোলে পণ্যের সেটিংস তৈরি
- রপ্তানি করা ফাইল তৈরি করুনঅনুমোদন ও কাজের ফল পরীক্ষা করুন
- অ্যাপে যুক্ত করুনশুরু, কাজের প্রবেশবিন্দু, বন্ধ
১. কনসোলে প্যাকেজ তৈরি করুন
খুলুন দ্রুত শুরু, সফটওয়্যারের নাম দিন, ডিভাইসে বাঁধা বা ফ্লোটিং লাইসেন্স বেছে পণ্য তৈরি করে এগিয়ে যান। সিস্টেম পণ্য, নীতি, পরীক্ষার লাইসেন্স, পাবলিক কী ও 1.0.0 সংস্করণ তৈরি করে। ভাষা বেছে প্যাকেজ ডাউনলোড ও আনজিপ করুন।
প্যাকেজে দুটি কনফিগারেশন আছে:sdk-demo.json আপনার পরীক্ষার জন্য লাইসেন্স কী আছে;product.json শুধু পণ্যের সেটিংস ও পাবলিক কী আছে, যা সফটওয়্যারের সঙ্গে বিতরণ করা যায়।
প্রথম সংযোগে ডিভাইস বাঁধা লাইসেন্স নিন। ডিফল্ট উদাহরণে গণনা ছাড়া export আছে। বিদ্যমান পণ্যে নীতি ও লাইসেন্স দুটিতেই একই ফিচার থাকতে হবে।
২. পরিবেশ পরীক্ষা করে একটি ফাইল রপ্তানি করুন
আনজিপের মূল ফোল্ডারে টার্মিনাল খুলুন। product.json, sdk-demo.json, start.ps1, start.sh ও sdk একসঙ্গে রাখুন। ভাষা ও সিস্টেম বেছে কমান্ড চালান। পরিবেশ পরীক্ষায় সক্রিয়করণ যায় না।
সাফল্যের চিহ্ন:প্রস্থান কোড ০, নিচের আউটপুট এবং নতুন licensed-report.txt। পরীক্ষার পতাকা ছাড়া আবার চালালে SDK ডিভাইস পরিচয়পত্র ফেরায়, আরেকটি ডিভাইস স্থান নেয় না।
License OK: export is available
Export completed: licensed-report.txtআগে অনুপস্থিত উন্নয়ন সরঞ্জাম বসান। C/C++-তে libcurl উন্নয়ন ফাইলও লাগে; MinGW-তে -CurlRoot ব্যবহার করা যায়। ব্রাউজারের সতর্কতা মেনে নিলেও SDK শংসাপত্র বিশ্বাস করে না; রানটাইমকে পরীক্ষার সার্ভারের শংসাপত্র বিশ্বাস করতে হবে।
৩. গ্রাহকের অ্যাপ্লিকেশনে যুক্ত করুন
প্রজেক্টে সাইটের ইনস্টলার চালান। নয়টি ভাষাই 0.10.0 ব্যবহার করে। ইনস্টল বা আনজিপের আগে SHA-256 যাচাই হয়। অ্যাপ রিসোর্সে কেবল product.json রাখুন।
ডাউনলোড করা ইন্টিগ্রেশন বান্ডল থেকে অফলাইনে ইনস্টল করুন
SDK_ROOT-এর জায়গায় আনজিপ করা ফোল্ডারের সম্পূর্ণ পথ দিন।
এই ভাষার চালানোর উপযোগী ফাইল:। এর কাজের প্রবেশবিন্দু আপনার প্রকল্পে কপি করুন; সম্পূর্ণ কোড দেখুন →
| অ্যাপের ধাপ | করণীয় |
|---|---|
| শুরু বা সক্রিয়করণ পর্দা | product.json ও গ্রাহকের কী দিন। সক্রিয়করণের পর পরবর্তী শুরুতে খালি কী দিন। GUI অ্যাপে প্রথম অনলাইন সক্রিয়করণ পটভূমির কাজে করুন। |
| রপ্তানি বোতাম, শর্টকাট, মেনু বা কমান্ড | রপ্তানির ফাংশন RunFeature-কে দিন। SDK অনুমতি পেলেই ফাংশন চালায়। একই client সক্রিয় রাখুন। |
| অ্যাপ বন্ধ | হার্টবিট বন্ধ করতে client বন্ধ করুন। ফ্লোটিং আসন ফেরত যায়; বাঁধা ডিভাইস নিবন্ধিত থাকে। |
৪. অনুমতি না থাকলে রপ্তানি বন্ধ হয় কি না যাচাই করুন
নীতিতে licentivo_denied_probe নেই নিশ্চিত করে কমান্ড চালান। শূন্য নয় এমন প্রস্থান কোড ও কোনো denied-report.txt না থাকা প্রত্যাশিত। আগে থেকে নেই এমন আউটপুট পথ ব্যবহার করুন।
৫. প্রয়োজন হলে ব্যবহার গণনা যোগ করুন
RunMeteredFeature-কে ফাংশন ও স্থায়ী কাজের ID দিন। SDK ব্যবহার সংরক্ষণ করে, সাফল্যে নিশ্চিত ও কাজে ব্যর্থ হলে বাতিল করে, অপেক্ষমাণ নিশ্চিতকরণ লিখে রাখে।গণনাভিত্তিক সংযোগ ও পুনঃচেষ্টা দেখুন →
শুধু প্রয়োজনীয় SDK ও product.json বিতরণ করুন। প্রত্যেক গ্রাহকের নিজস্ব কী। sdk-demo.json, ক্যাশ, যন্ত্রের পরিচয়পত্র বা ব্যবস্থাপনার API Key দেবেন না। খালি cache_path ব্যবহারকারীর ব্যক্তিগত ডিরেক্টরি বেছে নেয়।
এই তিনটি পরিচয় বুঝুন
| নাম | কে ব্যবহার করে | উদ্দেশ্য |
|---|---|---|
লাইসেন্স কী lv_lic_… | সফটওয়্যার ক্রেতা | অ্যাপের ভেতরে সক্রিয় করুন। ডিভাইস বদলের অস্থায়ী কোড lv_tmp_… একই ঘরে দিতে হয়। |
| পণ্য ID | SDK / সফটওয়্যার ডেভেলপার | কোন পণ্য যাচাই হচ্ছে জানায়; অ্যাপের সঙ্গে বিতরণ করা যায়। |
| পরিচালনার API কী | বিক্রেতার সার্ভার | লাইসেন্স ইস্যু, নবায়ন ও পরিচালনা স্বয়ংক্রিয় করে। ক্লায়েন্ট সক্রিয়করণে লাগে না। |
হার্টবিট ব্যবধান ও অফলাইন সময় আলাদা নির্ধারণ করুন লাইসেন্স নীতি। প্রথম সক্রিয়করণ থেকে মেয়াদ শুরু। সাধারণ সংযোগ কাজ করার পর ফিচার কোটা, ফ্লোটিং সিট ও অফলাইন ফাইল সক্রিয়করণ যোগ করুন।
নিবন্ধন ছাড়াও খুলতে পারেন ডেমো দেখুনঅনুরোধ ও রেসপন্স দেখার জন্য। স্বয়ংক্রিয় লাইসেন্স ইস্যুর জন্য পড়ুন পরিচালনার API কী।
ক্লায়েন্ট SDK
SDK-কে ফাংশন দিন: অনুমতির জন্য RunFeature, গণনার জন্য RunMeteredFeature। অনুরোধ, স্বাক্ষর, ক্যাশ ও হার্টবিট SDK সামলায়।
চালানোর আগে
কনসোলে, দ্রুত শুরুতৈরি প্যাকেজ ডাউনলোড করুন। ডেমোতে ব্যক্তিগত ফাইল ব্যবহৃত হয় sdk-demo.json; বাস্তব অ্যাপে ব্যবহার করুন product.json, গ্রাহকের কী শুরুর প্যারামিটার হিসেবে দিন। নিচের SDK ডাউনলোডে সাধারণ সোর্স আছে, আপনার পণ্যের সেটিংস নেই।
কনফিগারেশনের প্রতিটি ফিল্ডের অর্থ কী?
{
"base_url": "https://www.licentivo.com",
"product_id": "PRODUCT_UUID",
"license_key": "",
"device_name": "Customer app",
"app_version": "1.0.0",
"trusted_keys": {
"SIGNING_KEY_UUID": "BASE64URL_PUBLIC_KEY"
},
"timeout_seconds": 10,
"allow_http": false
}base_url- লাইসেন্স সার্ভারের URL: শুধু ডোমেইন ও পোর্ট, বাদ দিন
/api/v1। স্থানীয় পরীক্ষায় ব্যবহার করুনhttps://127.0.0.1:8080। product_id- এই অ্যাপের পণ্য ID। লাইসেন্সের পণ্যের সঙ্গে মিলতে হবে।
license_key- product.json-এ খালি রাখুন। OpenWithLicense-এ গ্রাহকের কী দিন:
lv_lic_…অথবা ডিভাইস বদলের কোড:lv_tmp_…; এতে ভাগ করা কনফিগারেশন বদলায় না। app_version- বর্তমান সংস্করণ major.minor.patch আকারে, যেমন 1.0.0। সংস্করণসীমা বা রক্ষণাবেক্ষণ চালু হলে আবশ্যক। সংস্করণ বদলালে আবার অনলাইনে যাচাই করুন।
device_name- কনসোলে দেখানো ডিভাইসের নাম। চিনতে সাহায্য করে, কিন্তু ডিভাইসের পরিচয় নির্ধারণ করে না।
trusted_keys- পণ্যের স্বাক্ষর কী ID ও পাবলিক কী। অ্যাপ বা যাচাইকৃত আপডেটের সঙ্গে বিতরণ করুন। অজানা রেসপন্সের দেওয়া পাবলিক কী বিশ্বাস করবেন না।
cache_path- বাদ দিন বা খালি রাখুন; ব্যবহারকারীর ব্যক্তিগত ডিরেক্টরি ব্যবহৃত হবে। অ্যাপের নিজস্ব ব্যক্তিগত স্থানও দিতে পারেন।
timeout_seconds- প্রতি অনুরোধের সময়সীমা সেকেন্ডে: ডিফল্ট 10, সীমা 1–120। সাময়িক নেটওয়ার্ক সমস্যায় সর্বোচ্চ দুইবার চেষ্টা।
proxy_url- ঐচ্ছিক প্রক্সি ঠিকানা। Java-তে HTTP প্রক্সি; Node.js-এ প্রক্সি দিলে undici লাগে। সনদ যাচাই চালু থাকে।
allow_http- বাস্তব ব্যবহারে মান রাখুন
false, HTTPS ব্যবহার করে। স্থানীয় পরীক্ষায় মান দিতে পারেনtrue, তবে শুধু localhost বা loopback ঠিকানায়।
নিজে দিতে হবে না device_id: SDK স্থানীয় ডিভাইসের পরিচয় পড়ে। product.json-এর পাবলিক কী বিতরণ করা যায়; গ্রাহকের কী ও sdk-demo.json ব্যক্তিগত রাখুন।
আপনার ভাষা বেছে নিন
কোডটি বিতরণ করা ফাইলের মতোই এবং বাস্তব রপ্তানি তৈরি করে। পরিবেশ চলক সক্রিয়করণ ইনপুটের বিকল্প; নিজের UI নিন ও অ্যাপ চলাকালে client সক্রিয় রাখুন।
একই ইনস্টলেশন পদ্ধতি ও সংস্করণভিত্তিক রিলিজ
ভাষা ও প্ল্যাটফর্ম বেছে প্রজেক্টে চালান। Licentivo সাইটে SDK দেয়; GitHub অ্যাকাউন্ট লাগে না। GitHub ও পাবলিক রেজিস্ট্রিতে প্রকাশ এখনো অপেক্ষমাণ।
সংস্করণ: · সংস্করণভিত্তিক প্যাকেজ · SHA-256 চেকসাম ফাইল · রিলিজ ম্যানিফেস্ট
Windows x64 ও Linux x64 যাচাই হয়েছে। macOS ও ARM64-এর বাস্তব ডিভাইস পরীক্ষা বাকি। C/C++ বাইনারি প্যাকেজ প্ল্যাটফর্ম ও কম্পাইলারভেদে আলাদা।
ইনস্টল করা SDK কীভাবে ব্যবহার করবেন
| ভাষা | প্রজেক্ট ইন্টিগ্রেশন |
|---|---|
| Go | import licentivo "github.com/spf86/licentivo-sdk" |
| Java | implementation(files('.licentivo-sdk/java/v0.10.0/licentivo-sdk-0.10.0.jar')) |
| C / C++ | find_package(Licentivo 0.10 REQUIRED) · target_link_libraries(MyApp PRIVATE Licentivo::C) / Licentivo::CPP |
| C# | using Licentivo; |
| Python | from licentivo import Client |
| Node.js | import {Client} from '@licentivo/sdk' |
| Rust | use licentivo::Client; |
| Ruby | require 'licentivo' |
Go, Rust ও C/C++-এর .licentivo-sdk ফোল্ডার প্রজেক্টে রাখুন। আপডেটে নতুন সংস্করণ বাছুন; product.json ও গ্রাহকের লাইসেন্স ক্যাশ অক্ষত থাকে।
SDK দিয়ে সুরক্ষিত কাজ চালান এবং প্রস্থানে client বন্ধ করুন।
正在加载代码…দ্রুত শুরুর স্ক্রিপ্ট দিয়ে এই ফাইল চালান →
অন্য গ্রাহকের কী ব্যবহার করুন বা সম্পূর্ণ প্রোটোকল ডেমো চালান
পরিবেশ চলক সেট করে পরীক্ষার পতাকা ছাড়া স্ক্রিপ্ট চালান। লাইসেন্স কী প্রশাসনিক API কী নয়।
সফল হলে আউটপুট হবে License OK: export is available। অ্যাপের সক্রিয়করণ ফর্ম থেকে কী নিন। গ্রাহকের পরিবেশ চলক লাগবে না; SDK যন্ত্রের পরিচয়পত্র সংরক্ষণ করে। কী লগে লিখবেন না।
প্যাকেজের সম্পূর্ণ ডেমো চালান
ফোল্ডার কাঠামো রেখে ZIP আনজিপ করুন। রাখুন sdk-demo.json আনজিপের মূল ফোল্ডারে। সিস্টেম বেছে সেখানে টার্মিনাল খুলে চালান:
সম্পূর্ণ প্রোটোকল ডেমো উন্নত সমস্যা নির্ণয়ের জন্য। আগে start.ps1 বা start.sh চালান; স্বাভাবিক বন্ধে ওই উদাহরণগুলো ডিভাইস নিবন্ধন রাখে।
ম্যানেজমেন্ট উদাহরণ কীভাবে চালাব?
আগে সার্ভারের পরিবেশে দিন LICENTIVO_URL ও LICENTIVO_API_KEY, লাইসেন্স সার্ভারের ঠিকানা ও সম্পূর্ণ ব্যবস্থাপনা Key দিন। উদাহরণটি পণ্যের তালিকা পড়ে HTTP অবস্থা ও উত্তর দেখায়।
HTTP 200 ফেরত, থাকবে data.items, অনুরোধ সফল হয়েছে। 401 হলে Key সম্পূর্ণ কি না, মেয়াদ শেষ বা বাতিল হয়েছে কি না দেখুন। Key তৈরি ও অনুমতি দেখুন পরিচালনার API কী।
অ্যাপের উদাহরণ চালান
উদাহরণে সক্রিয়করণ, অবস্থা, ফাইল রপ্তানি ও যন্ত্র মুক্ত করা আছে। Java, Python, C#-এ জানালা; বাকিতে টার্মিনাল মেনু। একবার কী দিন, পরে খালি রেখে ফিরিয়ে আনুন।
সফল রপ্তানিতে licensed-report.txt তৈরি হয়। গণনাভিত্তিক রপ্তানির আগে নীতিতে export-এর সীমা দিন।
উইন্ডো ও মেনুর ডেমো নিচু স্তরের সংরক্ষণ দেখায়। নিচের RunMeteredFeature ব্যবহার করুন; নয় ভাষাতেই অপেক্ষমাণ নিশ্চিতকরণ থাকে। কাজের মাঝখানে ক্র্যাশ হলে নিজের ফল যাচাই করুন।
অনুমতির অবস্থা কীভাবে দেখাবেন?
Status ও FeatureStatus স্থানীয় অবস্থা পড়ে; অনুরোধ বা পটভূমির যাচাইয়ের জন্য অপেক্ষা নয়। বিজ্ঞপ্তি দিয়ে পর্দা হালনাগাদ করুন।
| অবস্থা | অর্থ |
|---|---|
active | শেষ অনলাইন যাচাই সফল; স্থানীয় অনুমতি বৈধ। |
offline_valid | স্থানীয় স্বাক্ষর বৈধ; চালুর পর অনলাইন নিশ্চিতকরণ সফল হয়নি। |
verification_required | ব্যবহারযোগ্য স্বাক্ষর নেই। সক্রিয় করুন বা অনলাইনে হালনাগাদ করুন। |
| expired / revoked / released | সার্ভার স্পষ্টভাবে অনুমতি প্রত্যাখ্যান করেছে। সুরক্ষিত কাজ বন্ধ করুন। |
quota_exhausted | এই গণনাভিত্তিক অনুরোধ সীমা ছাড়িয়েছে; অন্য অনুমোদিত সুবিধা ব্যবহার করা যায়। |
allowed স্থানীয় অনুমতির বৈধতা; গণনাভিত্তিক সুবিধায় সংখ্যা চাইতে হয়। lease_valid_until স্বাক্ষরিত ক্যাশের সময়সীমা, লাইসেন্সের শেষ নয়। code, request_id, retryable হলো ত্রুটি, লগ পরিচয় ও আবার চেষ্টা করা যাবে কি না।
মেথড, কলব্যাক ও প্যাকেজ ব্যবহারের জন্য ডাউনলোডের sdk/README.md দেখুন। সাইট সংস্করণভিত্তিক প্যাকেজ ও একই ইনস্টলার দেয়; পাবলিক রেজিস্ট্রি প্রকাশ অপেক্ষমাণ।
অ্যাপের কোন জায়গায় এটি রাখবেন?
| অ্যাপের ধাপ | করণীয় |
|---|---|
| শুরুতে বা কী দেওয়ার পরে | OpenWithLicense কল করুন (C++-এ constructor ও Start)। SDK সক্রিয় করে নীতি অনুযায়ী হার্টবিট শুরু করে। |
| সশুল্ক ফিচারের আগে | ফাংশন RunFeature-কে দিন; গণনার জন্য RunMeteredFeature ব্যবহার করুন |
| অ্যাপ চলাকালে | client রাখুন; SDK নীতির ব্যবধানে হার্টবিট পাঠায়। |
| অ্যাপ বন্ধের সময় | Close / Dispose / Destroy হার্টবিট থামায়, ফ্লোটিং সিট ফেরায় ও বাঁধা ডিভাইসের নিবন্ধন রাখে। |
| ব্যবহারকারী খুললে | Deactivate কল করে client বন্ধ করুন। |
টেবিলের নামগুলো কাজ বোঝায়; নিজের ভাষার উদাহরণের সঠিক পদ্ধতি ব্যবহার করুন। হার্টবিট, অফলাইন ক্যাশ ও অনলাইন রিফ্রেশ দেখুন হার্টবিট ও অফলাইন ব্যবহার।
পরিচালনার API কী
অর্ডার সিস্টেম থেকে স্বয়ংক্রিয় লাইসেন্স দিতে বা সার্ভার থেকে অনুমতির তথ্য পড়তে ব্যবস্থাপনা API Key ব্যবহার করুন। এটি আপনার বিক্রেতা কর্মক্ষেত্রের পরিচয়।
ক্লায়েন্টের কোন কী লাগে?
| পরিচয়পত্র | কাকে দেবেন | কী কাজে লাগে |
|---|---|---|
lv_api_…পরিচালনার API কী | আপনার নিজস্ব সার্ভার | পণ্য, নীতি, লাইসেন্স তৈরি; ডিভাইস, ব্যবহার ও অডিট দেখুন |
lv_lic_…লাইসেন্স কী | গ্রাহকের সফটওয়্যার | সক্রিয়, যাচাই, হার্টবিট ও ডিভাইস মুক্ত |
| পণ্যের পাবলিক কী | ক্লায়েন্টের সঙ্গে দিন | সার্ভারের লাইসেন্স স্বাক্ষর যাচাই |
গ্রাহকের সফটওয়্যারে অনুমতি যাচাইয়ে লাইসেন্স কী যথেষ্ট। ব্যবস্থাপনা API Key পুরো কর্মক্ষেত্র নিয়ন্ত্রণ করে; গ্রাহকের সফটওয়্যার বা প্রকাশ্য পাতায় রাখবেন না।
একটি কী তৈরি
- ওয়ার্কস্পেস Owner হিসেবে লগইন করে খুলুন API Key এবং API Key তৈরি চাপুন।
- কাজ অনুযায়ী নাম দিন, যেমন “অর্ডার সিস্টেম”। পড়তে শুধু-পড়া, লাইসেন্স তৈরি বা বদলাতে পড়া/লেখা বাছুন। মেয়াদ 1–365 দিন।
- সংরক্ষণের পর সম্পূর্ণ Key কপি করুন; একবারই দেখানো হয়। সার্ভারের ব্যক্তিগত কনফিগ বা পরিবেশ চলকে রাখুন।
প্রথম ম্যানেজমেন্ট অনুরোধ পাঠান
উদাহরণটি পণ্যের তালিকা পড়ে। দিন LICENTIVO_URL লাইসেন্স সার্ভারের URL এবং দিন LICENTIVO_API_KEY সদ্য তৈরি সম্পূর্ণ কী, তারপর চালান:
curl "$LICENTIVO_URL/api/v1/products?limit=25" \
-H "Authorization: Bearer $LICENTIVO_API_KEY"এটি Bash/macOS/Linux-এর রীতি। Windows PowerShell-এ ব্যবহার করুন curl.exe; পরিবেশ ভেরিয়েবল হলো $env:LICENTIVO_URL ও $env:LICENTIVO_API_KEY। নয় ভাষার পূর্ণ অনুরোধও এখানে SDK পৃষ্ঠার সার্ভার ম্যানেজমেন্ট API Key বিকল্প।
সফল হলে HTTP 200 ও থাকবে data.items। Bearer Key-তে লগইন কুকি বা CSRF লাগে না।
অধিকার ও অকার্যকর হওয়ার ব্যবস্থা
শুধু-পড়া Key সম্পদ দেখায়; পড়া/লেখা Key পণ্য, নীতি ও লাইসেন্স তৈরি-বদলায়। অ্যাকাউন্ট, দল, সিস্টেম সেটিং বা অর্থপ্রদানে যথাযথ অ্যাকাউন্টে লগইন লাগে, ব্যবস্থাপনা Key নয়।
ফাঁস হওয়া বা অব্যবহৃত Key কনসোলে বাতিল করুন। বদলাতে Rotate চাপুন; পুরোনো Key সঙ্গে সঙ্গে অকার্যকর হয়। পরে সার্ভার কনফিগ বদলান।
প্যাকেজের API কোটায় সক্রিয়করণ, যাচাই, হার্টবিট ও মুক্ত করার অনুরোধ গণনা হয়। এই ব্যবস্থাপনা অনুরোধগুলো তাতে পড়ে না।
পণ্য ও লাইসেন্স API
অর্ডারের পরে নিজের সার্ভার থেকে লাইসেন্স দিন: আগে পণ্য ও নীতি তৈরি করুন, পরে প্রতিটি গ্রাহকের লাইসেন্স। প্রথম দুটি সাধারণত একবারই তৈরি করতে হয়।
আগে কনসোলে লেখার অনুমতিসহ পরিচালনার API কী। নিচের উদাহরণ ব্যবহার করে Authorization: Bearer 你的管理Key; এই কী বিক্রেতার সার্ভারে রাখুন।
পণ্যের data.id হবে product_id, নীতির data.id হবে policy_id। লাইসেন্স দেওয়ার পর data.id ও data.key রাখুন। সম্পূর্ণ কী একবারই ফেরত আসে; তালিকার key_prefix দিয়ে সক্রিয় করা যায় না।
সক্রিয় না হওয়া সীমিত লাইসেন্সে,expires_at ও first_activated_at null। প্রথম সফল সক্রিয়করণে শুরু; বদলে নতুন মেয়াদ নয়।
পরবর্তী ব্যবস্থাপনা
| পদ্ধতি ও পথ (/api/v1 ছাড়া) | কাজ ও অনুরোধের বিষয়বস্তু |
|---|---|
GET /products | পণ্যের তালিকা পড়ুন। উত্তরে data.items রেকর্ডের অ্যারে, data.total মোট সংখ্যা। |
GET /licenses/{id} | লাইসেন্স, প্রথম সক্রিয়করণ ও মেয়াদ দেখুন। |
POST /licenses/{id}/renew | নবায়ন, যেমন {"days":30}। মূল লাইসেন্স থাকে। |
POST /licenses/{id}/revoke | বাতিল; অনুরোধের বিষয়বস্তু {}। |
GET /products/{id}/public-keys | লগইন ছাড়া পণ্যের পাবলিক কী দেখুন। SDK বিতরণে বিশ্বস্ত কী নির্দিষ্ট রাখুন। |
GET /activations | ডিভাইস বাঁধন ও সেশন দেখুন। |
তালিকা পৃষ্ঠায় ব্যবহার limit=25&offset=0, limit সর্বোচ্চ ১০০। অন্য মান ও কাঠামো দেখুন OpenAPI ফাইল; লাইসেন্সের ধরন অনুযায়ী বাম পাশের বিষয় দেখুন।
ব্রাউজার সেশনে কল কীভাবে?
ব্রাউজার কুকির লেখার অনুরোধে X-CSRF-Token লাগে। আগে GET /api/v1/auth/csrf, পরে data.csrf_token সেই হেডারে দিন। Bearer Key-তে CSRF লাগে না।
SDK লাইসেন্স কল
ভাষা ও অপারেশন বেছে SDK কল করুন। এটি সক্রিয়করণ, ডিভাইস পরিচয়, স্বাক্ষর যাচাই, ক্যাশ, হার্টবিট এবং ব্যবহার সংরক্ষণ, নিশ্চিতকরণ ও বাতিল সামলায়।
উদাহরণে client শুরু থেকে আসে, path আপনার রপ্তানির পথ এবং exportReport / export_report নিজের ফাংশন। গণনাভিত্তিক jobID অ্যাপে সংরক্ষিত স্থায়ী ID।
সম্পূর্ণ কোড দেখুন → · দ্রুত শুরু · গণনাভিত্তিক সংযোগ ও পুনঃচেষ্টা দেখুন →
অনুমতি পেলেই SDK কাজ চালায়। RunFeature ব্যবহার কমায় না; RunMeteredFeature সংরক্ষণ করে, সফল হলে নিশ্চিত ও ব্যর্থ হলে বাতিল করে। মূল কাজ পুনঃচেষ্টা করলে শুধু নিশ্চিতকরণ মেটে, সম্পন্ন কাজ পুনরায় চলে না।
HTTP অনুরোধ ও প্রতিক্রিয়া দেখুন (নিজস্ব ক্লায়েন্ট বা ত্রুটি নির্ণয়)
নিচের প্রোটোকল SDK-গুলোতে বাস্তবায়িত আছে। এই নয়টি SDK ব্যবহারকারী অ্যাপে এটি আবার লিখতে হয় না।
আটটি ইন্টারফেস লাইসেন্স ও ডিভাইস পরিচয় যাচাই করে; লগইন কুকি, CSRF বা প্রশাসনিক কী লাগে না। প্রস্থানে ফ্লোটিং সেশন ছাড়া হয়; বাঁধা ডিভাইস নিবন্ধিত থাকে।
সক্রিয়করণ, যাচাই বা হার্টবিটের পরে অনুমতি বুঝব কীভাবে?
- HTTP 200 দেখে পড়ুন
data.activation_id। পরের যাচাই, হার্টবিট, গণনা ও আনবাইন্ডে এই ID দিন। - আগে বিশ্বস্ত পণ্যের পাবলিক কী দিয়ে যাচাই
data.leaseযাচাই করে পণ্য, ডিভাইস, সময়সীমা ও ফিচার মিলিয়ে নিন। payload-কে JSON হিসেবে পড়লেই লাইসেন্স বৈধ হয় না। - SDK প্রথম দুই ধাপ স্বয়ংক্রিয়ভাবে করে। RunFeature কাজের আগে অনুমতি পরীক্ষা করে; RunMeteredFeature গণনার সংরক্ষণ, নিশ্চিতকরণ ও বাতিল সামলায়।
SDK স্বাক্ষরিত ক্যাশ রাখে ও নীতি অনুযায়ী হার্টবিট পাঠায়। শুধু টাইমআউটের জন্য বৈধ ক্যাশ মুছবেন না। বাতিল, মুক্ত বা মেয়াদ শেষের স্পষ্ট প্রত্যাখ্যানে SDK-এর ফল অনুযায়ী সুরক্ষিত ফিচার বন্ধ করুন।
ডিকোড payload ফিল্ডের মানে কী?
নিচের উদাহরণ শুধু তথ্য বোঝায়। নিজে স্বাক্ষর যাচাই করলে পাওয়া payload-এর মূল বাইট নিন; JSON নতুনভাবে সাজিয়ে বা serialize করে যাচাই করবেন না।
পুনঃচেষ্টা, হার্টবিট ও বিল
সক্রিয়, আনবাইন্ড ও গণনায় আবশ্যক Idempotency-Key, সর্বোচ্চ 80 অক্ষর, ফাঁক ছাড়া। নতুন কাজে নতুন মান; একই অনুরোধ আবার পাঠালে আগের মান ও বডি রাখুন। যাচাই ও হার্টবিটে ঐচ্ছিক; SDK নিজেই অনুরোধ নম্বর সামলায়।
প্রতি সফল সক্রিয়করণ, যাচাই, হার্টবিট বা মুক্তি এক API কল। ব্যর্থ ও একই idempotent পুনরাবৃত্তি আবার গণনা নয়; CheckFeature স্থানীয়। Consume ফিচার ব্যবহার কাটে, এই API কোটা নয়; quantity কাটার সংখ্যা।
হার্টবিট, অফলাইন সময় ও স্থায়ী অনুসরণ লাইসেন্স নীতি দিয়ে নিয়ন্ত্রিত।payload.expires_at বর্তমান স্বাক্ষরিত ক্যাশের শেষ সময়; লাইসেন্সের চূড়ান্ত মেয়াদ বিস্তারিত পাতায়। দুটি গুলিয়ে ফেলবেন না।
হার্টবিট ও অফলাইন ব্যবহার
দুটি সেটিং অনুমতি নীতিতে, কিন্তু আলাদা বিষয়: নেট থাকলে কতক্ষণ পর সার্ভারে যাবে, আর যোগাযোগ না হলে কতক্ষণ চলবে।
হার্টবিট ব্যবধান: কতবার যাচাই
হার্টবিট ব্যবধান (সেকেন্ড) দিন 600, চালু থাকা অবস্থায় SDK প্রায় প্রতি 10 মিনিটে হার্টবিট পাঠায়। সফল হলে নতুন নিয়ম নেয় এবং স্থানীয় লাইসেন্স ক্যাশ হালনাগাদ করে।
১০–৮৬৪০০ সেকেন্ড দিন। দিলে 0 নির্ধারিত হার্টবিট বন্ধ করে। অ্যাপ নিজে যাচাই বা হালনাগাদ করতে পারে। সময়সূচিতে 0–10% এলোমেলো বিলম্ব যোগ হয়; ব্যবধান কখনো 600 সেকেন্ডের কম নয়।
যন্ত্রে বাঁধা লাইসেন্সের ক্যাশ বৈধ হলে আগে অনুমতি ফেরে, পরে পটভূমিতে অনলাইন যাচাই হয়; টাইমার বন্ধ থাকলেও। শুধু অনলাইন বা ভাসমান আসনে সার্ভারের অনুমোদন লাগে।
অফলাইন সময়: সার্ভার না পেলে কতক্ষণ চলবে
অফলাইন ধরনের তিন বিকল্প। হার্টবিট ব্যবধান বদলায় না।
- নির্দিষ্ট সময়ের অনুমতি
- 24 ঘণ্টা দিলে শেষ সফল অনলাইন যাচাই থেকে ক্যাশ সর্বোচ্চ 24 ঘণ্টা থাকে। এই সময় নেট বা সার্ভার সাময়িক বন্ধ হলেও সফটওয়্যার চলে। পরে সফল অনলাইন যাচাই লাগে।
- অফলাইন বিকল্প নিষিদ্ধ
- শুরুতে সার্ভারের সঙ্গে সফল যোগাযোগ চাই; ব্যর্থ হলে ডিস্ক ক্যাশ প্রবেশ দেবে না। চলার সময়ের স্বল্পমেয়াদি স্বাক্ষর সর্বোচ্চ থাকে
max(10, 心跳间隔)সেকেন্ড; অ্যাপকে যাচাই ও ফিচার অনুমতি পরীক্ষা চালিয়ে যেতে হবে। - স্থায়ী অফলাইন ব্যবহার
- স্থানীয় স্বাক্ষর দীর্ঘদিন চলে, নেট না থাকলেও অনুমতি যাচাই হয়। 30 দিনের লাইসেন্স 30 দিনেই শেষ হবে; স্থায়ী অফলাইন মানে স্থায়ী লাইসেন্স নয়।
API ব্যবহার করে offline_mode এই তিনটি বিকল্প যথাক্রমে limited, none, permanent। নির্দিষ্ট অফলাইন সময় হলে,offline_seconds ১–৩১৫৩৬০০০ সেকেন্ড; অন্য দুটিতে ০।
এই সমন্বয়গুলো কীভাবে চলে?
| হার্টবিট / অফলাইন সেটিং | আসল আচরণ |
|---|---|
| ৫ মিনিট / ২৪ ঘণ্টা | অনলাইনে প্রতি 10 মিনিটে যাচাই। অফলাইনে শেষ সফল যাচাই থেকে সর্বোচ্চ 24 ঘণ্টা চলবে |
| ৫ মিনিট / স্থায়ী অফলাইন | প্রতি ৫ মিনিটে চেষ্টা, সফল হলে নিয়ম আপডেট, যোগাযোগ না হলে বৈধ স্বাক্ষর ব্যবহার। |
| ০ / স্থায়ী অফলাইন | বৈধ ক্যাশে সরাসরি শুরু হয়, নির্ধারিত অনুরোধ নেই। নিজে যাচাই বা refresh করলে সার্ভারে যায় |
| ০ / ২৪ ঘণ্টা | নিয়মিত হার্টবিট নেই, ক্যাশ তবু শেষ হয়। অ্যাপ নিজে যাচাই করবে; হার্টবিট বন্ধে অফলাইন মেয়াদ বাড়ে না। |
অফলাইন সময় হার্টবিট ব্যবধানের চেয়ে বেশি রাখুন। প্রতি ঘণ্টায় হার্টবিট কিন্তু মাত্র 1 মিনিট অফলাইন হলে পরের হার্টবিটের আগেই স্বাক্ষর শেষ হয়; আলাদা যাচাই লাগবে।
নীতি বদলে পুরোনো লাইসেন্স বদলায় কি?
হ্যাঁ। হার্টবিট বা অফলাইন সেটিং বদলালে সংযুক্ত পুরোনো ও নতুন লাইসেন্স পরের সফল সক্রিয়করণ, যাচাই বা হার্টবিটে নতুন নিয়ম নেয়। SDK ক্যাশ বদলায়। একই Idempotency-Key দিয়ে পুনরায় পাঠালে আগের ফলই আসে।
অফলাইন ডিভাইস পুরোনো স্বাক্ষরিত নিয়মে চলে। শুধু নেট ফিরলেই ক্যাশ বদলায় না; একটি অনুরোধ সফল হতে হয়। সংযোগ ফিরলে অ্যাপ নিজে refresh করতে পারে।
মেয়াদ, ডিভাইস সীমা ও ফিচার প্রতিটি লাইসেন্সে থাকে। নীতি বদলালে এগুলো নিজে বদলায় না। লাইসেন্স পাতায় সেই অধিকার বদলান।
সরাসরি অনলাইন রিফ্রেশ
এই পদ্ধতি সবসময় সার্ভারে যায়, স্থায়ী অফলাইন ও হার্টবিট বন্ধ হলেও। সফল হলে স্বাক্ষর বদলায়; নেট ব্যর্থ হলে refresh ত্রুটি জানিয়ে বৈধ পুরোনো ক্যাশ রাখে। স্পষ্ট বাতিল বা মুক্তে ক্যাশ মুছে দেয়।
| ভাষা | কল করার পদ্ধতি |
|---|---|
| Go | client.RefreshOnline(ctx) |
| Java | client.refreshOnline() |
| C | ln_refresh_online(client) |
| C++ | client.RefreshOnline() |
| C# | await client.RefreshOnline() |
| Python | client.refresh_online() |
| JavaScript | await client.refreshOnline() |
সফল refresh এক সক্রিয়করণ API অনুরোধ। নীতি আগে বন্ধ হার্টবিট চালু করলে সংশ্লিষ্ট ভাষার StartHeartbeat ডাকুন। অফলাইন ডিভাইস বাতিল বা মুক্ত করার খবর পায় না।
ডিভাইস বাঁধাই
এক ডিভাইসের লাইসেন্সে সফটওয়্যার ও ক্যাশ অন্য সাধারণ কম্পিউটারে কপি করলে আগের অনুমতি সরাসরি কাজ করবে না।
SDK কম্পিউটার চিনবে কীভাবে?
প্রতি শুরুতে SDK সিস্টেমের পরিচয় ও product ID দিয়ে ডিভাইস হ্যাশ বানায়। সার্ভার স্বাক্ষরে এই হ্যাশ থাকে; স্থানীয় যাচাইয়েও মেলানো হয়।
Windows পড়ে MachineGuid, Linux machine-id, macOS IOPlatformUUID। মূল পরিচয় পাঠায় না, গণনা করা হ্যাশ পাঠায়। কনফিগের পুরোনো device_id আসল স্থানীয় পরিচয় বদলায় না।
A-এর ফাইল B-তে নিলে কী হয়?
- A সক্রিয় হলে A-এর হ্যাশে বাঁধা স্বাক্ষর পায়।
- B নিজের পরিচয়ে আলাদা হ্যাশ পায়, A-এর ক্যাশ ফিরিয়ে দেয়।
- B-কে অনলাইনে সক্রিয় হতে হবে। সীমা 1 ও A বাঁধা থাকলে সার্ভার B-কে প্রত্যাখ্যান করে।
গ্রাহক কম্পিউটার বদলাবেন কীভাবে?
গ্রাহক পুরোনো কম্পিউটার মুক্ত করে নতুনটি সক্রিয় করবে। পুরোনোটি নষ্ট হলে কনসোলের ডিভাইস সক্রিয়করণ থেকে মুক্ত করুন। বদলালে লাইসেন্সের মেয়াদ নতুন করে শুরু হয় না।
সিস্টেম পুনঃস্থাপনে পরিচয় বদলাতে পারে, নতুন ডিভাইস হিসেবে সক্রিয় করা লাগবে। সম্পূর্ণ OS ক্লোন, ভুয়া পরিচয় বা পরিবর্তিত ক্লায়েন্ট শক্তিশালী আক্রমণ; শুধু এই হ্যাশ দিয়ে ঠেকানোর নিশ্চয়তা নেই।
দীর্ঘ অফলাইনে A-এর পুরোনো স্বাক্ষর মুক্ত হওয়ার খবর সঙ্গে সঙ্গে জানে না; সফল সার্ভার অনুরোধে অবস্থা বদলায়। অফলাইন যত দীর্ঘ, দূর থেকে বাধা তত দেরিতে কার্যকর।
ভাষাভিত্তিক একই ডিভাইস হ্যাশ
SHA256(UTF8(
"LicenovaDevice/v2\n"
+ lower(product_id) + "\n"
+ lower(trim(OS_machine_identity))
))কোটা ও বিলিং
ডিভাইস কোটা ব্যবহৃত ডিভাইস, API কোটা সফল সার্ভার অনুরোধ গোনে। দুটো আলাদা; ডিভাইস সংখ্যা দিয়ে API হিসাব হয় না।
কোন অপারেশনে API কোটা কাটে?
| কাজ | গণনা হয়? |
|---|---|
| সফল সক্রিয়করণ, যাচাই, হার্টবিট বা মুক্তি | প্রতি সফলতায় ১ বার; একই দিনের সব হার্টবিট আলাদা গণনা। |
| ব্যর্থ অনুরোধ, যেমন ভুল কী বা অপর্যাপ্ত কোটা | গণনা নয় |
| একই Idempotency-Key-তে পুনঃচেষ্টা ও মূল ফল | আবার গণনা নয় |
| স্থানীয় CheckFeature বা স্বাক্ষর ক্যাশ যাচাই | গণনা নয়; সার্ভারে অনুরোধ নেই |
| ম্যানেজমেন্ট API Key দিয়ে লাইসেন্স খুঁজুন বা ইস্যু করুন | এই রানটাইম API কোটায় নয় |
বারবার অনুরোধে ডিভাইস বারবার গণনা হয়?
না। এক চক্রে একই পণ্যের একই ডিভাইস একবার গোনা হয়, কিন্তু প্রতিটি সফল হার্টবিট API ব্যবহার। মুক্ত করলে আগের ব্যবহার মুছে না।
যেমন 100 ডিভাইস, দিনে 8 ঘণ্টা, মাসে 22 দিন, প্রতি 10 মিনিটে হার্টবিট। শুধু হার্টবিটেই 105,600 বার। সঙ্গে ১০০ সক্রিয়করণ ও প্রতি ডিভাইসে দৈনিক বাড়তি যাচাই, মোট 107,900 বার।
বাড়তি যাচাই উদাহরণের অনুমান; আসল সংখ্যা অ্যাপ অনুযায়ী। এখানে অনলাইন ব্যবহার হিসাব ডিভাইস, চলার সময় ও ব্যবধান বদলান।
প্ল্যান ছাড়ালে খরচ কীভাবে?
100,000 API অন্তর্ভুক্ত ও বাড়তি 0.0001 USD হলে: 120,000 সফল অনুরোধে বাড়তি 20,000, API ফি 2 USD।
বাড়তি ব্যবহার প্রশাসকের একক দামে ব্যালেন্স কাটে। মোট অর্থ সেন্টে round করে শুধু নতুন পার্থক্য কাটে; ছোট একক দামে বারবার rounding খরচ নয়।
বাড়তি ডিভাইস খরচ আলাদা: বাড়তি সংখ্যা × একক দাম। কঠোর সীমা শেষ হলে অতিরিক্ত অনুরোধ বাতিল; টাকার ঘাটতিতেও পরের প্রদেয় অনুরোধ বাতিল। ব্যর্থ অনুরোধে ব্যবহার বাড়ে না।
সীমাহীন API-তে বাড়তি ফি নেই। 0-তে বিনামূল্যে কল নেই, প্রথম সফল অনুরোধেই বাড়তি নিয়ম। কোটা, দাম ও সীমা দেখুন বর্তমান প্যাকেজ, এসব শুধু উদাহরণ।
প্যাকেজের মেয়াদ ও কোটা কখন শুরু হয়?
১, ৩, ৬ বা ১২ মাস কিনুন। একবারে মোট মূল্য দিন; সফল পেমেন্টের পর শুরু হবে।
চালু হওয়ার দিন থেকে মাসিক কোটা নবায়ন। ৩১ জানুয়ারি শুরু হলে ফেব্রুয়ারির শেষ দিন, এরপর ৩১ মার্চ। বাকি কোটা জমে না।
কেনা না হলে প্রশাসকের নিয়ম UTC মাসে। ডিভাইস খরচ মাসিক বিল, API বাড়তি সঙ্গে সঙ্গে ব্যালেন্স কাটে। কেনার পরে নিজ চক্রের কোটা, ডিফল্টের সঙ্গে যোগ নয়।
কোটা বা টাকা কমে অনুরোধ বাতিল হলেও পুরোনো অফলাইন স্বাক্ষর আগের নিয়মে বৈধ। বিক্রেতা কনসোলে ডিভাইস মুক্ত করতে পারে, runtime API কোটা কাটে না।
ফ্লোটিং সিট
Floating লাইসেন্স একসঙ্গে চলা প্রোগ্রাম সীমিত করে। পালা করে ব্যবহার করা যায়, প্রতিটি কম্পিউটারের জন্য আলাদা লাইসেন্স নয়।
উদাহরণ
100 কম্পিউটারে 10 আসন দিলে প্রথম 10 প্রোগ্রাম চলে, 11তম “আসন পূর্ণ” পায়। একটি স্বাভাবিকভাবে SDK বন্ধ করে বেরোলে অন্যটি আসন পায়। এক কম্পিউটারে দুটি প্রোগ্রামেও দুটি আসন লাগে।
নীতিতে দিন
ফ্লোটিং আসন বেছে সীমা ১০ দিন। হার্টবিটের ব্যবধান অন্তত 600 সেকেন্ড; আসনের লিজ আরও দীর্ঘ, যেমন 1200 সেকেন্ড। হার্টবিট লিজ নবায়ন করে; ক্র্যাশ বা সংযোগ বিচ্ছিন্ন হলে মেয়াদ শেষে আসন মুক্ত হয়।
Floating লাইসেন্স আসন মেয়াদের মধ্যে স্বল্প নেট বিচ্ছিন্নতা দেয়। অফলাইন সময়ও মেয়াদে সীমিত; স্থায়ী অফলাইন বা ফাইলে সম্পূর্ণ অফলাইন প্রথম সক্রিয়করণ চলে না।
অ্যাপ কোডে আর কী সামলাব?
Open/Start ও স্বাভাবিক বন্ধ পদ্ধতি নিন। SDK প্রতি client আলাদা session ID দেয়। প্রতি export নতুন client নয়; প্রোগ্রাম বন্ধ পর্যন্ত একটি রাখুন।
পুরোনো floating ক্যাশ পরের শুরুতে নিজে আসন ফেরায় না। মেয়াদ শেষ হলে আবার সক্রিয় করে আসন নিয়ে কাজ শুরু করুন।
অফলাইন সক্রিয়করণ
পুরো অফলাইন কম্পিউটারে প্রথম সক্রিয়করণের জন্য অনুরোধ ফাইল ও স্বাক্ষরিত উত্তর নিন। USB দিয়ে অনুরোধ অনলাইন কম্পিউটারে নিন।
ধাপ
- লক্ষ্য কম্পিউটারে SDK কনফিগ নিয়ে OfflineRequest("activate") ডেকে ফাইল রাখুন। তৈরি করতে সার্ভারে যেতে হয় না।
- অনলাইন কম্পিউটারে কনসোলের অফলাইন ফাইল সক্রিয়করণে অনুরোধ দিন ও উত্তর নামান। শেষ গ্রাহক নিজ পোর্টালেও করতে পারে।
- উত্তর ফিরিয়ে ImportOffline-এ মূল অনুরোধ ও উত্তর দিন। SDK স্বাক্ষর, অনুরোধ ID, সংস্করণ ও কম্পিউটার পরিচয় দেখে তারপর ক্যাশ রাখে।
- CheckFeature-এ অনুমতি দেখুন। অফলাইন কম্পিউটারে অনলাইন হার্টবিট লাগে না; অফলাইন সময় নীতি ঠিক করে।
ফাইল সক্রিয়করণ শুধু অফলাইন অনুমতিসহ বাঁধা ডিভাইস লাইসেন্সে। অনুরোধ 30 দিন বৈধ। সার্ভার অনুমোদনের সময় থেকে মেয়াদ শুরু, কারণ উত্তর কখন আমদানি হয় তা সার্ভার জানে না।
অফলাইনে আনবাইন্ড কীভাবে?
মূল কম্পিউটারে OfflineRequest("deactivate") বানান। SDK আগে ক্যাশ মুছে; পরে বিক্রেতা বা পোর্টালে মুক্তির আবেদন দিন। মুছলেই পুরোনো কপি নেই প্রমাণ হয় না। দ্রুত বন্ধ করতে নিয়মিত অনলাইন যাচাইয়ের নীতি নিন।
প্রতি ভাষায় নাম
| ভাষা | আবেদন তৈরি | রেসপন্স আমদানি |
|---|---|---|
| Go | OfflineRequest("activate") → []byte | ImportOffline(requestBytes, responseBytes) |
| Java | offlineRequest("activate") → JSON লেখা | importOffline(requestText, responseText) |
| JavaScript | offlineRequest("activate") → object | importOffline(requestObject, responseObject) |
| C | ln_offline_request(client, "activate") | ln_import_offline(client, requestText, responseText) |
| C++ / C# | OfflineRequest("activate") → JSON লেখা | ImportOffline (C++ লেখা, C# বাইট) |
| Python | offline_request("activate") → dict | import_offline(requestDict, responseDict) |
C-তে ফেরত পাঠ্য ln_free_string দিয়ে মুক্ত করুন। প্রতিক্রিয়া ফাইলের নিজস্ব বিষয়বস্তু দিন, ওয়েব API-এর বাইরের data নয়।
ফিচার ব্যবহারের সীমা
রপ্তানির অনুমতি আর মাসে ৫০০ রপ্তানি আলাদা নিয়ম। RunFeature অনুমতি পরীক্ষা করে; সফল কাজের পর RunMeteredFeature ব্যবহার নিশ্চিত করে।
মাসে ৫০০ এক্সপোর্ট দিন
নীতিতে export ফিচার ও কোটা দিন: export, 500, মাসিক। ডিফল্টে শেষ হলে প্রত্যাখ্যান। বাড়তি দিলে সর্বোচ্চ সংখ্যা দিন; অর্ডার সিস্টেমের জন্য বাড়তি ব্যবহার রেকর্ড হয়।
দিন ও মাসের কোটা UTC মধ্যরাতে reset; মোট কোটা নয়। সীমা বদলালে আগের ব্যবহার মুছে না।
সফল রপ্তানির পর ব্যবহার নিশ্চিত করুন
কাজের ফাংশন SDK-কে দিন। নতুন কাজে নতুন ID; পুনঃচেষ্টায় একই ID, ফিচার ও পরিমাণ রাখুন। ভিন্ন প্রসেসে একই ID একসঙ্গে চালাবেন না।
| ভাষা | গণনাভিত্তিক কাজের কল |
|---|---|
| Go | client.RunMeteredFeature(ctx, "export", 1, jobID, exportReport) |
| Java | client.runMeteredFeature("export", 1, jobID, this::exportReport) |
| Node.js | await client.runMeteredFeature("export", 1, jobID, exportReport) |
| Python | client.run_metered_feature("export", 1, job_id, export_report) |
| C# | await client.RunMeteredFeature("export", 1, jobID, ExportReport) |
| C++ | client.RunMeteredFeature("export", 1, jobID, exportReport) |
| Rust | client.run_metered_feature("export", 1, &job_id, || export_report())? |
| Ruby | client.run_metered_feature("export", 1, job_id) { export_report } |
| C | ln_run_metered_feature(client, "export", 1, job_id, export_report, context) |
আগে export কোটা সেট করুন। Windows স্ক্রিপ্টে -Metered -OperationID export-job-001, Linux/macOS-এ --metered --operation-id export-job-001 যোগ করুন।
কাজ সফল হলেও নিশ্চিতকরণ ব্যর্থ হলে একই কাজের পুনঃচেষ্টা শুধু নিশ্চিত করে। কাজের মাঝে ক্র্যাশ হলে স্বয়ংক্রিয় পুনরাবৃত্তি বন্ধ হয়। স্থায়ী ফল দেখে ResolveMeteredFeature দিয়ে নিশ্চিত বা বাতিল করুন। দূরের গণনা ও স্থানীয় কাজ এক লেনদেন নয়।
নিজে সংরক্ষণ প্রক্রিয়া নিয়ন্ত্রণ করতে চাইলে
- এই রপ্তানির কাজের আইডি তৈরি করে রাখুন।
- একটি সংখ্যা Reserve করুন, pending এলে রপ্তানি। committed মানে শেষ হয়েছে; আবার করবেন না।
- রপ্তানি সফল হয়ে ফল সংরক্ষিত হলে Commit দিয়ে ব্যবহার নিশ্চিত করুন।
- রপ্তানি শেষ হওয়ার আগে ব্যর্থ হলে Cancel দিয়ে সংরক্ষণ ছাড়ুন; ব্যবহার কাটা হবে না।
সংরক্ষণ ডিফল্ট 15 মিনিট; UTC সময়পর্ব বদলালে আগেই শেষ। সরাসরি API-তে reservation_seconds 30–3600 সেকেন্ড।
| ভাষা | সংরক্ষণ | নিশ্চিত / বাতিল |
|---|---|---|
| Go | Reserve(ctx, "export", 1, jobID) | Commit / Cancel(ctx, hold.ID, jobID) |
| Java / Node.js | reserve("export", 1, jobID) | commit / cancel(id, jobID) |
| C | ln_reserve(client, "export", 1, jobID) | ln_commit / ln_cancel(client, id, jobID) |
| C++ / C# | Reserve("export", 1, jobID) | Commit / Cancel(id, jobID) |
| Python | reserve("export", 1, jobID) | commit / cancel(id, jobID) |
উত্তরের ক্ষেত্রগুলো কীভাবে পড়বেন?
| ফিল্ড | অর্থ |
|---|---|
| reservation_id / operation_id | সংরক্ষণ ও মূল কাজের আইডি; আবার চেষ্টায় একই মান দিন। |
| status / expires_at | অবস্থা ও সময়সীমা: pending অসমাপ্ত, committed কাটা হয়েছে, canceled ছাড়া হয়েছে, expired মেয়াদোত্তীর্ণ। |
| consumption.used / reserved | এই সময়ের নিশ্চিত ব্যবহার / সব সক্রিয় কাজের সংরক্ষিত সংখ্যা। |
| consumption.limit / remaining | মূল সীমা / অবশিষ্ট মূল সংখ্যা। remaining = max(0, limit - used - reserved); অনুমোদিত অতিরিক্ত ব্যবহার বাদ। |
| consumption.quantity / overage | এই কাজের সংখ্যা / মূল সীমার বেশি নিশ্চিত ব্যবহার; গ্রাহকের কাছ থেকে অর্থ নেওয়া হয় না। |
| consumption.period / reset_at | UTC ব্যবহারের সময়পর্ব / পরের রিসেট; আজীবন সীমায় reset_at = null। |
অনুরোধ, উত্তর ও ক্ষেত্রের ধরন দেখুন রানটাইম API-র Reserve, Commit ও Cancel অংশে।
সফল হলে বাতিল বা আবার রপ্তানি নয়। আইডি ও ফল রেখে Commit আবার করুন। সংরক্ষণ মেয়াদোত্তীর্ণ হলে কাজ মিলিয়ে দেখার জন্য রাখুন। দূরের গণনা ও স্থানীয় কাজ একই পারমাণবিক লেনদেন নয়।
Consume সঙ্গে সঙ্গে ব্যবহার কাটে। ব্যর্থ কাজ যেন না কাটে, সংরক্ষণ নিন। সব সুবিধার গণনা অনলাইন এবং প্ল্যাটফর্মের চার ধরনের বিলযোগ্য API-র বাইরে।
সংস্করণ ও রক্ষণাবেক্ষণ
স্থায়ী কেনায় ব্যবহার চলতে পারে, কিন্তু সব আপগ্রেড চিরকাল বিনা মূল্যে নয়। রক্ষণাবেক্ষণ মেয়াদ প্রকাশের তারিখ অনুযায়ী সংস্করণ অনুমতি ঠিক করে।
বর্তমান সংস্করণ কিনুন, এক বছর আপডেট অন্তর্ভুক্ত
নীতি স্থায়ী ও রক্ষণাবেক্ষণ 365 দিন দিন, প্রথম সক্রিয়করণ থেকে শুরু। সফটওয়্যার সংস্করণে 1.0.0, 1.1.0 ইত্যাদি প্রকৃত প্রকাশ তারিখে দিন।
রক্ষণাবেক্ষণের মধ্যে প্রকাশিত সংস্করণ চলবে। পরের নতুন সংস্করণ প্রত্যাখ্যাত, পুরোনো চলবে। নবায়ন হলে লাইসেন্সের অধিকার ও গ্রাহকে মেয়াদ বাড়ান।
অ্যাপ নিজের সংস্করণ পাঠায় কীভাবে?
sdk-demo.json-এ app_version যেমন 1.1.0 দিন। রক্ষণাবেক্ষণ থাকলে আগে কনসোলে সংস্করণ প্রকাশ করুন। শুধু তিন সংখ্যার 1.2.3 ফরম্যাট চলে। বিক্রি করা অধিকার রাখতে প্রকাশ তারিখ বদলানো যায় না।
শুধু 1.x চাইলে 1.0.0–1.999.999 দিন, রক্ষণাবেক্ষণ ছাড়া। আপডেটের পরে অনলাইনে নতুন সংস্করণের স্বাক্ষর নিন; পুরোনো ক্যাশ নতুনটিতে নয়।
ডাউনলোড দিন
সংস্করণে HTTPS ডাউনলোড ও SHA-256 দিন। পোর্টাল শুধু অনুমতিপ্রাপ্ত সংস্করণ দেখায়। রেকর্ড লিংক দেয়, ইনস্টলার আপলোড বা স্বয়ংক্রিয় আপডেট ইনস্টল করে না।
গ্রাহক পোর্টাল
গ্রাহক বিক্রেতা কনসোল ছাড়াই লাইসেন্স-ডিভাইস দেখে ও বাঁধন মুক্ত করে।
আগে বিক্রেতা গ্রাহকের ইমেইল যুক্ত করেন
ইস্যুতে ইমেইল দিন বা অধিকার ও গ্রাহকে। পাঠান গ্রাহক পোর্টাল লিংক দিন। সেই ইমেইলে একবারের লগইন লিংক আসে, 15 মিনিট বৈধ। লগইন সেশন 24 ঘণ্টা থাকে।
গ্রাহক শুধু সেই ইমেইলের লাইসেন্স দেখে; পণ্য ব্যবস্থাপনা, বিল বা অন্যের তথ্য নয়। আগে প্রশাসক সেটিংয়ে মেইল সেবা যুক্ত করুন।
কম্পিউটার বদলালে গ্রাহকের পুরোনো কী না থাকলে কী করবেন?
- গ্রাহক লাইসেন্সের সংযুক্ত ইমেইল দিয়ে মেইলের লগইন লিংক খোলে। লিংক শুধু লগইন করে, ডিভাইস মুক্ত করে না।
- আমার ডিভাইস/সেশনে পুরোনোটি বেছে আনবাইন্ড ও বদল নিশ্চিত।
- পাতায় অস্থায়ী কোড দেখায়, সর্বোচ্চ 15 মিনিট ও একটি সফল সক্রিয়করণে বৈধ। গ্রাহক কপি বা নিজ ইমেইলে পাঠাতে পারে।
- নতুন কম্পিউটারে সফটওয়্যার খুলে সক্রিয়করণে অস্থায়ী কোড দিন। SDK কম্পিউটার চেনে, মূল লাইসেন্স বেঁধে শংসাপত্র রাখে। পরে শুরু ও হার্টবিটে শংসাপত্র চলে; কোড শেষ হলেও সক্রিয় ডিভাইস চলে।
শুধু ডিভাইস বাঁধন বদলায়। লাইসেন্স ID, মূল মেয়াদ, ফিচার, গ্রাহক ও ব্যবহার থাকে; নতুন লাইসেন্স নয়। নতুন ডিভাইস মূল নীতি মানবে ও খালি স্থান লাগবে।
সফটওয়্যার বিক্রেতা কোথায় পরিবর্তন করবেন?
বর্তমান SDK-তে উন্নীত করুন। লাইসেন্স কী-এর ঘরও নিতে পারে lv_tmp_ অস্থায়ী কোড; কনফিগে দিন license_key দিলেই হয়; Start, যাচাই ও হার্টবিট আগের মতো চলে। SDK ব্যক্তিগত ক্যাশে যন্ত্রের পরিচয়পত্র রাখে;cache_path খালি থাকতে পারে। ফাইল বর্তমান ব্যবহারকারীর অ্যাপ ডেটায় রাখুন; ইনস্টলারের সঙ্গে দেবেন না।
সফল ব্যবহারের পরে অ্যাপ মুছতে পারে license_key ফাঁকা; একই পণ্য, পাবলিক কী ও cache_path, পুনরায় শুরুতে SDK ডিভাইস শংসাপত্র ফেরায়। গ্রাহককে অস্থায়ী কোড রাখতে বা বারবার দিতে হয় না। সফল ব্যবহারের আগে ইনপুট রাখুন, যাতে নেট ছুটলে আবার চেষ্টা হয়।
কোড শেষ বা পৃষ্ঠা বন্ধ হলে
আবার পোর্টালে অব্যবহৃত কোড দেখুন। শেষ হলে মুক্ত ডিভাইসের পাশে কোড দেখা/নেওয়া দিয়ে আবার নিন; নতুন বদলের সংখ্যা কাটবে না। ব্যবহৃত কোড পুনরায় চলে না, পুরোনো রেকর্ড থেকে নিয়ে সীমা এড়ানোও নয়। আবার বদলাতে বর্তমান ডিভাইস মুক্ত করুন।
নতুন কম্পিউটার পুরো অফলাইন হলে
নতুন কম্পিউটারে অস্থায়ী কোড দিয়ে SDK থেকে অনুরোধ বের করুন। কোড শেষের আগে অনলাইন কম্পিউটারের পোর্টালে উত্তর নিয়ে নতুনটিতে আমদানি করুন। নীতিতে বাঁধা ডিভাইসের অফলাইন সক্রিয়করণ চাই। মূল মেয়াদ থাকে; মেশিনের অনুমতি ও শংসাপত্রসহ উত্তর সুরক্ষিত রাখুন।
আনবাইন্ড সীমা ও পুরোনো কম্পিউটারের অবস্থা
নীতি থেকে প্রতি লাইসেন্সের প্রতি UTC মাসের স্ব-মুক্তি সীমা দিন। 0-তে নতুন পোর্টাল মুক্তি বন্ধ। বারবার ক্লিক, কোড দেখা বা শেষ অব্যবহৃত কোড পুনঃদানে বাড়তি গণনা নেই। সীমা পোর্টাল ও গ্রাহকের অফলাইন আবেদনে; বিক্রেতার হাতে মুক্তি বা মূল কী-এর সফটওয়্যার release-এ নয়।
দূর থেকে মুক্ত করলে পরের অনলাইন যাচাই বন্ধ হয়। পুরোনো অফলাইন ক্যাশ নেট বা মেয়াদ শেষ পর্যন্ত চলে। স্থায়ী ক্যাশ সঙ্গে সঙ্গে বন্ধ করা যায় না; দ্রুত বাতিলে নিয়মিত অনলাইন নীতি নিন। অন্য কম্পিউটারে সাধারণ কনফিগ, শংসাপত্র ও ক্যাশ কপি পরিচয় না মেলায় প্রত্যাখ্যাত।
গ্রাহক পোর্টাল লাইসেন্স ব্যবহার সামলায়। সফটওয়্যার অর্ডার ও বিক্রির অর্থ বিক্রেতার নিজস্ব সিস্টেমে থাকে।
ইভেন্ট বিজ্ঞপ্তি
সক্রিয়করণ, নবায়ন বা বাতিলে Licentivo আপনার সার্ভারকে জানিয়ে অর্ডার, গ্রাহক ও সহায়তা সিস্টেম মিলাতে পারে।
বিজ্ঞপ্তির ঠিকানা যোগ
লাইসেন্স ইভেন্ট বিজ্ঞপ্তিতে সার্ভারের HTTPS ঠিকানা ও ইভেন্ট দিন। স্বাক্ষর গোপন কী একবার দেখায়; গ্রহণকারী সার্ভারে রাখুন। উৎপাদনে স্থানীয় বা ব্যক্তিগত নেট ঠিকানা নয়।
উত্তর পেয়ে স্বাক্ষর যাচাই
X-Licentivo-Timestamp, X-Licentivo-Event ও মূল বডি পড়ুন। timestamp + '.' + event ID + '.' + body-তে secret দিয়ে HMAC-SHA256 করুন। sha256= যোগ করে X-Licentivo-Signature ধ্রুব সময়ে মিলান। বর্তমান থেকে 5 মিনিটের বেশি পার্থক্য প্রত্যাখ্যান।
event ID-তে পুনরাবৃত্তি বাদ দিন। স্বাক্ষর দেখে transaction বা queue-তে স্থায়ীভাবে রেখে 2xx দিন। একই ইভেন্টে 2xx দিন, অর্ডার কাজ আবার নয়।
ব্যর্থ হলে কী হয়?
সর্বোচ্চ 8 স্বয়ংক্রিয় চেষ্টা, বিরতি বাড়ে। কনসোলে HTTP অবস্থা, সময়, ত্রুটি ও হাতে পুনঃপাঠানো আছে। ইভেন্ট ও লাইসেন্স কাজ এক transaction; restart-এর পরে পাঠানো চলে।
তৈরি, বদল, নবায়ন, বাতিল, সক্রিয়করণ, মুক্তি, ফিচার ব্যবহার, আসন্ন শেষ, শেষ ও রক্ষণাবেক্ষণ বদলের ইভেন্ট। বিজ্ঞপ্তিতে শুধু লাইসেন্স prefix, পুরো কী নয়।
একসঙ্গে কাজ ও নীতি পরিবর্তন
এক দলের লাইসেন্স একসঙ্গে দিন, নবায়ন বা বাতিল করুন। পুরোনো অধিকার বদলানোর আগে প্রভাব দেখুন।
একসঙ্গে ইস্যু বা আমদানি
লাইসেন্সে দলগত প্রদান/আমদানি বেছে পণ্য ও নীতি দিন। প্রতি সারিতে নাম-ইমেইল বা customer,customer_email শিরোনামের CSV দিন। সর্বোচ্চ 100 সারি। ফল নামিয়ে সম্পূর্ণ কোড রাখুন।
একটি ব্যর্থ হলে পুরো দল কার্যকর নয়। টাইমআউটের পরে একই তথ্য নিয়ে retry; request ID মূল ফল ফেরায়, আবার প্রদান নয়।
একসঙ্গে নবায়ন বা বাতিল
বামে লাইসেন্স বেছে দলগত নবায়ন বা বাতিল করুন। শিরোনামের ঘর এই পৃষ্ঠা বেছে; অন্য পাতায় নির্বাচন থাকে, সর্বোচ্চ 100। ফিল্টার বদল, পাতা ছাড়া বা refresh-এ নির্বাচন মুছে।
নবায়নে বাড়তি দিন দিন। অসক্রিয়ের বৈধ দিন, সক্রিয়ের শেষ সময়, মেয়াদোত্তীর্ণের এখন থেকে বাড়ে। বাতিলের আগে নির্বাচন খুলে গ্রাহক মিলান; ফেরানো যায় না। শুধু-পড়া সদস্য পারে না।
পুরোনো লাইসেন্সে নতুন নীতি প্রয়োগ
- লাইসেন্স নীতিতে নতুন নিয়ম রাখুন।
- এক পণ্যের পুরোনো লাইসেন্স বেছে নীতি প্রয়োগ ও নতুন নীতি দিন।
- মেয়াদ, ডিভাইস/আসন, ফিচার, সংখ্যা ও রক্ষণাবেক্ষণ বদল দেখুন। আসন নতুন সীমার বেশি বা মোড বদলায় সক্রিয় ডিভাইস থাকলে আগে সেগুলো সামলান।
- নিশ্চিত করে প্রয়োগ করুন। পরের অনলাইন যাচাইয়ে নতুন স্বাক্ষর পায়; পুরো অফলাইন ক্যাশ দূর থেকে বদলায় না।
প্রিভিউ 10 মিনিট বৈধ। লাইসেন্স বা নীতি বদলালে আবার দেখুন। নতুন দিন মূল প্রথম সক্রিয়করণ থেকে মেয়াদ হিসাব করে; আগে তারিখ মিলান।
সাধারণ প্রশ্ন
আগে ত্রুটি কোড, তারপর সেটিং দেখুন। উত্তরের request_id লগে কাজ খুঁজতে সাহায্য। সম্পূর্ণ কী লগ বা ছবিতে দেবেন না।
সক্রিয়করণ ব্যর্থ হলে কী দেখব?
সার্ভার ঠিকানায় পৌঁছানো যায় কি না, product ID সঠিক, কোড সম্পূর্ণ ও এই পণ্যের কি না দেখুন। সার্ভার স্থাপন না হলে গ্রাহকের কম্পিউটার আপনার 127.0.0.1 ঠিকানা; এটি গ্রাহকের নিজের কম্পিউটার বোঝায়।
| ত্রুটি কোড | প্রথম ধাপ |
|---|---|
LICENSE_INVALID | পণ্য ID, পুরো কী ও লাইসেন্স পণ্য দেখুন |
LICENSE_EXPIRED | মেয়াদ দেখুন; দরকারে বিক্রেতা নবায়ন করেন |
LICENSE_REVOKEDDEVICE_RELEASED | লাইসেন্স বাতিল/ডিভাইস মুক্ত; SDK ক্যাশ মুছে |
DEVICE_LIMIT_REACHED | লাইসেন্স স্থান পূর্ণ; পুরোনো মুক্ত বা সীমা বাড়ান |
API_QUOTA_EXCEEDED | API কঠোর কোটা শেষ; পর্যায় ও প্ল্যান দেখুন |
API_BALANCE_INSUFFICIENT | API অতিরিক্ত ব্যালান্স কম; মুদ্রা ও পরিবেশ দেখুন |
MONTHLY_QUOTA_EXCEEDED | প্ল্যাটফর্ম ডিভাইস সীমা; লাইসেন্স সীমা আলাদা |
IDEMPOTENCY_CONFLICT | এক Key ভিন্ন বিষয়; নতুন কাজে নতুন Key, পুনঃচেষ্টায় মূল বিষয় |
IDEMPOTENCY_EXPIRED | পুরোনো উত্তর/বাঁধন অকার্যকর; অবস্থা দেখে নতুন কাজে নতুন Key |
অফলাইনেও কেন কাজ করে?
অফলাইনেও SDK স্থানীয়ভাবে স্বাক্ষর, পণ্য, ডিভাইস, ফিচার ও মেয়াদ দেখে; শুধু সার্ভারে যায় না। ক্যাশের মেয়াদ শেষ বা অনলাইনে বাতিল/মুক্তের স্পষ্ট প্রত্যাখ্যান পেলে আর চলবে না।
স্বাক্ষর বা ডিভাইস যাচাই কেন ব্যর্থ?
public key না মেলা, অন্য পণ্যের ক্যাশ বা অন্য কম্পিউটারে কপি করা ক্যাশে ব্যর্থতা হতে পারে। যাচাই করুন trusted_keys -এর key ID ও public key বর্তমান পণ্যের কি না; তারপর সিস্টেম বদলানো বা পুনঃস্থাপন হয়েছে কি না দেখুন।
SDK জানায় clock rollback : ঘড়ি পিছিয়েছে কি না দেখুন। ঠিক করে অনলাইন রিফ্রেশ।
সম্পূর্ণ ত্রুটি উত্তর
{
"error": {
"code": "LICENSE_REVOKED",
"message": "License was revoked"
},
"request_id": "99999999-9999-4999-8999-999999999999"
}| ফিল্ড | অর্থ ও করণীয় |
|---|---|
error.code · string | স্থির ত্রুটি ID দিয়ে সিদ্ধান্ত, message লেখায় নয়। |
error.message · string | সমস্যার পাঠযোগ্য কারণ, নির্ণয় বা গ্রাহক বার্তায়। |
request_id · UUID | লগের সার্ভার HTTP ID; লাইসেন্স বা Idempotency-Key নয়। |
400/415: ক্ষেত্র বা Content-Type ঠিক করুন; 401: ব্যবস্থাপনা Key দেখুন; 403: নির্দিষ্ট অনুমতি ত্রুটি সামলান; 409: কোটা, সেশন বা idempotency সংঘাত দেখুন; 429: Retry-After অনুযায়ী অপেক্ষা করুন। টাইমআউট বা 5xx বিরতি দিয়ে আবার পাঠান। লেখার অনুরোধে আগের ID ও বডি রাখুন, যাতে দ্বিগুণ গণনা না হয়।
JSON উত্তর কীভাবে পড়ব?
সফল উত্তর data ও request_id; ব্যর্থ হলে থাকে error.code, error.message ও request_id। ত্রুটি কোড ও request_id রাখলে বেশিরভাগ সমস্যা খুঁজবেন।
ইমেইল, পেমেন্ট বা স্থাপনে দেখুন সহায়তা ও সমস্যা সমাধান।
API-এর সব ফিল্ড দেখুন OpenAPI ফাইল।