PDA

View Full Version : تراکنشهای تکراری



saeidcd
چهارشنبه 10 تیر 1394, 10:56 صبح
سلام خدمت همه دوستان و اساتید گرامی
برنامه های پرداخت درون برنامه ای من تو بازار بعضی روزها از یه نفر چند تا تراکنش ثبت شده دارم و بعضا تو نظرات هم بعضی ها مینویسند که برنامه رو خریدیم اما ارتقا پیدا نکرد یا برای ارتقا مجبور شدیم دوبار بخریم برنامه رو.
خودم تا حالا 100 بار تست کردم اطرافیانم چندین و چند بار تست کردند اما هیچوقت مشکلی تا حالا نداشتیم.
میخواستم ببینم بقیه دوستان هم تا حالا همپچین مشکلی داشتند یا دارند یا نه؟

saeidcd
چهارشنبه 10 تیر 1394, 12:12 عصر
از دوستان میخوام اگه کسی این مشکل رو داره بیان کنه میخوام مطمین بشم اشکال از کدهای منه یا بازار یا...؟

saeidcd
شنبه 13 تیر 1394, 08:56 صبح
من کدهای پرداخت درون برنامه ایی رو قرار میدم لطفا اگه کسی میدونه مشکل چیه راهنمایی کنه



package shuliang.han.myviewpager;


import com.util.IabHelper;
import com.util.IabResult;
import com.util.Inventory;
import com.util.Purchase;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class cash extends Activity{

Button btn2;

public ProgressDialog dialog;

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 = "";

// 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;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.cash);


btn2 = (Button) findViewById(R.id.normalbtn);

btn2.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
kharid();
}
});


// load your setting that are you premium or not?
preferences = getSharedPreferences(PACKAGENAME,Context.MODE_PRIV ATE);
PACKAGENAME = getClass().getName();
Log.e("TAG", PACKAGENAME);
mIsPremium1 = preferences.getBoolean(KEY, false);
if (mIsPremium1 == true) {
//updateUi();
return;
}

// show loading dialog with ProgressDialog
dialog = new ProgressDialog(this);
dialog.setMessage("loading...");
dialog.setCancelable(false);
dialog.setInverseBackgroundForced(false);
dialog.show();


String base64EncodedPublicKey = "MIHNMA0GCSqGSIb3DQEBAQUAA4G7ADCBtwKBrwDNiwrQ1ocQSr xLQVgSzRQkw89jGpWyYCMaz2GgGeKZQyMj8OygleFnGtMNBiQK S10nfRO2Fd/odACJpRW/wlOkOLlCzrX/4XSLGpNjLDGcZeqaIZ+Ke7NRcq8WeO708UfTIIM0L8agDRNYTI XVN/MVqz9BXHnKeDLtNoWNs9J5eZGlGAcsnAa8mOEFhviPgXr4U8KD VL8B4qTXISbH2gNvRBqptjAVYUlEr+iAv10CAwEAAQ==";
// 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, 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);
}
// Hooray, IAB is fully set up!
mHelper.queryInventoryAsync(mGotInventoryListener) ;

}
});
}

IabHelper.QueryInventoryFinishedListener mGotInventoryListener = 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);
dialog.hide();
return;
}
else {
Log.d(TAG, "Query inventory was successful.");
// does the user have the premium upgrade?
mIsPremium1 = inventory.hasPurchase(SKU_PREMIUM);

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

// update UI accordingly

Log.d(TAG, "User is " + (mIsPremium1 ? "PREMIUM" : "NOT PREMIUM"));
}
dialog.hide();
// updateUi();
// setWaitScreen(false);
Toast.makeText(getApplicationContext(), mIsPremium1? "premium" : "notpremium", Toast.LENGTH_SHORT).show();
Log.d(TAG, "Initial inventory query finished; enabling main UI.");

}

};

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

/* TODO: for security, generate your payload here for verification. See the comments on
* verifyDeveloperPayload() for more info. Since this is a SAMPLE, we just use
* an empty string, but on a production app you should carefully generate this. */
String payload = "gdhassdflsldaslfkahsjahsjakaasa";

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


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

}

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

return true;
}

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase);
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, "Purchase successful.");

if (purchase.getSku().equals(SKU_PREMIUM)) {
Log.d(TAG, "Purchase is premium upgrade. Congratulating user.");
//alert("Thank you for upgrading to premium!");

//************************************
try{
************************************************** *************************************************
///بروزرسانی دیتابیس اینجا انجام می شود.
************************************************** ************************************************
//************************************
MasrafSeke(purchase);
mIsPremium1 = true;
Toast.makeText(cash.this,"با تشکر از خرید شما یکبار از برنامه خارج شده و سپس مجددا وارد شوید",Toast.LENGTH_SHORT).show();
// updateUi();
// setWaitScreen(false);
}catch (Exception e) {
// TODO: handle exception
Toast.makeText(cash.this," خطا: "+e.toString(),Toast.LENGTH_SHORT).show();
}


}




}
};

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

Log.d(TAG, "Destroying helper.");
if (mHelper != null) mHelper.dispose();
mHelper = null;
}
//************************************************** ***********
/*
// Update button with updateUi
public void updateUi() {
if (mIsPremium1) {
//findViewById(R.id.normalbtn).setBackgroundResource (mIsPremium1? R.drawable.blue : null);
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "clickpremium", Toast.LENGTH_SHORT).show();
//mHelper.launchPurchaseFlow(this, SKU_PREMIUM, RC_REQUEST, mPurchaseFinishedListener, "payload-string");

}
});
if (mHelper != null) mHelper.flagEndAsync();
mHelper.launchPurchaseFlow(this, SKU_PREMIUM, RC_REQUEST, mPurchaseFinishedListener, "payload-string");

// change the mIsPremium to true
SharedPreferences.Editor newtask = preferences.edit();
newtask.putBoolean(KEY, true);
newtask.commit();
}
}
*/
//************************************************** ***********

// Enables or disables the "please wait" screen.
void setWaitScreen(boolean set) {
findViewById(R.id.screen_wait).setVisibility(set ? View.VISIBLE : View.GONE);
}

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();

}


private void MasrafSeke(Purchase kala){
// ط¨ط±ط§غŒ ط§غŒظ†ع©ظ‡ ع©ط§ط±ط¨ط± ظپظ‚ط· غŒع©ط¨ط§ط± ط¨طھظˆط§ظ†ط¯ ط§ط² ع©ط§ظ„ط§غŒ ظپط±ظˆط´غŒ ط§ط³طھظپط§ط¯ظ‡ ع©ظ†ط¯
// ط¨ط§غŒط¯ ط¨ط¹ط¯ ط§ط² ط®ط±غŒط¯ ط¢ظ† ع©ط§ظ„ط§ ط±ط§ ظ…طµط±ظپ ع©ظ†غŒظ…
// ط¯ط± ط؛غŒط± ط§غŒظ†طµظˆط±طھ ع©ط§ط±ط¨ط± ط¨ط§ غŒع©ط¨ط§ط± ط®ط±غŒط¯ ظ…ط­طµظˆظ„ ظ…غŒ طھظˆط§ظ†ط¯ ع†ظ†ط¯ط¨ط§ط± ط§ط² ط¢ظ† ط§ط³طھظپط§ط¯ظ‡ ع©ظ†ط¯
mHelper.consumeAsync(kala, new IabHelper.OnConsumeFinishedListener() {
@Override
public void onConsumeFinished(Purchase purchase, IabResult result) {
if (result.isSuccess()) Toast.makeText(cash.this,"خرید شما باموفقیت ثبت شد",Toast.LENGTH_SHORT).show();
Log.d(TAG, "NATIJE masraf: "+result.getMessage()+result.getResponse());

}
});
}

public void kharid()
{
if (mHelper != null) mHelper.flagEndAsync();
mHelper.launchPurchaseFlow(this, SKU_PREMIUM, RC_REQUEST, mPurchaseFinishedListener, "payload-string");

}

}

hamedjj
شنبه 13 تیر 1394, 13:52 عصر
این مشکل از سمت شما نیست
تقریبا برای همه این اتفاق رخ داده است و به این دلیل است که بعضی دستگاه ها یا به دلیل تغییرات خیلی زیاد در سیستم عامل اندروید یا به دلیل سخت افزار خیلی ضعیف این وضعیت پیش میاد .. البته به ندرت

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

saeidcd
شنبه 13 تیر 1394, 13:55 عصر
این مشکل از سمت شما نیست
تقریبا برای همه این اتفاق رخ داده است و به این دلیل است که بعضی دستگاه ها یا به دلیل تغییرات خیلی زیاد در سیستم عامل اندروید یا به دلیل سخت افزار خیلی ضعیف این وضعیت پیش میاد .. البته به ندرت

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

واقعا مرسی خیلی کمک کردید.:تشویق:
حالا خیالم راحت شد:لبخند: