تبلیغات در اینترنتclose
آموزش ضد هک کردن پرداخت درون برنامه ای یونیتی
زمان جاري : شنبه 29 دی 1397 - 5:59 قبل از ظهر
نام کاربري : پسورد : يا عضويت | رمز عبور را فراموش کردم
...در حال بارگيري لطفا صبر کنيد
صفحه اصلي / برنامه نویسی یونیتی / آموزش ضد هک کردن پرداخت درون برنامه ای یونیتی
ارسال پاسخ جديد
آموزش ضد هک کردن پرداخت درون برنامه ای یونیتی
تعداد بازدید: 38
admin آفلاين

ارسال‌ها : 6

عضويت:23 /4 /1397

آموزش ضد هک کردن پرداخت درون برنامه ای یونیتی

طبق مشاهداتی که داشتیم، بیش از ۷۵ درصد کاربران با استفاده از برنامه‌هایی مثل لاکی پچر اقدام به فعالسازی بازی‌ها و برنامه‌ها می‌کنن.متاسفانه این برنامه، مثل آب خوردن هر بازی یا برنامه‌ای رو هک میکنه. و تاسف بیشتر از اینکه کاربران ما به دلیل عدم اطلاع از بار شرعی و اخلاقی، از این برنامه استفاده میکنن. گرچه نباید نادیده گرفت که این برنامه به شدت بین کودکان زیر ۱۲ سال جا باز کرده و از این گروه هم نمیشه انتظار خاصی داشت. مسلما در جایگاه یک توسعه‌دهنده یا صاحب اثر دوست ندارید زحمات چند ماهه شما که در رویای فروش میلیونی بوده با یک برنامه برباد بره، و در نهایت نتیجه بشه اینکه فروش شما زیر ۱۰۰ هزار تومن باشه. ما هم دوست نداریم این اتفاق برای شما بیفته. اما تا وقتی راه برای تقلب و هک کردن باز باشه، افرادی خواسته و ناخواسته ازش استفاده میکنن.مطمئنا شما هم موافقید که هرچه درصد افراد بیشتری به خرید اپلیکیشن یا بازی روی بیارن و این فرهنگ رو بپذیرن، به نفع کل جامعه توسعه‌دهندگان خواهد بود.در این مطلب روش مقابله با هک پرداخت‌های کافه‌بازار در یونیتی رو با استفاده از API توسعه دهندگان کافه‌بازار ارائه میدیم.در صورتی که به دنبال برقراری امنیت پرداخت در برنامه‌های اندروید (java) هستید، به این مطلب مراجعه کنید.کلیت کار به این شکله که شما ابتدا باید یک کلاینت در کافه‌بازار بسازید که آموزش میدیم چطور، و بعد در بازی خودتون هر خریدی که انجام شد، توکن خرید رو به بازار ارسال کنید و بررسی کنید آیا این خرید معتبر هست یا نه. آموزش ساخت کلاینت در کافه‌بازاراین آموزش در مستندات کافه‌بازار وجود داره، اما شاید گام به گام و راحت نباشه برای همه.برای این کار به بخش امور مالی و فروش در پنل خودتون برید و بعد تب API توسعه دهنده رو انتخاب کنید.در این صفحه روی دکمه client جدید کلیک کنید. در دیالوگ باز شده به جای مقدار Redirect URI یک آدرس وب بدید. اگر سایت دارید آدرس سایت خودتون، اگر ندارید هم مهم نیست. هرچیزی بزنید فرقی نداره. مثلا بزنید http://bobardo.comو بعد دکمه ارسال، با این کار یک کلاینت جدید ایجاد میشه. این کار نیازه تنها یک بار انجام بشه.بعد توی مرورگر لینک زیر رو کپی کنید:


کد:

https://pardakht.cafebazaar.ir/devapi/v2/auth/authorize/?response_type=code&access_type=offline&redirect_uri=XXXXX&client_id=YYYYY

توی این لینک باید دو تا مقدار رو مشخص کنید. آخر لینک به جای XXXXX آدرس لینک توی کلاینت رو وارد کنید. و به جای YYYYY مقدار client id توی کلاینت رو وارد کنید. لینک در نهایت باید بدون فاصله باشه. حالا اینتر بزنید.در صورتی که لینک رو درست ایجاد کرده باشید یه صفحه باز میشه و ازتون درخواست تایید اجازه میکنه که باید روی دکمه تایید بزنید.در صورتی که اطلاعات به هر دلیلی اشتباه باشه بهتون خطا میده.بعد از زدن دکمه تایید، آدرسی که توی کلاینت وارد کردید باز میشه و توی مرورگر بعد از آدرس یک پارامتر code دیده میشه. مثلا به شکل زیر:


کد:

http://bobardo.com/?code=6hsH0MGCVOzSv1rVMpIGnF


مقدار مقابل code رو توی مرحله بعدی استفاده میکنیم. گرفتن refresh codeلینک زیر رو باز کنید.


کد:

https://pardakht.cafebazaar.ir/devapi/v2/auth/token/


توی صفحه باز شده به جای مقدار grant_type بنویسید authorization_codeبه جای code مقدار دریافت شده در مرحله قبل رو وارد کنید و به جای سه پارامتر دیگه اطلاعات کلاینتی که توی بازار ساختید رو قرار بدید.روی دکمه authorize کلیک کنید. در صورتی که اطلاعات درست باشه یک جیسون به شکل زیر براتون میاد:


کد:

{
"access_token": "GWObRK06KHLr8pCQzDXJ9hcDdSC3eV",
"token_type": "Bearer",
"expires_in": 3600000,
"refresh_token": "yBC4br1l6OCNWnahJvreOchIZ9B6ze",
"scope": "androidpublisher"
}


خب حالا ما مقدار refresh token رو از این جیسون نیاز داریم. پس یه جا ذخیرش کنید. بررسی اعتبار پرداخت در یونیتیحالا که رفرش توکن رو داریم، میریم سمت یونیتی. روش کار به این شکله که هر بار برای اینکه درستی یک خرید رو تشخیص بدید باید یک access token به بازار بفرستید، اما این توکن دسترسی بعد از زمان کوتاهی منقضی میشه. برای همین هر سری ما با استفاده از رفرش توکن باید یک توکن دسترسی جدید بگیریم.برای بررسی خرید از بازار دو راه وجود داره:اول اینکه یک وب سرویس روی سرورتون داشته باشید که نقش واسط رو بازی کنه، به این شکل که درخواست از اپلیکیشن شما به وب سرویس بره و بعد سرور شما از بازار استعلام بگیره و نتیجه رو به شما بگه. این روش برای حالتی خوبه که شما بخواین خریدها رو سمت سرور ذخیره کنید که بتونید عملیات دیگه‌ای در آینده انجام بدید یا بخواین کاربرا رو مدیریت کنین. معایب این روش اینه که حتما نیاز به سرور داره که خب هزینه هم داره (حداقل سالی ۵۰ هزار تومن) و عیب دیگه اینکه اگه سرورتون به هر دلیلی جواب نده، خریدهاتون تایید نمیشه و کاربرا نمیتونن محصول رو دریافت کنن.راه دوم اینه که ما تمام کارها رو سمت اپلیکیشن انجام بدیم و مستقیم درخواست رو به بازار بفرستیم و جواب بگیریم ازش.ما اینجا روی روش دوم تمرکز میکنیم.توصیه ما برای یونیتی استفاده از پلاگین پرداخت باباردو هست و طبق همین پلاگین آموزش میدیم. اگر از پلاگین دیگه‌ای استفاده می‌کنید نیازه بعد از خرید حتما اطلاعات خرید رو بتونید دریافت کنید. (توکن خرید، اسم محصول) بررسی پرداخت در داخل بازیاسکریپت زیر رو دانلود کنید و توی پروژتون قرار بدید.دانلود اسکریپت checkIABValidateاین اسکریپت رو به گیم آبجکت com.bobardo IAB نسبت بدید. بعد مقادیر packageName ، client_id ، client_secret و refresh_token رو وارد کنید. نمونه پروژه امنیت پرداخت کافه بازار رو در انتهای صفحه می‌تونید دانلود کنید. بعد اسکریپت InAppStore رو باز کنید. و تابع زیر رو بهش اضافه کنید.


کد:

private void onPurchaseValidated(bool success, string message, validateResult result)
{
if (success)
{
if (!result.isRefund) // اگر خرید از طرف کافه‌بازار برگشت داده نشده
{
// در صورت نیاز میتونید مصرف شدن محصول رو چک کنید
// if (result.isConsumed) // اگر محصول مصرف شده

// اینجا محصول رو به کاربر بدید
}
else
{
Debug.Log("the purchase is refund");
}
}
else
{
// error in validating, or purchase is not valid
// you can let user retry validating the purchase
Debug.Log(message);
}

// hide loading here
}


حالا بعد از اینکه خرید انجام شد توی تابع purchasedSuccessful یا بعد از اینکه بررسی کردید کاربر قبلا یک محصول رو خریده یا نه توی تابع userHasThisProduct کد زیر رو برای بررسی اینکه آیا خرید کاربر معتبر هست مینویسیم:


کد:

GetComponent<CheckIABValidate>().check(purchase, onPurchaseValidated);


بعد از این کد بهتره یک لودینگ به کاربر نمایش بدید چون ممکنه اتصال به سرور بازار و بررسی چند ثانیه طول بکشه. نتیجه بررسی اعتبار پرداختنتیجه بررسی به تابع onPurchaseValidated ارسال میشه. که پارامتر اول مشخص کننده اینه که آیا ارتباط با سرور موفقیت آمیز بوده و کاربر این محصول رو خریده یا نه. در صورتی که اینترنت کاربر ضعیف باشه یا سرورهای بازار جواب ندن و یا این خرید معتبر نباشه مقدار success برابر false خواهد بود.پارامتر message نتیجه بررسی رو به صورت پیام نشون میده.پارامتر result در صورتی که محصول به درستی خریداری شده باشه جزئیات خرید رو شامل میشه.با متغیر result.isRefund میتونید بفهمید که آیا هزینه خرید به کاربر بازگشت داده شده یا نه.با متغیر result.isConsumed میتونید بفهمید آیا این محصول مصرف شده یا خیر.در نهایت میتونید توی تابع onPurchaseValidated در صورت درست بودن نتیجه بررسی و شرط هایی که میذارید، محصول رو به کاربر بدید.نکته: اگر از تابع userHasThisProduct اقدام به بررسی خرید میکنید، میتونید نگران این باشید که کاربر دو بار یک محصول رو نگیره و این قضیه رو کنترل کنین. البته این تابع معمولا برای محصولات خریدنی استفاده میشه و این محصولات هم نمیتونن دو بار داده بشن. (فقط برای حالت‌های خاص نگران بشید)نکته مهم: حتما در صورتی که جواب success برابر false بود، برای کاربر امکان تلاش مجدد رو فراهم کنید. (از پروژه نمونه ایده بگیرید)نکته مهمتر: حتما سیستم رو قشنگ تست کنید در شرایط مختلف، و مطمئن بشید همه چیز تحت کنترل شماست.لازم به ذکر هست که هدف اصلی API توسعه دهندگان اعتبارسنجی خریدها نیست. ممکنه به دلیل قطعی موقت این سیستم خریدها تایید نشن و کاربران محصول رو دریافت نکنن. در این حالت شما باید حتما به کاربران امکان تلاش مجدد برای اعتبارسنجی خرید رو بدید. دانلودمشاهده پروژه در Githubدانلود پروژه نمونه امنیت پرداخت در کافه بازار (پیاده سازی شده با یونیتی ۵.۴.۲)دانلود فایل APK پیاده سازی شده جهت تست
یکشنبه 25 آذر 1397 - 11:46
ارسال پيام نقل قول تشکر گزارش






برای ارسال پاسخ ابتدا باید لوگین یا ثبت نام کنید.


تمامی حقوق این قالب مربوط به همین انجمن میباشد|طراح قالب : ابزار فارسی -پشتیبانی : رزبلاگ

: