MrMedia 98 ارسال شده در 27 آبان، ۱۴۰۲ اشتراک گذاری ارسال شده در 27 آبان، ۱۴۰۲ سلام به دوستان عزیز این آموزش برای امن کردن درون پرداخت کافه بازار با توجه به مستندات خود کافه بازار هستش. اگه نمی دونید api کافه بازار چیه کافیه به لینک زیر یه سر بزنی 😉 https://developers.cafebazaar.ir/fa/guidelines/in-app-billing/api# برای راه اندازی API ابتدا باید یک Client ایجاد کنید. هر Client شامل اطلاعاتی است که از طرف بازار برای شناختهشدن یک کاربر API لازم است. برای ساخت Client به پیشخان بازار مراجعه نمایید و از منو تنظیمات، قسمت API توسعهدهندگان روی گزینه کلاینت جدید کلیک کنید. در پنجرهٔ باز شده، مقدار مورد نظر خود برای Redirect URI را وارد کنید. این آدرس، مشخص میکند که بازار در پاسخ به درخواست اولیه شما برای دریافت Authorization Code، باید پاسخ را به چه آدرسی بفرستد. به عکس زیر توجه کنید: ما آدرس فایل php که برای چک کردن و مصرف خرید کاربران کافه بازار هستش رو درج کردیم (پایین پست فایل رو میزارم) و بعد از زدن دکمه ایجاد کلاینت، کلاینت ایجاد میشه و با عکسی مشابه عکس زیر مواجه میشید. ⚠️برای امنیت برنامه خودم مقادیر رو در عکس مخدوش کردم ⚠️ ✅ خب حالا دو مقدار Client Id و Client Secret رو یکجا کپی کنید چون نیازمون میشه حالا بجای سخت کار می رسیم!! به اینجای کار با خوب دقت کنید در این مرحله در مرورگر خود یک New Tab یا پنجره جدید باز کنید و آدرس زیر را تکمیل کنید: https://pardakht.cafebazaar.ir/devapi/v2/auth/authorize/?response_type=code&access_type=offline&redirect_uri=&client_id= خب چطور باید تکمیلش کنیم؟ ببینید دوستان این همون متد GET هستش شما باید جلوی مساوی هایی که خالی هستش رو پر کنید جلوی redirect_uri همون آدرس فایل php که برای ساخت کلاینت دادیم رو میزاریم (عکس 1) و جلوی client_id هم مقداری که در عکس 2 زیر همون عنوان می بینید رو درج می کنیم. پس با این حساب آدرس ما میشه این: https://pardakht.cafebazaar.ir/devapi/v2/auth/authorize/?response_type=code&access_type=offline&redirect_uri=https://website.ir/bazaar.php&client_id=JFNF85BFPHKSVBJ67CNNDMMSUYHWNKRLLJDGRK خب حالا آدرس رو در مرورگر وارد کنید و Enter را بزنید تا صفحه لود شود بعد از لود شدن صفحه با چنین صفحه ای مواجه می شوید: حالا کافیه روی تایید کلیک کنید تا به آدرس فایل php که برای ساخت کلاینت استفاده کردیم (عکس 1) ارجاع داده بشیم. خب به آدرس مرورگر نگاه کنید آدرس مرورگر شما چیزی شبیه به این هستش: https://website.ir/bazaar.php?code=GWObRK06KHLr8pCQzDXJ9hcDdSC3eV حالا مقداری که جلوی =code هستش رو یجا کپی کنید خب تا اینجا ما 3 تا مقدارو گفتیم یجا کپی کنید، یادتونه؟؟؟ اون مقادیر اینا بودن: Client Id و Client Secret و code اون مقادیر الان به کار میاد: باید اونا رو در کد زیر جایگزین کنی <?php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://pardakht.cafebazaar.ir/devapi/v2/auth/token/", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => array( 'grant_type' => 'authorization_code', 'code' => 'کد', 'client_id' => 'کلاینت آیدی', 'client_secret' => 'کلاینت سکرت', 'redirect_uri' => 'آدرس فایل پی اچ پی' ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; } خب فایل رو با فرمت php ذخیره کن و در هاستت آپلود کن و در مرورگر آدرسشو وارد و Enter رو بزن تا صفحه بارگذاری بشه این کار Postman خیلی راحت تر هستش ولی گفتم شاید برخی از دوستان آشنایی ندارند با این روش جلو میریم و اگه با Postman آشنایی داری با کد curl زیر انجامش بده: curl --location --request POST 'https://pardakht.cafebazaar.ir/devapi/v2/auth/token/' \ --form 'grant_type="authorization_code"' \ --form 'code="کد"' \ --form 'client_id="کلاینت آیدی"' \ --form 'client_secret="کلاینت سکرت"' \ --form 'redirect_uri="آدرس فایل پی اچ پی"' خب حالا برگردیم به مرورگرمون که بارگذاری شده نتیجه به صورت متنی در قالب JSON دریافت میشه که حاوی access token ، زمان انقضا ، نوع توکن موردنظر، scope و refresh token هستش. ما از این مقادیر جیسون فقط به refresh token نیاز داریم پس یجا کپی کن. از این جا به بعد دیگه آسون میشه 🥰 خب یادتونه یک آدرس برای ساخت کلاینت وارد کرده بودیم؟ (عکس 1) که از آدرس https://website.ir/bazaar.php استفاده کرده بودیم؟ این کد class که باید درون این فایل قرار بگیره: <?php /** * Class cafebazaar.ir * Author: milad kantoori */ define("clientId", "کلاینت آیدی"); define("clientSecret", "کلاینت سکرت"); define("refreshToken", "رفرش توکن"); class cafebazaar { private $access_token = ''; public function __construct() { $this->refreshTokenRequest(); } function checkPurchase($package_name, $product_id, $purchase_token, $userid) { $url = "https://pardakht.cafebazaar.ir/devapi/v2/api/validate/$package_name/inapp/$product_id/purchases/$purchase_token/?access_token=" . $this->access_token; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FAILONERROR, true); $response = curl_exec($ch); curl_close($ch); $responseData = json_decode($response, true); if (isset($responseData['consumptionState'])) { if ($responseData['consumptionState'] == 1 && $responseData['purchaseState'] == 0) { if ($this->consumePurchase($package_name, $purchase_token) == true && $responseData['developerPayload'] == $userid) { return true; } } } return false; } private function consumePurchase($package_name, $purchase_token) { $url = "https://pardakht.cafebazaar.ir/devapi/v2/api/consume/$package_name/purchases/?access_token=" . $this->access_token; $data = [ 'token' => $purchase_token ]; $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode === 200) { return true; } else { return false; } } private function refreshTokenRequest() { $url = "https://pardakht.cafebazaar.ir/devapi/v2/auth/token/"; $data = [ 'grant_type' => 'refresh_token', 'client_id' => clientId, 'client_secret' => clientSecret, 'refresh_token' => refreshToken ]; $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $responseData = json_decode($response, true); if (isset($responseData['access_token'])) { $this->access_token = $responseData['access_token']; } curl_close($ch); } } ?> خب در خط 7 و 8 و 9 مقادیری که گفتم کپی کن رو جایگزین کنید و تمام 🥳 دیگه می مونه فقط نحوه استفاده از این کلاس ولی چندتا نکنه هست که باید بهتون بگم: چرا بصورت class نوشتم کدرو؟ چون می تونیم در همه پروژه هامون ازش استفاده کنیم و نیازی به کپی فایل و دستکاری و... نداره (یکی از مزیت های شی گرائی اینه) چرا مصرف خرید درسمت سرور انجام میشه؟ چون من معتقدم که هیچ کار مهمی نباید برای امنیت در سمت کلاینت (کاربر) انجام بشه و کاربر فقط باید مشاهده کننده باشه!!! خب چطور استفاده کنیم از این کلاس؟؟؟ شما درون فایل php که به اپلیکیشنت وصله کافیه این class رو اینجوری فراخونی کنی: require_once('bazar.php'); $cafebazaar = new cafebazaar(); بعد کافیه هر جایی از کدت خواستی خرید کاربر رو بررسی کنی این کد رو استفاده کنی: $result = $cafebazaar->checkPurchase($_REQUEST['package_name'], $_REQUEST['product_id'], $_REQUEST['purchase_token'], $_REQUEST['userid']); if ($result) { // خرید معتبر است }else{ // خرید جعلی است } خب کد که کاملا مشخص هستش و کافیه شما در جاهایی نوشته شده خرید معتبر و جعلی، کدهای خودت رو بنویسی. حالا نکته آخر که باید سمت اپلیکیشن انجام بدی که مهم هستش پس خوب توجه کن: شما در سمت کاربر یا همون اپلیکیشن باید این موارد رو انجام بدی: 1. حتما و حتما وقتی که از کتابخونه Poolaky یک متغییر PoolakeyPurchaseRequest تعریف کردی از Payload استفاده کن مقدارش رو هم آیدی یکتا کاربر بزار (android_id) 2. موقعی که میخای به سمت سرور درخواست بدی باید موارد زیر رو ارسال کنی: ✅ پکیج نیم ✅ آیدی محصول ✅ توکن خرید ✅ آیدی یکتا کاربر درخواست به صورت GET فرستاده بشه و با کلید های: 🔑 package_name 🔑 product_id 🔑 purchase_token 🔑 userid برای مثال: https://website.ir/api.php?package_name=پکیج_نیم&product_id=آیدی_محصول&purchase_token=توکن_خرید&userid=آیدی_یکتا_کاربر در مثال بالا مواردی که فارسی هستند باید جایگزین شه همه موارد کاملا مشخصه فقط شاید توکن خرید براتون ناآشنا باشه 🤔 بعد از خرید موفق از بازار یک تابع که با اول نام ایونتی که شما موقع تعریف کتابخونه پولکی داشتید فراخونی میشه. ما اینجا فکر میکنیم نام این ایونت یا رویداد رو گذاشته بودیم bazaar پس این تابع بعد از خرید موفق فراخونی میشه: Private Sub bazaar_PurchaseSucceed (PurchaseInfo As PoolakeyPurchaseInfo) PToken = PurchaseInfo.PurchaseToken End Sub در مثال بالا PToken همون مقدار string توکن خرید هستش که باید موقع بررسی خرید ارسال کنیم. دیگه شما از چه کتابخونه ای برای ارسال مقادیر با متد GET استفاده می کنید با خودتونه. میتونی کتابخونه پیشفرض b4a باشه یا کتابخونه ای که خرید کردین 🥰 امیدوارم این آموزش به کارتون بیاد 🤩 و اینکه این فروم مکانی امن و رایگان برای یادگیری هستش، اگه حس میکنی نه تنها این مطلب بلکه مطالب، کتابخونه ها رایگان و... انجمن بهت کمک کرده ممنون میشم به انجمن خودتون از طریق لینک زیر به مبلغ دلخواه کمک کنید. لینک حمایت مالی جهت حفظ و ارتقا سیستم انجمن و ارتقا کتابخانه ها + به روزرسانی و حمایت از تیم برنامه نویسی 5 1 نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
محمدرضا شاهپیری 5,581 ارسال شده در 27 آبان، ۱۴۰۲ اشتراک گذاری ارسال شده در 27 آبان، ۱۴۰۲ عالی و کامل. ممنون که به اشتراک گذاشتین 1 نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
اندرویدستان 90 ارسال شده در 29 آبان، ۱۴۰۲ اشتراک گذاری ارسال شده در 29 آبان، ۱۴۰۲ در ۱۴۰۲/۸/۲۷ در ۱۷:۵۰، MrMedia گفته است: سلام به دوستان عزیز این آموزش برای امن کردن درون پرداخت کافه بازار با توجه به مستندات خود کافه بازار هستش. اگه نمی دونید api کافه بازار چیه کافیه به لینک زیر یه سر بزنی 😉 https://developers.cafebazaar.ir/fa/guidelines/in-app-billing/api# برای راه اندازی API ابتدا باید یک Client ایجاد کنید. هر Client شامل اطلاعاتی است که از طرف بازار برای شناختهشدن یک کاربر API لازم است. برای ساخت Client به پیشخان بازار مراجعه نمایید و از منو تنظیمات، قسمت API توسعهدهندگان روی گزینه کلاینت جدید کلیک کنید. در پنجرهٔ باز شده، مقدار مورد نظر خود برای Redirect URI را وارد کنید. این آدرس، مشخص میکند که بازار در پاسخ به درخواست اولیه شما برای دریافت Authorization Code، باید پاسخ را به چه آدرسی بفرستد. به عکس زیر توجه کنید: ما آدرس فایل php که برای چک کردن و مصرف خرید کاربران کافه بازار هستش رو درج کردیم (پایین پست فایل رو میزارم) و بعد از زدن دکمه ایجاد کلاینت، کلاینت ایجاد میشه و با عکسی مشابه عکس زیر مواجه میشید. ⚠️برای امنیت برنامه خودم مقادیر رو در عکس مخدوش کردم ⚠️ ✅ خب حالا دو مقدار Client Id و Client Secret رو یکجا کپی کنید چون نیازمون میشه حالا بجای سخت کار می رسیم!! به اینجای کار با خوب دقت کنید در این مرحله در مرورگر خود یک New Tab یا پنجره جدید باز کنید و آدرس زیر را تکمیل کنید: https://pardakht.cafebazaar.ir/devapi/v2/auth/authorize/?response_type=code&access_type=offline&redirect_uri=&client_id= خب چطور باید تکمیلش کنیم؟ ببینید دوستان این همون متد GET هستش شما باید جلوی مساوی هایی که خالی هستش رو پر کنید جلوی redirect_uri همون آدرس فایل php که برای ساخت کلاینت دادیم رو میزاریم (عکس 1) و جلوی client_id هم مقداری که در عکس 2 زیر همون عنوان می بینید رو درج می کنیم. پس با این حساب آدرس ما میشه این: https://pardakht.cafebazaar.ir/devapi/v2/auth/authorize/?response_type=code&access_type=offline&redirect_uri=https://website.ir/bazaar.php&client_id=JFNF85BFPHKSVBJ67CNNDMMSUYHWNKRLLJDGRK خب حالا آدرس رو در مرورگر وارد کنید و Enter را بزنید تا صفحه لود شود بعد از لود شدن صفحه با چنین صفحه ای مواجه می شوید: حالا کافیه روی تایید کلیک کنید تا به آدرس فایل php که برای ساخت کلاینت استفاده کردیم (عکس 1) ارجاع داده بشیم. خب به آدرس مرورگر نگاه کنید آدرس مرورگر شما چیزی شبیه به این هستش: https://website.ir/bazaar.php?code=GWObRK06KHLr8pCQzDXJ9hcDdSC3eV حالا مقداری که جلوی =code هستش رو یجا کپی کنید خب تا اینجا ما 3 تا مقدارو گفتیم یجا کپی کنید، یادتونه؟؟؟ اون مقادیر اینا بودن: Client Id و Client Secret و code اون مقادیر الان به کار میاد: باید اونا رو در کد زیر جایگزین کنی <?php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://pardakht.cafebazaar.ir/devapi/v2/auth/token/", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => array( 'grant_type' => 'authorization_code', 'code' => 'کد', 'client_id' => 'کلاینت آیدی', 'client_secret' => 'کلاینت سکرت', 'redirect_uri' => 'آدرس فایل پی اچ پی' ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; } خب فایل رو با فرمت php ذخیره کن و در هاستت آپلود کن و در مرورگر آدرسشو وارد و Enter رو بزن تا صفحه بارگذاری بشه این کار Postman خیلی راحت تر هستش ولی گفتم شاید برخی از دوستان آشنایی ندارند با این روش جلو میریم و اگه با Postman آشنایی داری با کد curl زیر انجامش بده: curl --location --request POST 'https://pardakht.cafebazaar.ir/devapi/v2/auth/token/' \ --form 'grant_type="authorization_code"' \ --form 'code="کد"' \ --form 'client_id="کلاینت آیدی"' \ --form 'client_secret="کلاینت سکرت"' \ --form 'redirect_uri="آدرس فایل پی اچ پی"' خب حالا برگردیم به مرورگرمون که بارگذاری شده نتیجه به صورت متنی در قالب JSON دریافت میشه که حاوی access token ، زمان انقضا ، نوع توکن موردنظر، scope و refresh token هستش. ما از این مقادیر جیسون فقط به refresh token نیاز داریم پس یجا کپی کن. از این جا به بعد دیگه آسون میشه 🥰 خب یادتونه یک آدرس برای ساخت کلاینت وارد کرده بودیم؟ (عکس 1) که از آدرس https://website.ir/bazaar.php استفاده کرده بودیم؟ این کد class که باید درون این فایل قرار بگیره: <?php /** * Class cafebazaar.ir * Author: milad kantoori */ define("clientId", "کلاینت آیدی"); define("clientSecret", "کلاینت سکرت"); define("refreshToken", "رفرش توکن"); class cafebazaar { private $access_token = ''; public function __construct() { $this->refreshTokenRequest(); } function checkPurchase($package_name, $product_id, $purchase_token, $userid) { $url = "https://pardakht.cafebazaar.ir/devapi/v2/api/validate/$package_name/inapp/$product_id/purchases/$purchase_token/?access_token=" . $this->access_token; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FAILONERROR, true); $response = curl_exec($ch); curl_close($ch); $responseData = json_decode($response, true); if (isset($responseData['consumptionState'])) { if ($responseData['consumptionState'] == 1 && $responseData['purchaseState'] == 0) { if ($this->consumePurchase($package_name, $purchase_token) == true && $responseData['developerPayload'] == $userid) { return true; } } } return false; } private function consumePurchase($package_name, $purchase_token) { $url = "https://pardakht.cafebazaar.ir/devapi/v2/api/consume/$package_name/purchases/?access_token=" . $this->access_token; $data = [ 'token' => $purchase_token ]; $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode === 200) { return true; } else { return false; } } private function refreshTokenRequest() { $url = "https://pardakht.cafebazaar.ir/devapi/v2/auth/token/"; $data = [ 'grant_type' => 'refresh_token', 'client_id' => clientId, 'client_secret' => clientSecret, 'refresh_token' => refreshToken ]; $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $responseData = json_decode($response, true); if (isset($responseData['access_token'])) { $this->access_token = $responseData['access_token']; } curl_close($ch); } } ?> خب در خط 7 و 8 و 9 مقادیری که گفتم کپی کن رو جایگزین کنید و تمام 🥳 دیگه می مونه فقط نحوه استفاده از این کلاس ولی چندتا نکنه هست که باید بهتون بگم: چرا بصورت class نوشتم کدرو؟ چون می تونیم در همه پروژه هامون ازش استفاده کنیم و نیازی به کپی فایل و دستکاری و... نداره (یکی از مزیت های شی گرائی اینه) چرا مصرف خرید درسمت سرور انجام میشه؟ چون من معتقدم که هیچ کار مهمی نباید برای امنیت در سمت کلاینت (کاربر) انجام بشه و کاربر فقط باید مشاهده کننده باشه!!! خب چطور استفاده کنیم از این کلاس؟؟؟ شما درون فایل php که به اپلیکیشنت وصله کافیه این class رو اینجوری فراخونی کنی: require_once('bazar.php'); $cafebazaar = new cafebazaar(); بعد کافیه هر جایی از کدت خواستی خرید کاربر رو بررسی کنی این کد رو استفاده کنی: $result = $cafebazaar->checkPurchase($_REQUEST['package_name'], $_REQUEST['product_id'], $_REQUEST['purchase_token'], $_REQUEST['userid']); if ($result) { // خرید معتبر است }else{ // خرید جعلی است } خب کد که کاملا مشخص هستش و کافیه شما در جاهایی نوشته شده خرید معتبر و جعلی، کدهای خودت رو بنویسی. حالا نکته آخر که باید سمت اپلیکیشن انجام بدی که مهم هستش پس خوب توجه کن: شما در سمت کاربر یا همون اپلیکیشن باید این موارد رو انجام بدی: 1. حتما و حتما وقتی که از کتابخونه Poolaky یک متغییر PoolakeyPurchaseRequest تعریف کردی از Payload استفاده کن مقدارش رو هم آیدی یکتا کاربر بزار (android_id) 2. موقعی که میخای به سمت سرور درخواست بدی باید موارد زیر رو ارسال کنی: ✅ پکیج نیم ✅ آیدی محصول ✅ توکن خرید ✅ آیدی یکتا کاربر درخواست به صورت GET فرستاده بشه و با کلید های: 🔑 package_name 🔑 product_id 🔑 purchase_token 🔑 userid برای مثال: https://website.ir/api.php?package_name=پکیج_نیم&product_id=آیدی_محصول&purchase_token=توکن_خرید&userid=آیدی_یکتا_کاربر در مثال بالا مواردی که فارسی هستند باید جایگزین شه همه موارد کاملا مشخصه فقط شاید توکن خرید براتون ناآشنا باشه 🤔 بعد از خرید موفق از بازار یک تابع که با اول نام ایونتی که شما موقع تعریف کتابخونه پولکی داشتید فراخونی میشه. ما اینجا فکر میکنیم نام این ایونت یا رویداد رو گذاشته بودیم bazaar پس این تابع بعد از خرید موفق فراخونی میشه: Private Sub bazaar_PurchaseSucceed (PurchaseInfo As PoolakeyPurchaseInfo) PToken = PurchaseInfo.PurchaseToken End Sub در مثال بالا PToken همون مقدار string توکن خرید هستش که باید موقع بررسی خرید ارسال کنیم. دیگه شما از چه کتابخونه ای برای ارسال مقادیر با متد GET استفاده می کنید با خودتونه. میتونی کتابخونه پیشفرض b4a باشه یا کتابخونه ای که خرید کردین 🥰 امیدوارم این آموزش به کارتون بیاد 🤩 و اینکه این فروم مکانی امن و رایگان برای یادگیری هستش، اگه حس میکنی نه تنها این مطلب بلکه مطالب، کتابخونه ها رایگان و... انجمن بهت کمک کرده ممنون میشم به انجمن خودتون از طریق لینک زیر به مبلغ دلخواه کمک کنید. لینک حمایت مالی جهت حفظ و ارتقا سیستم انجمن و ارتقا کتابخانه ها + به روزرسانی و حمایت از تیم برنامه نویسی دمت گرم شیر مادر نان پدر حلالت باشه واقعا عالیییییییییییی بود 🥰 1 نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
fz km 0 ارسال شده در 6 دی، ۱۴۰۲ اشتراک گذاری ارسال شده در 6 دی، ۱۴۰۲ سلام دوستان من همه مراحل رو رفتم ولی برای چک کردن خرید مشکل دارم. یعنی فکر کنم قسمت آخرش مشکل دارم متد get و.. منظور چی هست؟ از okhttp استفاده کنیم باید؟ نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
ارسالهای توصیه شده
به گفتگو بپیوندید
هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .
توجه: strong> مطلب ارسالی شما پس از تایید مدیریت برای همه قابل رویت خواهد بود.