Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Мобильные ОС (Android, iOS, Windows Phone)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2015, 19:28   #1
ruN00b
Почетный нуб
Форумчанин
 
Аватар для ruN00b
 
Регистрация: 07.05.2013
Сообщений: 155
По умолчанию Подтверждение покупок InApp

Всем привет! Хочу вот прикрутить к приложению покупки. Сами покупки в тестовом режиме работают замечательно, но нет проверки на ее подлинность. Облазал Интернет в поисках того, как таковую сделать, а также прочел, что проверка эта работает только на настоящих покупках, а не тестовых. Ниже прилагаю код для покупки и ее проверки на php сервере.

А вопрос таков: все ли верно в этом коде и будет ли он работать корректно на реальных покупках? Заранее спасибо за ответ

Код приложения, совершающего покупку
Код:
	IabHelper mHelper;
	public boolean billingworks=false;
	String itemsku="название покупки";
	String AccLogin="логин аккаунта, для которого покупаем";
	
	public void initBilling(){ //Вызывается при событии onCreate
		String base64EncodedPublicKey = 
                                       "ключ из страницы на Google Play";
        
        	mHelper = new IabHelper(this, base64EncodedPublicKey);
			
        	mHelper.startSetup(new 
			IabHelper.OnIabSetupFinishedListener() {
        	   	 public void onIabSetupFinished(IabResult result) 
			 {
				if (result.isSuccess()){
				List additionalSkuList = new ArrayList();
				additionalSkuList.add(itemsku);
				mHelper.queryInventoryAsync(true, additionalSkuList, mQueryFinishedListener);
        	     billingworks=true;} else
				 Toast.makeText(getApplicationContext(),"An error occurred with billing system.",1024).show();
        	 }
        	});
	}
	
	@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
            super.onActivityResult(requestCode, resultCode, data);
        } else {
            
        }
    }
	
	public void buyItem(){
		if (billingworks){
mHelper.flagEndAsync();
			mHelper.launchPurchaseFlow(this, itemsku, 10001,   
     			   mPurchaseFinishedListener, "Ejfjejf");
				   toast("Trying to purchase...");
		} else
		Toast.makeText(this,"An error occurred. Try to restart",1024).show();
	}
	
	public void toast(String s){
		Toast.makeText(this,s,1024).show();
	}
	
	public String urlencode(String s){
		try{
		return URLEncoder.encode(s,"UTF-8");
		}catch(Exception e){return "none";}
	}
	
	IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
        public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
			
            if (result.isFailure()) {
                toast("Error purchasing: "+result);
                return;}
            if (!verifyDeveloperPayload(purchase)) {
                toast("Error purchasing. Authenticity verification failed.");
                return;
            }

            if (purchase.getSku().equals(itemsku)) {

                mHelper.consumeAsync(purchase, mConsumeFinishedListener);

            }}};
			
	IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() 
{
    public void onConsumeFinished(Purchase purchase, IabResult result) 
    {
        if (mHelper == null) return;
        if (result.isSuccess()) 
        {
			try{
			JSONObject checker=new JSONObject(purchase.getOriginalJson());
				toast("Activating account...");
				String url="http://mypage/check.php?login="+AccLogin+"&responsedata="+urlencode(purchase.getOriginalJson())+"&signature="+urlencode(purchase.getSignature());
				String[] verify=getPageS(url);
				if (verify.length>0) toast(verify[0]);
			}catch(Exception e){}
        } 
        else 
        {
            // handle error
        }
    }
};

IabHelper.QueryInventoryFinishedListener 
   mQueryFinishedListener = new IabHelper.QueryInventoryFinishedListener() {
   public void onQueryInventoryFinished(IabResult result, Inventory inventory)   
   {
      if (result.isFailure()) {
         return;
       }

       Purchase p =
          inventory.getPurchase(itemsku);
		  if (p!=null)
			  mHelper.consumeAsync(p, mConsumeFinishedListener);
       
   }
};
Код PHP:
PHP код:
<?php
    $responseCode 
0;
$user $_GET['login'];
$data json_decode(urldecode($_GET['responsedata'],true));

$signature urldecode($_GET['signature']);

$publicKey "ключ из GP";

$key "-----BEGIN PUBLIC KEY-----\n" chunk_split($publicKey64"\n") . "-----END PUBLIC KEY-----";
$key openssl_get_publickey($key);
if (
false === $key) {
        exit(
"error openssl_get_publickey");
}

$result openssl_verify($database64_decode($signature), $key);
if (
$result == 1) {
//Активируем аккаунт
} elseif ($result == 0) {
        echo 
"bad";
} else {
        echo 
"error";
}
?>
Буду очень признателен, если скажете, есть ли проблемы (надеюсь, что все хорошо)!
ruN00b вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подтверждение email kuba1981 PHP 9 01.02.2016 18:47
оплата покупок в интернет магазине CodeNOT PHP 5 26.07.2011 20:14
Подтверждение по смс. Abuhamed PHP 4 26.05.2011 18:04
Корзина покупок Gena91 Microsoft Office Excel 0 22.02.2011 11:52
Подтверждение Merge Chelius Microsoft Office Excel 2 21.06.2010 14:51