آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

پرداخت درون برنامه اعمال طرح قبل از خرید(محصول سکه ای)

M.Karimi  10 سال پیش  10 سال پیش
+5 0

سلام خسته نباشید.

یه بازی داریم میسازیم که برای خرید سکه هاش پرداخت درون برنامه گذاشتیم. ولی حالا یه مشکلی وجود داره . اینکه قبل از خرید از بازار طرح اعمال میشه و حتی اگر خرید لغو بشه این کار انجام میشه. البته من چندتا محصول دارم همونطور که از شناسه ها مشخصه ولی نمیدونم چطور باید این رو جا داد درو ن کدها. به نظرتون چیکار باید کنم؟

 public class PayOnlinePakage extends Activity {

public static final String RSA ="کلید Rsa";

private final String NAMESPACE = "";
//Change IP to your machine IP
private final String URL = "";
private final String SOAP_ACTION = "";
//private String TAG = "PGGURU";
public static String responseJSON = "";

//GSON object
Gson gson = new Gson();

private SharedPreferences spSerialNumber;
private SharedPreferences spPay;
private SharedPreferences spBox;
int counter = 0;

ImageView btnpayonline;
RadioGroup radioGroup1;
RadioButton radioselect;
public static String TypePay = "0";
public static String TypeBox = "0";

private String SerialNumberTell = "";

static final String TAG = "LOG";
static final String SKU_PREMIUM = "gp";
static final String SKU_PREMIUM50_1 = "gp50";
static final String SKU_PREMIUM100 = "gp100i";
static final String SKU_PREMIUM50 = "gp50i";

boolean mIsPremium = false;

static final int RC_REQUEST = 13678;

IabHelper mHelper;


@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.payonlinepakage);

// You can find it in your Bazaar console, in the Dealers section.
// It is recommended to add more security than just pasting it in your source code;
mHelper = new IabHelper(this, RSA);

final IabHelper.QueryInventoryFinishedListener onQueryInventoryFinished = new IabHelper.QueryInventoryFinishedListener() {

public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
Log.d(TAG, "Query inventory finished.");
if (result.isFailure()) {
Log.d(TAG, "Failed to query inventory: " + result);
return;
}
else {
Log.d(TAG, "Query inventory was successful.");
// does the user have the premium upgrade?
mIsPremium = inventory.hasPurchase(SKU_PREMIUM);

if (mIsPremium) {
MasrafSeke(inventory.getPurchase(SKU_PREMIUM));
}

// update UI accordingly

Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));
}

Log.d(TAG, "Initial inventory query finished; enabling main UI.");
}
};

final IabHelper.OnIabPurchaseFinishedListener onIabPurchaseFinished = new IabHelper.OnIabPurchaseFinishedListener() {

public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
if (result.isFailure()) {
Log.d(TAG, "Error purchasing: " + result);
return;
}
else if (purchase.getSku().equals(SKU_PREMIUM)) {
// give user access to premium content and update the UI
Toast.makeText(PayOnlinePakage.this, "خرید موفق", Toast.LENGTH_SHORT).show();
MasrafSeke(purchase);

}
}
};

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);
}
// Hooray, IAB is fully set up!
mHelper.queryInventoryAsync(onQueryInventoryFinished);
}
});

////////////////////////////////////////////
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

radioGroup1 = (RadioGroup) findViewById(R.id.radioGroup1);

btnpayonline = (ImageView) findViewById(R.id.btnPayOnline);
final Animation fadeInAnimation2 = AnimationUtils.loadAnimation(this, R.anim.anim12);

btnpayonline.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
btnpayonline.startAnimation(fadeInAnimation2);

spSerialNumber = getApplicationContext().getSharedPreferences("SerialNumberUsers", 0);
SerialNumberTell = spSerialNumber.getString("SNU", "0");

int selectedId1 = radioGroup1.indexOfChild(findViewById(radioGroup1.getCheckedRadioButtonId()));
radioselect = (RadioButton) findViewById(selectedId1);
if (selectedId1 == 0)
{
TypePay = "100";
TypeBox = "1";
mHelper.launchPurchaseFlow(PayOnlinePakage.this, SKU_PREMIUM, 13678, onIabPurchaseFinished, "payload-string");

}
if (selectedId1 == 1)
{
TypePay = "50";
TypeBox = "1";
mHelper.launchPurchaseFlow(PayOnlinePakage.this, SKU_PREMIUM50_1, 13678, onIabPurchaseFinished, "payload-string");

}
if (selectedId1 == 2)
{
TypePay = "100";
TypeBox = "0";
mHelper.launchPurchaseFlow(PayOnlinePakage.this, SKU_PREMIUM100, 13678, onIabPurchaseFinished, "payload-string");

}
if (selectedId1 == 3)
{
TypePay = "50";
TypeBox = "0";
mHelper.launchPurchaseFlow(PayOnlinePakage.this, SKU_PREMIUM50, 13678, onIabPurchaseFinished, "payload-string");

}

spPay = getApplicationContext().getSharedPreferences("payonline", 0);
spBox = getApplicationContext().getSharedPreferences("boxonline", 0);
if ((spPay.getString("pay", "0").equals("0") &&
spPay.getString("box", "0").equals("0")) ||
spPay.getString("box", "0").equals("1"))
{
AsyncCountryWSCall task = new AsyncCountryWSCall();
//Execute the task to set Country list in Country Spinner Control
task.execute();

final Dialog di = new Dialog(PayOnlinePakage.this, R.style.FullHeightDialog);

di.requestWindowFeature(Window.FEATURE_NO_TITLE);
di.setContentView(R.layout.dialog);
ProgressBar img_dialog = (ProgressBar) di.findViewById(R.id.img_dialog);
img_dialog.setIndeterminate(true);
img_dialog.setIndeterminateDrawable(getResources().getDrawable(R.anim.progress_dialog));
di.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

di.show();

final Timer tm = new Timer();
tm.scheduleAtFixedRate(new TimerTask() {

@Override
public void run() {
runOnUiThread(new Runnable() {

@Override
public void run() {

counter++;
if (responseJSON.length() == 0)
{
if (counter == 25)
{
di.cancel();
Toast.makeText(getApplicationContext(), "خطا در ارتباط با سرور", Toast.LENGTH_LONG).show();
tm.cancel();
counter = 0;
responseJSON = "";
}
}
else if (responseJSON.length() > 0) {
if (responseJSON.substring(1, responseJSON.length() - 1).equals("ok"))
{
di.cancel();
Toast.makeText(getApplicationContext(), "خرید شما با موفقیت انجام شد", Toast.LENGTH_LONG).show();
tm.cancel();
counter = 0;
responseJSON = "";
//*******************
spPay = getApplicationContext().getSharedPreferences("payonline", 0);
Editor edit = spPay.edit();
edit.putString("pay", TypePay);
edit.commit();
//******************
spBox = getApplicationContext().getSharedPreferences("boxonline", 0);
edit = spPay.edit();
edit.putString("box", TypeBox);
edit.commit();

//ر�?تن به ص�?حه اصلی
finish();

}
else if (responseJSON.substring(1, responseJSON.length() - 1).equals("no"))
{
di.cancel();
Toast.makeText(getApplicationContext(), "خطا، لطفاً دوباره تلاش کنید", Toast.LENGTH_LONG).show();
tm.cancel();
counter = 0;
responseJSON = "";
//*******************
spPay = getApplicationContext().getSharedPreferences("payonline", 0);
Editor edit = spPay.edit();
edit.putString("pay", "0");
edit.commit();
//******************
spBox = getApplicationContext().getSharedPreferences("boxonline", 0);
edit = spPay.edit();
edit.putString("box", "0");
edit.commit();

}
else if (responseJSON.substring(1, responseJSON.length() - 1).equals("off"))
{
di.cancel();
Toast.makeText(getApplicationContext(), "شما بسته دارید و اجازه خرید ندارید", Toast.LENGTH_LONG).show();
tm.cancel();
counter = 0;
responseJSON = "";
}
}

}
});

}

}, 1, 1000);

}
else {

Toast.makeText(getApplicationContext(), "شما بسته دارید و اجازه خرید ندارید", Toast.LENGTH_LONG).show();

}
}
});

}


@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.");
}
}


@Override
public void onDestroy() {
super.onDestroy();
if (mHelper != null)
mHelper.dispose();
mHelper = null;
}


private void MasrafSeke(Purchase kala) {

mHelper.consumeAsync(kala, new IabHelper.OnConsumeFinishedListener() {

@Override
public void onConsumeFinished(Purchase purchase, IabResult result) {
if (result.isSuccess())
Toast.makeText(PayOnlinePakage.this, "مصرف شد", Toast.LENGTH_SHORT).show();
Log.d(TAG, "NATIJE masraf: " + result.getMessage() + result.getResponse());

}
});
}


//AysnTask class to handle Country WS call as separate UI Thread
private class AsyncCountryWSCall extends AsyncTask<String, Void, Void> {

@Override
protected Void doInBackground(String... params) {

invokeJSONWS(SerialNumberTell, TypePay, TypeBox, "PayPackage");
return null;
}

}


//Method which invoke web methods
public void invokeJSONWS(String SerialNumberUser, String TypeBuy, String TypeBox, String methName) {
// Create request
SoapObject request = new SoapObject(NAMESPACE, methName);
// Property which holds input parameters
PropertyInfo paramPI = new PropertyInfo();
// Set Name
paramPI.setName("SerialNumberUser");
// Set Value
paramPI.setValue(SerialNumberUser);
// Set dataType
paramPI.setType(String.class);
// Add the property to request object
request.addProperty(paramPI);

paramPI = new PropertyInfo();
// Set Name
paramPI.setName("TypeBuy");
// Set Value
paramPI.setValue(TypeBuy);
// Set dataType
paramPI.setType(String.class);
// Add the property to request object
request.addProperty(paramPI);

paramPI = new PropertyInfo();
// Set Name
paramPI.setName("TypeBox");
// Set Value
paramPI.setValue(TypeBox);
// Set dataType
paramPI.setType(String.class);
// Add the property to request object
request.addProperty(paramPI);

// Create envelope
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
// Set output SOAP object
envelope.setOutputSoapObject(request);
// Create HTTP call object
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

try {
// web service
androidHttpTransport.call(SOAP_ACTION + methName, envelope);
// Get the response
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
// Assign it to static variable
responseJSON = response.toString();

}
catch (Exception e) {
e.printStackTrace();
}
}


@Override
public void onBackPressed() {
finish();
return;
}

}

0 0
آموزش های مربوط به دوست عزیز < محمد حسین رو ببینید < لینک < فقط یه سوال دارم < شما برای تست کردن پرداخت ها < از موجودی حساب خودتون در بازار استفاده میکنید ؟ (10 سال پیش)
+1 0
بله از حساب خودم استفاده میکنم. ممنون از توجه تون. (10 سال پیش)
0 0
البته دیده بودم فیلم اقای کاشی زاده رو ولی برای مصرف سکه ها نمیدونم چیکار کنم. برای شناسه های متفاوت چطور باید sku های مختلف بزارم که موقع مصرفشون متوجه ش . (10 سال پیش)
0 0
. (10 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
M.Karimi  10 سال پیش
0 0

اگر کسی میتونه این مشکل رو حل کنه لطفا کمک کنید.  هزینه ش رو هم بفرماید.


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .