ورود

View Full Version : آموزش api بازار



raha_jon
پنج شنبه 21 اسفند 1393, 09:48 صبح
سلام

لطفا دوستان آموزشی مربوطه به API بازار قرار دهید منم قول میدم بعد اینکه یاد گرفتم فیلمشو تهیه کنم و بذارم اینجا دوستان استفاده کنن

با تشکر در ضمن من این لینکو دیدم اما چیزی متوجه نشدم

لطفا کامل توضیح بدین با تشکر


<?php

if(empty($_REQUEST['package']) || empty($_REQUEST['product']) || empty($_REQUEST['tokenid'])){
echo "error";
return;
}

$package = $_REQUEST['package'];
$product = $_REQUEST['product'];
$tokenid = $_REQUEST['tokenid'];

$refcode = 'کدی که از بازار گرفتین - رفرش کد';

$url = 'http://pardakht.cafebazaar.ir/auth/token/';
$data = array('grant_type' => 'refresh_token', 'client_id' => 'آیدی کلاینت', 'client_secret' => 'رمز کلاینت', 'refresh_token' => $refcode);

# Create a connection
$ch = curl_init($url);

# Form data string
$postString = http_build_query($data, '', '&');

# Setting our options
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

# Get the response
$response = curl_exec($ch);

$jsonResponse = json_decode($response, true);

$access_token = $jsonResponse['access_token'];

$result = file_get_contents("https://pardakht.cafebazaar.ir/api/validate/$package/inapp/$product/purchases/$tokenid/?access_token=$access_token");

echo $result;

curl_close($ch);


?>

c0mmander
پنج شنبه 21 اسفند 1393, 12:02 عصر
اول از همه این تاپیک رو مطالعه کنید http://barnamenevis.org/showthread.php?457283-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%88%D8%A8-%D8%B3%D8%B1%D9%88%DB%8C%D8%B3-%D9%88-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF&highlight=%D8%A2%D9%85%D9%88%D8%B2%D8%B4+%D8%B3%D8 %B1%D9%88%D8%B1

دوم باید یک هاست (ترجیحا رایگان, اما رایگان بودن هاست هم یک سری, درد سر هایی داره ولی برای شروع بهتر هست از رایگان استفاده کنید) همراه با دامین و یا ساب دامین ایجاد کنید.

سوم باید یک کلایت ایجاد کنید : توضیح http://pardakht.cafebazaar.ir/doc/developer-api/?l=fa
اونجایی که گفته Redirect URI همون صفحه از php شماست که داخل هاست قرار دادید که قرار بازار با اون ارتباط داشته باشه مثلا : www.c0mmanderHost.ir/input_check.php (http://www.c0mmanderHost..felan.ir/input_check.php)

بعد از اینکه بازار به شما کلایت ای دی و سیکرت کلایت و غیره رو ایجاد کرد فقط دوتا از آنها رو در لینک زیر جایگزین کن یعنی: <REDIRECT_URI> و <CLIENT_ID> .


https://pardakht.cafebazaar.ir/auth/authorize/?response_type=code&access_type=offline&redirect_uri=<REDIRECT_URI>&client_id=<CLIENT_ID>

در نهایت لینک رو داخل مرورگر باز کن, تا دکمه تایید بیاد و تایید کن.
چند لحظه صبر کن وارد صفحه همون سایتت میشه, دقت کن بالای ادررس بار سایت جلوی اسم سایت یک نوشته هست شبیه به این: code= asdfasdfsadfsadfsadfasdfasdfasdf یک همچین چیزی این رو داشته باش یک جایی.

و بعدش این آدرس رو در در مرورگرتون باز کنید:
https://pardakht.cafebazaar.ir/auth/token/
حالا اطلاعاتی که با توجه به توضیحات بازار در مراحل قبل گرفتید رو داخلش بزارید یعنی اطلاعات صفحه بازار و اطلاعات کلایت ایجاد کردید و کدی که در مرحله قبل گرفتید رو جای گذاری کنید و دکمه Authorize رو بزنید

اگر همه چیز رو درست انجام داده باشید باید جوابی شبیه به زیر رو بهتون بده: (دقت کنید که جواب بازار سر هم دیگه هست مثل این جدا جدا نیست در حقیقت یک Json خروجی هست)

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


حالا که هم اکسس کد رو گرفتید و هم ریفرش کد. میتونی حالا با جای گذاری اون اطلاعات در کد بالا, فایل PHP رو ذخیره کن و داخل همون آدرس در هاست بگذار مثلا www.c0mmanderHost.ir/input_check.php (http://www.c0mmanderHost..felan.ir/input_check.php) در اینجا input_check.php همون فایل PHP ذخیره شده در هاست شماست.
توضیحات حجت عزیز هم برای اون کدی هست که بالا گذاشتید:


به این فایل سه تا پارامتر باید بفرستید، یکی اسم پکیج، یکی آیدی محصول و دیگری توکنی که بعد از خرید به برنامه داده میشه همون purchase.getOrderId

داخل فایل باید refresh code رو که از بازار به صورت دستی گرفتید بذارید
آیدی کلاینت و رمزش رو هم وارد کنید

در جواب به شما یک رشته JSON داده میشه، اگر خالی بود یعنی پرداخت درست نیست، اگر که شامل استاتوس و سایر مشخصات خرید بود یعنی درسته

پاسخ درست به شکل زیره
{"consumptionState": 1, "purchaseState": 0, "kind": "androidpublisher#inappPurchase", "developerPayload": "hojjat", "purchaseTime": 1424267267085}

پاسخ غلط هم فقط {} فرستاده میشه

در صورتی که access code اشتباه باشه هم ارور 404 میگیرید



چندتا توضیح هم خودم اضافه میکنم !

ببنید ساختار این کار به این صورته:

1- شناساندن سایت معتبر به بازار جهت استعلام گرفتن بعدی:

با ثبت یک کلایت که دارای یک Client Id و Secret Client : در حقیقت اینها یوز و پسورد شما برای درست رسی به اکسس کد هستند
گرفتن کد تایید وجود وب سایت این کد نشان دهنده این هست که چنین وبسایتی وجود داره(یکی از زیبایی های این کار همینه)

2- استعلام گرفتن خودکار اکسس کد توسط وب سایت بعد از هر بار تقاضا از جهت برنامه اندرویدی شما به وب سایت شما

در حقیقت این API تمام در یک قسمت کار خودش رو انجام میده به دوتا دستور : authorization_code برای گرفتن کد ها ضروری و refresh_token برای گفتن اکسس کد.
امنیتی که باز هم در اینجا رعایت شده این هست که اکسس کد یک کد اعتباری هست و بعد از چند لحظه دیگه کاربردی نداره پس باید وب سایت شما خودش بتونه اکسس کد رو بگیره حالا ریفرش کد refresh_token دقیقا همون کاری code در مرحله قبلی برای شما انجام میده با چند تفاوت یک تغییر نمیکنه و ثابته دوم مختص همان آدرسی از وب سایت هست که شما در بازار ثبت کردید.

3- استعلام خرید و دریافت پاسخ نهایی


در از دریافت اکسس کد حالا میتونید با ارسال توکن دریافتی از خرید در اندروید و ارسال اون به وب سایت در این مرحله همراه با اکسس کد ارسال میشه جهت بررسی اگر جواب موجود بود وب سایت شما json کامل دریافت میکنه اگر هم توکن اشتباه بود مقادیر خالی رو یافت میکنید.

file_get_contents در کد PHP بالا کار مت post , رو انجام میده که اونم خیلی زیباست :)

raha_jon
پنج شنبه 21 اسفند 1393, 12:38 عصر
ممنون میشم کامل توضیح بدین ،باشه عب نداره شب می ذارین

raha_jon
پنج شنبه 21 اسفند 1393, 12:56 عصر
در مقدار <REDIRECT_URI> که یک ادرس هست چی داخلش باشه؟یعنی مثلا اگه
http://123.com/text.php
بود چی داخل فایل پی اچ پی باشه؟

c0mmander
پنج شنبه 21 اسفند 1393, 13:20 عصر
در مقدار <REDIRECT_URI> که یک ادرس هست چی داخلش باشه؟یعنی مثلا اگه
http://123.com/text.php
بود چی داخل فایل پی اچ پی باشه؟

پست بالا رو ویرایش کردم.

همون سایتی که شما قرار کدتون رو چک کنید هست .. همون هاست و دامینی که برای این کار شما تهیه کردیده. یعنی شما اول یک سایت ایجاد میکنید با نام http://123.com (http://123.com/text.php) در نهایت فایل text.php (http://123.com/text.php) رو داخل اون سایت قرار میدید که آدرس سایت شما برای REDIRECT_URI میشه http://123.com/text.php

hamedg1366
پنج شنبه 21 اسفند 1393, 17:07 عصر
من خیلی معذرت میخوام !

منظور از api بازار چی هس؟!
آیا راهی برای چک کردن خرید بصورت آنلاین هستش؟


ممنون میشم فیلمی هم که گفتین رو تهیه کنین

c0mmander
پنج شنبه 21 اسفند 1393, 17:43 عصر
من خیلی معذرت میخوام !

منظور از api بازار چی هس؟!
آیا راهی برای چک کردن خرید بصورت آنلاین هستش؟


ممنون میشم فیلمی هم که گفتین رو تهیه کنین

فیلم رو که من حالی ندارم که بخوام تهیه کنم و به هیچ کسی توصیه نمیکنم که این فیلم رو تهیه کنه چون اطلاعات برنامه خودش خیلی مهم تره تا یک فیلم .. تمام توضیحات رو من و سایر دوستان دادیم.

api بازار در حیقیت یک امکانی هست برای اینکه یک صورت تاییدیه خریدی با استفاده از REST از وبسایت بگیریم . این کار فقط برای برنامه هایی که پرداخت درون برنامه دارند امکان پذیره. بعد از اینکه شما پرداخت درون برنامه رو ساختید باز باید بیاد اینجا تا از شر ملعونک معروف و دوستانش رها بشید (البته شوخی بود و اما ه ک ر ها رو نمیشه کاریشون کرد. ه ک ر ها : معلون بزرگند , لاکی پچر و سایر برنامه های این چنینی : ملعونک )

raha_jon
پنج شنبه 21 اسفند 1393, 18:03 عصر
سلام ممنون واقعا،
من این کارو کردم و با ادرس مرورگر اطلاعاتشو دادم فقط این کد ها را ریختم تو فایل پی اچ پی و چون جسون بلد نبودم مستقیم دادم با رنگ قرمز پر رنگ کردم.اما اصلا نفهمیدم بقیه چین و کارشون چیه در ضمن توکن هم عوض کردم ها:لبخندساده:


<?php

if(empty($_REQUEST['package']) || empty($_REQUEST['product']) || empty($_REQUEST['tokenid'])){
echo "error";
return;
}

$package = $_REQUEST['package'];
$product = $_REQUEST['product'];
$tokenid = $_REQUEST['tokenid'];

$refcode = 'کدی که از بازار گرفتین - رفرش کد';

$url = 'http://pardakht.cafebazaar.ir/auth/token/';
$data = array('grant_type' => 'refresh_token', 'client_id' => 'آیدی کلاینت', 'client_secret' => 'رمز کلاینت', 'refresh_token' => $refcode);

# Create a connection
$ch = curl_init($url);

# Form data string
$postString = http_build_query($data, '', '&');

# Setting our options
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

# Get the response
$response = curl_exec($ch);

$jsonResponse = json_decode($response, true);

$access_token = 'wlofRGW2OGLaxenZFf30SNADTsduP1';

$result = file_get_contents("https://pardakht.cafebazaar.ir/api/validate/$package/inapp/$product/purchases/$tokenid/?access_token=$access_token");

echo $result;

curl_close($ch);


?>



اینم نتتیجه

{"consumptionState": 0, "purchaseState": 0, "kind": "androidpublisher#inappPurchase", "developerPayload": "payload-string", "purchaseTime": 1426095144074}


اما مشکل اینه بعدا میگه توکن معتبر نیست

با نتایج می تونم یب جوری کار کنم مشکل اینه که بعد از مدتی میگه توکن معتبر نیست

بازم ممنون از راهنمایی هاتون

c0mmander
پنج شنبه 21 اسفند 1393, 18:47 عصر
سلام ممنون واقعا،
من این کارو کردم و با ادرس مرورگر اطلاعاتشو دادم فقط این کد ها را ریختم تو فایل پی اچ پی و چون جسون بلد نبودم مستقیم دادم با رنگ قرمز پر رنگ کردم.اما اصلا نفهمیدم بقیه چین و کارشون چیه در ضمن توکن هم عوض کردم ها:لبخندساده:

اما مشکل اینه بعدا میگه توکن معتبر نیست

با نتایج می تونم یب جوری کار کنم مشکل اینه که بعد از مدتی میگه توکن معتبر نیست

بازم ممنون از راهنمایی هاتون

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

$access_token = $jsonResponse['access_token'];


تا مستقیما اکسس کدی که از بازار تولید کرده رو برای ادامه فرایند داخل $access_token بریزه !

ویرایش...

mavera
جمعه 22 اسفند 1393, 16:53 عصر
سلام

بنده همه مراحل متوجه شدم،
جز این! داخل هاست چی بریزم؟ . چی فایلی نیاز داره تا روی هاست اپلود کنم؟؟!!
یعنی داخل هاست، یه فایل php خالی ایجاد کنم؟؟ در اینصورت خطا میده، میگه
خطا

درخواست اشتباه است.!!





خواهش می کنم که راهنمایی کنید،
باتشکر

ehsanh22
جمعه 22 اسفند 1393, 18:22 عصر
سلام من همه مراحل رو میرم ، ولی الان فایل php آمادست و سایر مراحل هم رفتم ، حالا چجور در بخش PaymentActivity برناممون بهش بگیم به اون صفحه مراجعه کنه ؟

raha_jon
جمعه 22 اسفند 1393, 20:14 عصر
سلام

بنده همه مراحل متوجه شدم،
جز این! داخل هاست چی بریزم؟ . چی فایلی نیاز داره تا روی هاست اپلود کنم؟؟!!
یعنی داخل هاست، یه فایل php خالی ایجاد کنم؟؟ در اینصورت خطا میده، میگه
خطا

درخواست اشتباه است.!!





خواهش می کنم که راهنمایی کنید،
باتشکر
سلام
در پی اچ پی همون اطلاعاتو که من در بالا گذاشته ام استفاده کنید به همین راحتی:لبخندساده:

mavera
شنبه 23 اسفند 1393, 12:57 عصر
سلام


ببخشید که متوجه نشدم،
منظور اون بالا ، کد در اول پست ، داخل فایل php بریزم بعدش توی هاست آپلود کنم؟؟؟؟


متاسفانه خطا میده که
خواهش می کنم شفاف بگید
خیلی ممنون

raha_jon
شنبه 23 اسفند 1393, 14:23 عصر
بینید
اره تو افیطل پی اچ پی محتویات بالا را قرار بدین
بعدش اطلاعاتی که9 بازار میده بهتون را باهاش کامل کنید
فارسی هم نوشته شده اینجا چی وارد کنید
مثلا رفرش کد را بازار میده بذار اونجا
بعدش مثلا نوشته آیدی کلاینت فارسی را پاک کن و بجاش ایدی کلاینت را بده

بعدا مثلا ادرست اینه
http://testha.com/m/ch.php
خوب بعد اینجوری ادرس بده
http://testha.com/m/ch.php?package=test.my.pack&product=milio&tokenid=hgbvjhbvjhbhjb


به جایtest.my.pack پکیج برنامه
به جای milio شناسه که تو بازار ساختی
به جای hgbvjhbvjhbhjb توکن محصول

mavera
شنبه 23 اسفند 1393, 19:53 عصر
سلام

ولله خطا میده

ابنم فایل php ، ضمیمه کردم، و ببنید

با تشکر

c0mmander
شنبه 23 اسفند 1393, 20:32 عصر
سلام ولله خطا میده ابنم فایل php ، ضمیمه کردم، و ببنید با تشکر عزیز با UTF-8 سیو کن فایل رو. بعد داخل هاست فایل منیجرت رو باز کن و گزینه آپلود فایل رو بزن یا اگر از نرم افزار فایلزیلا استفاده میکنی که بهتر.

mavera
شنبه 23 اسفند 1393, 23:26 عصر
UFT-8 سیو کردم، بعدش ریختم روی هاست

متاسفانه میگه

خطادرخواست اشتباه است.

میشه خودتون یه فایل php درست کنی، برام بفرستی،
ممنون

Abbas Naghdi
یک شنبه 24 اسفند 1393, 00:40 صبح
سلام بچه ها من یه مشکل دارم خط 35 error میده $result = file_get_contents("https://pardakht.cafebazaar.ir/api/validate/$package/inapp/$product/purchases/$tokenid/?access_token=$access_token");بعد حالا کد نویسی سمت اندرویدش باید چیکار بشه ؟بعد برای هر برنامه باید این کارا رو انجام داد ؟و این grant_type باید مقدارش چی باشه ؟و این product_id چیه ؟با تشکر از همراهی شما .

ali-star
یک شنبه 24 اسفند 1393, 02:09 صبح
سلام دوستان از اونجایی که خیلی از کاربران با این موضوع مشکل دارن گفتم آموزش استفاده از API بازار رو در اختیارتون قرار بدم.

مراحل به ترتیب:

۱- اول باید یک سایت داشته باشید تا پاسخ بازار به درخواست شما به اونجا ارسال بشه.

۲- یک فایل php ایجاد کنید و داخلش کد های زیر رو قرار بدید(فعلا هیچی ویرایش نکنید و فقط کدها رو توش قرار بدید):


<?php

if(empty($_REQUEST['package']) || empty($_REQUEST['product']) || empty($_REQUEST['tokenid'])){
echo "error";
return;
}

$package = $_REQUEST['package'];
$product = $_REQUEST['product'];
$tokenid = $_REQUEST['tokenid'];

$refcode = 'کدی که از بازار گرفتین - رفرش کد';

$url = 'http://pardakht.cafebazaar.ir/auth/token/';
$data = array('grant_type' => 'refresh_token', 'client_id' => 'آیدی کلاینت', 'client_secret' => 'رمز کلاینت', 'refresh_token' => $refcode);

# Create a connection
$ch = curl_init($url);

# Form data string
$postString = http_build_query($data, '', '&');

# Setting our options
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

# Get the response
$response = curl_exec($ch);

$jsonResponse = json_decode($response, true);

$access_token = $jsonResponse['access_token'];

$result = file_get_contents("https://pardakht.cafebazaar.ir/api/validate/$package/inapp/$product/purchases/$tokenid/?access_token=$access_token");

echo $result;

curl_close($ch);


?>


۵- حالا اونو با انکود UTF-8 سیو کنید.
۶- فایل رو آپلود کنید (سایت خودتون).
۷- حالا فایل رو با ویرایشگر هاستتون باز کنید.
۸- حالا به بازار برید و یک کلاینت ایجاد کنید در قسمت "Redirect URI" هم آدرس فایل php که در سایتتون آپلود کردن رو قرار بدید بعد از ایجاد کلاینت بازار:
"CLIENT ID"
"CLIENT SECRET"
"REDIRECT URIS"
رو بهتون میده.

۱۰ - آدرس زیر رو در مروگرتون باز کنید به جای <REDIRECT_URI> هم REDIRECT URIS مرحله قبل و به جای <CLIENT_ID> هم CLIENT ID مرحله قبلی رو قرار بدید.
https://pardakht.cafebazaar.ir/auth/authorize/?response_type=code&access_type=offline&redirect_uri=<REDIRECT_URI>&client_id=<CLIENT_ID>

۱۱- یک صفحه باز میشه که توش نوشته مجوز دسترسی. روی تایید کیک کنید بعد به آدرست فایل php که قبلا آپلود کردیم فراخوانی می شیم که یه error توشته شده... کاری بهش نداریم... توی آدرس بار مروگرتون اگه توجه کنید به غیر آدرس فایل php یه کد هم همراهش هست مثل این:


http://website.domin/test_api.php?code=RPL1TgBTlBs6kJad3hyDYebtkd521inR CQR

در آدرس بالا اینو داریم:
code=RPL1TgBTlBs6kJad3hyDYebtkd521inRCQR
ما هم به:
RPL1TgBTlBs6kJad3hyDYebtkd521inRCQR
برای مرحله بعد نیاز داریم البته کدی که شما دریافت می کنید با کد بالا فرق داره.

۱۲- حالا به این آدرس برید:


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

در قسمت grant_type عبارت ریز رو بنویسید:
authorization_code

در قسمت code کدی که مرحله قبلی دریافت کردید رو قرار بدید.
در قسمت client_id هم CLIENT ID مرحله ۸ رو قرار بدید.
درقسمت client_secret هم CLIENT SECRET مرحله ۸ رو قرار بدید.
در قسمت redirect_uri هم REDIRECT URIS مرحله ۸ رو قرار بدید.

بعد روی Authorize کلیک کنید.

۱۳- حالا پاسخ به صورت زیر خواهد بود:

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

۱۴- حالا برمیگردیم به فایل php! حالا همه چی واضح شد! و بر اساس پاسخ مرحله قبلی فایل php رو کامل و سیو کنید.
۱۵- تموم شد! کافیه توی مروگرتون آدرس زیر رو باز کنید به جای <package_name> نام پکیج برنامتون و به جای <product_id> نام محصول و به جای <access_token> یک توکن که در لیست فروش هست قرار بدید به جای:
http://website.domin/test_api.php

آدرس فایل php رو قرار بدید.


http://website.domin/test_api.php?package=<package_name>&product=<product_id>&tokenid=<access_token>

پاسخ درست به صورت زیر:

{
"consumptionState": 1,
"purchaseState": 0,
"kind": "androidpublisher#inappPurchase",
"developerPayload": "something",
"purchaseTime": 1414181378566
}

و پاسخ اشتباه به صورت زیر(اگر برنامه خریداری نشده):

"{}"



امیدوارم کامل و ساده توضیح داده باشم ولی خودم یه مشکل دارم! اونم اینه که برنامه چطور بفهمه که خرید درست بوده چون نمیدونه کاربر هنگام خرید چه توکنی براش ساخته شده؟!

مرحله ۱۵ ویرایش شد دوستان از اشتباهم عذر میخوام...

Abbas Naghdi
یک شنبه 24 اسفند 1393, 03:54 صبح
سلام برنامه نویسا

با تشکر از
ali-star (http://barnamenevis.org/member.php?303704-ali-star)
من مشکلم حل شد .... ظاهرا کدی که در پست اول هست مشکل داره
حالا میمونه پیاده سازیش داخل اندروید که :)
کسی بلده ؟

باید بعد پرداخت توکن رو بگیریم و ارسال کنیم به آدرس مورد نظر با HTTP و اطلاعات رو بریزیم داخل یه StringBuilder و ...
و بعد چک کنیم ... فقط مسئله اصلی همون به دست آوردن توکن هست ... کسی بلده ؟

raha_jon
یک شنبه 24 اسفند 1393, 05:17 صبح
سلام اینکه دوستمون میگه از کجا بفهمیم خرید شده باید بگیم هنگام ارسال اطلاعات از کلاس Purchase با متد getOrderId توکن را به دست میاریم و ارسال می کنیم بازم مشکل داشتین در بپرسید

mavera
یک شنبه 24 اسفند 1393, 14:28 عصر
سلام

خیلی ممنون از توضیحاتون، مرحله دوم به بعد شفاف گفتید، دمت گرم

بنده مرحله دقت انجام دادم، باز متاسفانه میگه در خواست اشتباه است!!!!! :(

اطلاعاتمون پیام خصوصی می کنم

باتشکر

ali-star
دوشنبه 25 اسفند 1393, 13:04 عصر
آپ

ویرایش مرحله ۱۵ از اشتباهم عذر میخوام دوستان.

mavera
دوشنبه 24 فروردین 1394, 00:33 صبح
سلام

جاهای که به فارسی نوشته شده، اصلاح و جایگزن کردم ولی بقیه اش چی کار کنیم،
مثلا این کد



$package = $_REQUEST['package'];$product = $_REQUEST['product'];$tokenid = $_REQUEST['tokenid'];



این هم باید اصلاح کنیم؟، اولش نام پک برنامه و دومیش نام محصول و آخریش که... یا اینکه هیچکدام دست نزنیم؟

یا



$access_token = $jsonResponse['access_token'];


با تشکر

ali-star
دوشنبه 24 فروردین 1394, 02:53 صبح
سلام

جاهای که به فارسی نوشته شده، اصلاح و جایگزن کردم ولی بقیه اش چی کار کنیم،
مثلا این کد



$package = $_REQUEST['package'];$product = $_REQUEST['product'];$tokenid = $_REQUEST['tokenid'];



این هم باید اصلاح کنیم؟، اولش نام پک برنامه و دومیش نام محصول و آخریش که... یا اینکه هیچکدام دست نزنیم؟

یا



$access_token = $jsonResponse['access_token'];


با تشکر

فقط جاهای که فارسی توضیح داده شده رو ویرایش کنید.

raha_jon
دوشنبه 24 فروردین 1394, 08:25 صبح
متوجه نشدیم

shs1377
دوشنبه 24 فروردین 1394, 16:08 عصر
دوستان کسی میتونه نحوه استفاده ازش توی برنامه رو توضیح بده من سمت سرور انجام دادم ولی نمیدونم چجوری داخل برنامه متصل بشم و بررسی بکنم اگر بگید ممنون میشم

c0mmander
دوشنبه 24 فروردین 1394, 16:59 عصر
دوستان کسی میتونه نحوه استفاده ازش توی برنامه رو توضیح بده من سمت سرور انجام دادم ولی نمیدونم چجوری داخل برنامه متصل بشم و بررسی بکنم اگر بگید ممنون میشم

بعد از اون قسمتی از کدتون که تاییده بازار برای پرداخت رو دریافت کردید. یک نخ ایجاد کنید یک دونه پروگرس دیالوگ هم اجرا کنید . توکن بازگشتی رو همراه با اسم پکیج برنامه و اسم محصول برنامه تون رو به ترتیب به وبسایتون بفرستید.(من ترجیه میدم post بشه تا request) جواب برگشتی رو بخونید. جواب برگشتی رو داخل یک شی json پارس کنید تا به راحت تر بشه مقادیر رو مقایسه کرد.

shs1377
دوشنبه 24 فروردین 1394, 17:44 عصر
بعد از اون قسمتی از کدتون که تاییده بازار برای پرداخت رو دریافت کردید. یک نخ ایجاد کنید یک دونه پروگرس دیالوگ هم اجرا کنید . توکن بازگشتی رو همراه با اسم پکیج برنامه و اسم محصول برنامه تون رو به ترتیب به وبسایتون بفرستید.(من ترجیه میدم post بشه تا request) جواب برگشتی رو بخونید. جواب برگشتی رو داخل یک شی json پارس کنید تا به راحت تر بشه مقادیر رو مقایسه کرد.

سلام تا حدودی متوجه شدم ولی چون تاحالا با مبحث ارتباط با سرور کار نکردم نمیدونم چجوری باید این کد رو بنویسم کدش رو ندارید؟

raha_jon
دوشنبه 24 فروردین 1394, 18:02 عصر
سلام کدی نمیخواد فقط یک یو ار ال ر ا صدا بزن

shs1377
دوشنبه 24 فروردین 1394, 20:44 عصر
پیادش کردم خیلی خوب کار میکنه :لبخند: از دوستان و آموزش های خوبشون هم ممنونم

mavera
سه شنبه 25 فروردین 1394, 11:53 صبح
سلام
خیلی ممنون دوستان

حالا همه چی حله

فقط یک چیز مونده، اونم آغاز خرید و ارتقا برنامه روی دکمه
باید چی کد جایگزن و اضافه کنیم؟؟

کاربر محترم raha_jon (http://barnamenevis.org/member.php?323409-raha_jon) ، گفتید که فقط یک url صدا بزن، میشه بگید چجوری؟ چی کدی؟؟

ممنون

mavera
پنج شنبه 27 فروردین 1394, 13:03 عصر
سلام
کسی نیست بهم کمک کنه
خدا ثواب بده

shs1377
پنج شنبه 27 فروردین 1394, 22:41 عصر
سلام
کسی نیست بهم کمک کنه
خدا ثواب بده

دوست عزیز

شما باید اول این خط رو به قسمت (boolean verifyDeveloperPayload(Purchase p اضافه کنید :

order = p.getOrderId();

بعد در قسمت ((if (purchase.getSku().equals(SKU_PREMIUM که بهش میگیم بعد از خرید چه اتفاقی بیفته شما کد های داخلش رو کپی کنید بعد از اون جا پاک بکنید

حالا این کد رو به همین قسمت اضافه کنید :

verifytoken();


این کد ها و کلاس رو به آخر کدهاتون اضافه کنید :

public void verifytoken() {
progressDialog = ProgressDialog.show(this, "بررسی خرید", "لطفا صبر کنید");
new RequestTask().execute("**** در این قسمت کد ارتباط با api بازار رو وارد کنید****" + order);





}

class RequestTask extends AsyncTask<String, String, String>{


@Override
protected String doInBackground(String... uri) {
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response;
String responseString = null;
try {
response = httpclient.execute(new HttpGet(uri[0]));
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpStatus.SC_OK){
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
responseString = out.toString();
out.close();
} else{
//Closes the connection.
response.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
}
} catch (ClientProtocolException e) {
//TODO Handle problems..
} catch (IOException e) {
//TODO Handle problems..
}
return responseString;
}


@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);

progressDialog.dismiss();

if (result.length() > 5){


Log.d(TAG, "Purchase is premium upgrade. Congratulating user." + result + result.length());
Toast.makeText(getApplicationContext(), R.string.upgrade, Toast.LENGTH_SHORT).show();
mIsPremium = true;
updateUi();
setWaitScreen(false);
} else {
Log.d(TAG, "natigeh" + result);
setWaitScreen(false);
Toast.makeText(getApplicationContext(), "پرداخت انجام نشد", Toast.LENGTH_SHORT).show();

}
}
}

توجه : در قسمتی که کد ارتباط با api بازار خودتون رو باید وارد بکنید به این صورت باید باشه مثلا اگر کد شما این باشد
http://google.com/check.php?package=ir.app&product=sku&tokenid= (http://google.com/check.php?package=ir.app&product=sku&tokenid=@@@@@)123456789

باشد باید اون رو اینجوری استفاده کنید

"http://google.com/check.php?package=ir.app&product=sku&tokenid=" + order

موفق باشید

c0mmander
شنبه 29 فروردین 1394, 03:59 صبح
دوستان متاسفانه در کد های سمت سرور یک بی توجهی کوچکی شده که خیلیا نتونستن پیاده سازی کنن و بعضی از دوستان هم به من ایمیل دادن و با کلی اعصاب خوردی دق دلشون رو سر من بی نوا خالی کردن :افسرده:

مشکل اصلی این است پروتکل بازار HTTP نیست بلکه HTTPS هست یعنی باید در قسمت دریافت ریفرش توکن این کد باشه به جای:


$url = 'http://pardakht.cafebazaar.ir/auth/token/';


باید این کد باشه:


$url = 'https://pardakht.cafebazaar.ir/auth/token/';


اما خوب حالا ممکنه هر جایی اشتباه باشه و هر کسی اشتباه کنه من خودم رو میگم واقعا درصد اشتباهاتم بالاست و همیشه هم سعی میکنم تجربه اشتباهات قبلی رو استفاده کنم اما خوبه که ادم حوصله به خرج بده یکم صبر کنه سوال کنه ...

mavera
یک شنبه 30 فروردین 1394, 20:09 عصر
سلام
عزیز shs1377 (http://barnamenevis.org/member.php?300366-shs1377)

بی نهایت سپاس گزارم، :قلب:

ان شالله عاقبت به خیر و سرافراز بشی

mavera
سه شنبه 08 اردیبهشت 1394, 17:59 عصر
سلام
با تشکر از shs1377 (http://barnamenevis.org/member.php?300366-shs1377)
برنامه ام با کمک shs1377 (http://barnamenevis.org/member.php?300366-shs1377) قبلا با موفقیت از پرداخت جعلی جلوگیری کرده

یه مشکل دیگه، اینه که تا زمانی که لاک-ی پچ.ر ملعون توی گوشی نصب باشه، بعد برنامه ای که می خواد پرداخت کنه، قبل از اینکه صفحه پرداخت کافه بازار بیاد، لاکی پچ.ر فضول تمام عیار میاد!
ولی نمی تونه پرداخت واقعی انجام بدهد و هم چنین از پرداخت جعلی هم جلوگیری می کنه

مثل اینه نه می تونه بخره و نه هم می تونه پچ کنه!!

بعضی ها دوست دارن لا.کی پچ.ر توی گوشی داشته باشه، چی کارمیشه کرد؟

با سپاس

parniaznet
یک شنبه 13 اردیبهشت 1394, 10:16 صبح
سلام
ممنون از آموزشتون اما سمت اندروید رو میشه کد های کاملش رو بزارید و یکم واضح تر توضیح بدید چجوری باید پیاده سازی کرد؟

Ebrahimkh
سه شنبه 30 تیر 1394, 19:11 عصر
سلام
من هر کاری می کنم {} یا همون null برمیگردونه

ممکنه بگویید بجای
tokenid
و
product
تو لینک زیر چی باید وارد کنیم؟؟؟

http://website.domin/test_api.php?package=<package_name>&product=<product_id>&tokenid=<access_token>

c0mmander
سه شنبه 30 تیر 1394, 23:27 عصر
سلام
من هر کاری می کنم {} یا همون null برمیگردونه

ممکنه بگویید بجای
tokenid
و
product
تو لینک زیر چی باید وارد کنیم؟؟؟

http://website.domin/test_api.php?package=<package_name>&product=<product_id>&tokenid=<access_token>

فکر کنم منظورتون به جای <product_id> و <access_token> هست که برای تست میخواهید نتیجه صحیح رو ببنید. باید جای <access_token> باید یک توکن معتبری که خرید انجام شده و در بازار ثبت شده هست رو بدید(در قسمت تراکنش های پنل بازار قرار دارد.). و <product_id> نام محصولتون هست

Ebrahimkh
چهارشنبه 31 تیر 1394, 10:21 صبح
سلام دوست عزیز ممنون بابت راهنمایی
همونطوری که گفتید بنده انجام دادم تست با موفقیت انجام گرفت

فقط یه سوال می مونه ؟؟؟!!


زمانی که tokenid خرید رو در سورس جاوای خودم قرار میدم پیغام موفقیت آمیز میاد ولی وقتی متغیر order رو قرار میدم میگه خرید ناموفق بوده

هرچی هست تو این متغیر order = p.getOrderId(); هستش ای نمی تونه tokenid رو بدست بیاره در کل کار این متغیر چیه این چی رو داره بدست میاره من تابع
verify رو اینجوری بازنویسی کردم درسته یا کار من اشتباست (البته با توضیحات بالایی دوست عزیزمون پیش رفتم)

متغیر order رو چک کردم Null بر میگردونه :(


boolean verifyDeveloperPayload(Purchase p) {
//String payload =p.getDeveloperPayload();
order=p.getOrderId();
return true;
}

**********************************************

یه چیز دیگه هم که هست من متغیر order رو زمانی در شی ای که از کلاس IabHelper.OnIabPurchaseFinishedListener با نام
mPurchaseFinishedListener تعریف کردم و مقدار دهی می کنم خیلی خوب جواب میده ولی دوستان فرمودن باید تو تابع
verifyDeveloperPayload مقدار دهی کنید حالا این دو چه تفاوتی با هم دارن؟؟؟
منظورم مقادیری هست که به متغیرها میدهیم( هر دو تابع بالا متغیر purchase رو به عنوان آرگومان دارند)

بازم ممنون

c0mmander
چهارشنبه 31 تیر 1394, 13:48 عصر
سلام دوست عزیز ممنون بابت راهنمایی
همونطوری که گفتید بنده انجام دادم تست با موفقیت انجام گرفت

فقط یه سوال می مونه ؟؟؟!!


زمانی که tokenid خرید رو در سورس جاوای خودم قرار میدم پیغام موفقیت آمیز میاد ولی وقتی متغیر order رو قرار میدم میگه خرید ناموفق بوده

هرچی هست تو این متغیر order = p.getOrderId(); هستش ای نمی تونه tokenid رو بدست بیاره در کل کار این متغیر چیه این چی رو داره بدست میاره من تابع
verify رو اینجوری بازنویسی کردم درسته یا کار من اشتباست (البته با توضیحات بالایی دوست عزیزمون پیش رفتم)

متغیر order رو چک کردم Null بر میگردونه :(


boolean verifyDeveloperPayload(Purchase p) {
//String payload =p.getDeveloperPayload();
order=p.getOrderId();
return true;
}

**********************************************

یه چیز دیگه هم که هست من متغیر order رو زمانی در شی ای که از کلاس IabHelper.OnIabPurchaseFinishedListener با نام
mPurchaseFinishedListener تعریف کردم و مقدار دهی می کنم خیلی خوب جواب میده ولی دوستان فرمودن باید تو تابع
verifyDeveloperPayload مقدار دهی کنید حالا این دو چه تفاوتی با هم دارن؟؟؟
منظورم مقادیری هست که به متغیرها میدهیم( هر دو تابع بالا متغیر purchase رو به عنوان آرگومان دارند)

بازم ممنون

کد همون کدی هست که دوستمون قرار دادن
بستگی به کد خودتون داره اگر verifyDeveloperPayload فراخوانی نمیشه پس جای دیگه ازش استفاده کنید مهم این هست که شی purchase معتبر باشه.

Ebrahimkh
چهارشنبه 31 تیر 1394, 14:24 عصر
یعنی این قسمت از حرف بنده می تونه در باب کارکرد توکن درست باشه توکن خودکار آپدیت میشه






یه چیز دیگه هم که هست من متغیر order رو زمانی در شی ای که از کلاس IabHelper.OnIabPurchaseFinishedListener با نام
mPurchaseFinishedListener تعریف کردم و مقدار دهی می کنم خیلی خوب جواب میده ولی دوستان فرمودن باید تو تابع
verifyDeveloperPayload مقدار دهی کنید حالا این دو چه تفاوتی با هم دارن؟؟؟
منظورم مقادیری هست که به متغیرها میدهیم( هر دو تابع بالا متغیر purchase رو به عنوان آرگومان دارند)




راستی یه چیزدیگه سورسهای دیگه نیازی به دستکاری ندارن یعنی تو همون حالت اولیه باشن درسته؟؟!؟!(منظور سورس پرداخت درون برنامه ای هستش)



ممنون...

Ebrahimkh
چهارشنبه 31 تیر 1394, 14:30 عصر
اینم سورس پرداخت
بنظورتون مشکلش چیه؟؟!!






public class Pool extends Activity {

private ProgressDialog progressDialog;
public static String order;
private Dialog dialog;
public static int g = 0;
SharedPreferences preferences = null;

private String PACKAGENAME = "";

final String KEY = "PERIMIUM";

// Debug tag, for logging
static final String TAG = "savedPremium";

// SKUs for our products: the premium upgrade (non-consumable)
static final String SKU_PREMIUM = "how";

// Does the user have the premium upgrade?
boolean mIsPremium1 = false;

// (arbitrary) request code for the purchase flow
static final int RC_REQUEST = 10001;

// The helper object
IabHelper mHelper;

private SharedPreferences shared;
private SharedPreferences.Editor editor;
private Typeface typeface;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pool);

button = (Button) findViewById(R.id.btnpool);

typeface = Typeface.createFromAsset(getAssets(), "fonts/titr.ttf");

button.setTypeface(typeface);
button.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
onSavedUpgradeAppButtonClicked(arg0);
// verifytoken();
}
});

shared = getSharedPreferences("Pref", MODE_PRIVATE);
editor = shared.edit();
g = shared.getInt("mon", 0);

/************************************************** ************************************************** *******/
preferences = getSharedPreferences(PACKAGENAME, Context.MODE_PRIVATE);
PACKAGENAME = getClass().getName();
Log.e("TAG", PACKAGENAME);
mIsPremium1 = preferences.getBoolean(KEY, false);
if (mIsPremium1 == true) {
updateUi();
return;
}

String base64EncodedPublicKey = "MIHNMA0GCSqGSCpgXp3J1b4KKwYgzNx3EyqOpRccZXk4pJtwOn XVavJxiooZHNRul5v0eT2NvCPmPoNeqgRIX1MilemLyqfksJtm 8hxFTQYfcFriFXl8+Sq2RPtL2z+RIG1wECAwEAAQ==";
mHelper = new IabHelper(this, base64EncodedPublicKey);
Log.d(TAG, "Starting setup.");
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
Log.d(TAG, "Setup finished.");

if (!result.isSuccess()) {
// Oh noes, there was a problem.
Log.d(TAG, "Problem setting up In-app Billing: " + result);
}

}
});
/************************************************** ************************************************** *******/
}


/************************************************** ************************************************** *******/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + ","
+ data);

// Pass on the activity result to the helper for handling
if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
} else {
Log.d(TAG, "onActivityResult handled by IABUtil.");
}

}

public void onSavedUpgradeAppButtonClicked(View arg0) {
Log.d(TAG,
"Upgrade button clicked; launching purchase flow for upgrade.");
// setWaitScreen(true);

String payload = "gdhassdflsldaslfkahsjahsjakaasa";

mHelper.launchPurchaseFlow(this, SKU_PREMIUM, RC_REQUEST,
mPurchaseFinishedListener, payload);
}

boolean verifyDeveloperPayload(Purchase p) {
//String payload =p.getDeveloperPayload();
order=p.getOrderId();

return true;
}

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
Log.d(TAG, "Purchase finished: " + result + ", purchase: "
+ purchase);
Inventory inv = null;
try {
inv = mHelper.queryInventory(true, null);
if (inv.hasPurchase(SKU_PREMIUM)) {

// alert("تبريک شما به کاربر ويژه ارتقا يافتيد");
if (purchase.getSku().equals(SKU_PREMIUM)) {
// Log.d(TAG,
// "Purchase is premium upgrade. Congratulating user.");
// // alert("تبريک شما به کاربر ويژه ارتقا يافتيد");
// editor.putInt("mon", 1);
// editor.apply();
//
// mIsPremium1 = true;
// updateUi();
// setWaitScreen(false);
order=purchase.getOrderId();
verifytoken();

}

// حالا برنامه را فعال کنيد
} else {
if (result.isFailure()) {
Log.d(TAG, "Error purchasing: " + result);
// setWaitScreen(false);
return;
}
if (!verifyDeveloperPayload(purchase)) {
complain("Error purchasing. Authenticity verification failed.");
// setWaitScreen(false);
return;
}
Log.d(TAG, "خريد نادرست است");
}
} catch (IabException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
};

// Update button with updateUi
public void updateUi() {

if (mIsPremium1) {

AlertDialog.Builder builder=new AlertDialog.Builder(Pool.this);
builder.setTitle("کاربر ويژه");
builder.setMessage("تبريک ميگم"+"\n"+"دوست عزيز شما به کاربر ويژه ارتقا يافتيد");
builder.setPositiveButton("خب", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
startActivity(new Intent(Pool.this,StartActivity.class));
}
});
builder.show();


SharedPreferences.Editor newtask = preferences.edit();
newtask.putBoolean(KEY, true);
newtask.commit();

}
}

void complain(String message) {
Log.e(TAG, "**** testbilling Error: " + message);
alert("Error: " + message);
}

void alert(String message) {
AlertDialog.Builder bld = new AlertDialog.Builder(this);
bld.setMessage(message);
bld.setNeutralButton("OK", null);
Log.d(TAG, "Showing alert dialog: " + message);
bld.create().show();

}

/************************************************** ************************************************** *******/

@Override
public void onDestroy() {
super.onDestroy();

Log.d(TAG, "Destroying helper.");
if (mHelper != null)
mHelper.dispose();
mHelper = null;
}

public void verifytoken() {
progressDialog=new ProgressDialog(Pool.this);

progressDialog = ProgressDialog.show(this, "خريد", "لطفا چند لحظه صبر کنيد تا بررسي خريد صورت بگيرد...");
new RequestTask().execute("http://www.BBccountry.ir/token/token.php?package=com.dev.howold&product=howold&tokenid="+order);

}

class RequestTask extends AsyncTask<String, String, String>{

@Override
protected String doInBackground(String... uri) {
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response;
String responseString = null;
try {
response = httpclient.execute(new HttpGet(uri[0]));
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpStatus.SC_OK){
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
responseString = out.toString();
out.close();
} else{
//Closes the connection.
response.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
}
} catch (ClientProtocolException e) {
//TODO Handle problems..
} catch (IOException e) {
//TODO Handle problems..
}
return responseString;
}


@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);

progressDialog.dismiss();

if (result.length() > 5){


Log.d(TAG, "Purchase is premium upgrade. Congratulating user." + result + result.length());
Toast.makeText(getApplicationContext(), "پرداخت انجام شد", Toast.LENGTH_SHORT).show();
mIsPremium1 = true;
updateUi();
// setWaitScreen(false);
} else {
Log.d(TAG, "natigeh" + result);
// setWaitScreen(false);
Toast.makeText(getApplicationContext(), "پرداخت انجام نشد", Toast.LENGTH_SHORT).show();

}
}
}
}

Ebrahimkh
جمعه 02 مرداد 1394, 17:09 عصر
دوستان کسی هست بگه مشکل
کد بالا چیه که قیمت برنامه رو نشون نمیده در کل هر قیمتی میزارم میگه قیمت برنامه شما صفر تومن هستش



خواهشن راهنمایی کنید

Ebrahimkh
شنبه 03 مرداد 1394, 09:48 صبح
کسی نیست راهنمایی کنه

Ebrahimkh
شنبه 03 مرداد 1394, 11:48 صبح
خداروشکر پیداش کردم

فقط اینجا باید h رو بزرگ می نوشتم



static final String SKU_PREMIUM = "how";


دوستان اگه خواستند می تونن از سورس جاوایی که قرار دادم به عنوان یه نمونه از پرداخت درون برنامه ای تحت سرور استفاده کنند.:قلب:

pbm_soy
سه شنبه 21 مهر 1394, 19:49 عصر
آیا این api میتواند اطلاعات خرید نرم افزار را برگرداند؟ منظورم خریدهای مستقل است؟ نه پرداختهای درون برنامه!
آیا برای خریدهای مستقل نرم افزار توکن آیدی میدهد و یا order میدهد؟
من هنوز بازار را درست نمیشناسم

hamedg1366
سه شنبه 21 مهر 1394, 21:12 عصر
آیا این api میتواند اطلاعات خرید نرم افزار را برگرداند؟ منظورم خریدهای مستقل است؟ نه پرداختهای درون برنامه!
آیا برای خریدهای مستقل نرم افزار توکن آیدی میدهد و یا order میدهد؟
من هنوز بازار را درست نمیشناسم

متاسفانه نخیر، بازار برای خرید های مستقیم تا اونجایی که من در میدونم هیچ توکنی رو برای برنامه نویس ارائه نمیده

اتفاقا منم مشکل شما رو دارم ( لینک (http://barnamenevis.org/showthread.php?509959-%D8%A2%DB%8C%D8%A7-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D8%AE%D8%B1%DB%8C%D8%AF%D8%A7%D8%B1%DB%8C-%D8%B4%D8%AF%D9%87-%D8%A7%D8%B2-%D8%A8%D8%A7%D8%B2%D8%A7%D8%B1-%D8%B1%D8%A7-%D9%85%DB%8C%D8%AA%D9%88%D8%A7%D9%86-%D8%AF%D8%B1-%D8%AF%D8%B3%D8%AA%DA%AF%D8%A7%D9%87-%D8%AF%DB%8C%DA%AF%D8%B1-%D8%AF%D9%88%D8%A8%D8%A7%D8%B1%D9%87-%D9%86%D8%B5%D8%A8-%DA%A9%D8%B1%D8%AF%D8%9F)) ، به این نتیجه رسیدم که برای برنامه های پولی که خرید میشن اگ یوزر (بازار) کاربری که خرید برنامه رو انجام میده رو توی برنامه ذخیره کنم و فقط برای اون کاربر نمایش بدم برنامه رو اما متاسفانه بازار بهیچ عنوان زیر بار نرفت


لطفا اگه به نتیجه ای رسیدین توی همون تایپیک ارائه بفرمائید

با تشکر

karimi1993
سه شنبه 29 دی 1394, 22:35 عصر
سلام دوستان گرامی
من در پیاده سازی api بازار مشکل دارم. هاست دارم و اون کدهای پی اچ پی رو عینن کپی کردم و داخل سی پنل اپلود کردم
ولی وقتی ادرس مربوط به پی اچ پی رو میزنم میگه error نمیدونم چیکار کنم . با همین ادرس کلاینت میسازه ولی وقتی تویه لینک زیر جاگذاری میکنم بازار خطا میده....
چیکار کنم به نظر شما؟

shervin_boy
چهارشنبه 17 آذر 1395, 15:44 عصر
سلام
کسی از دوستان می دونه چطور باید از این کد پرداخت در سورس بازی در یونیتی استفاده کرد؟
ممنون

hamidreza.geo
چهارشنبه 20 بهمن 1395, 17:21 عصر
با سلام دوستان من از api پرداخت درون برنامه نسخه دو استفاده کردم به درستی کار میکرد ولی الان ازکار افتاده موقع بررسی خرید خطا می ده که به سرور وصل نمیشه مشکا از کجاست این
CLIENT بعد از یه مدتی منقضی میشه؟ چرا یهو از کار افتاده در حالی که سرور من دردست رس هست و مشکلی نداره. کاربرام گذارش میدن خرید انجام میشه ولی نسخه کامل نمیشه درحالی که قبلا این مشکل نبود.