Онлайн платежи

Ответить
hard
Сообщения: 44
Зарегистрирован: 13 сен 2013, 14:21

Онлайн платежи

Сообщение hard » 21 ноя 2013, 11:47

Каким образом можно организовать оплату со счета телефона за определенный контент распространяемый приложением. То есть пользователь оплачивает и после этого получает доступ к контенту.
Для организации требуется какая то индетефикация пользователя. Как это лучше сделать? Соц сети? Гоогл плюс?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Онлайн платежи

Сообщение Foenix » 21 ноя 2013, 15:17

гоогл :lol: :lol: :lol:
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Mykola
Сообщения: 132
Зарегистрирован: 26 июл 2013, 12:06

Re: Онлайн платежи

Сообщение Mykola » 21 ноя 2013, 16:45

hard писал(а):Каким образом можно организовать оплату со счета телефона за определенный контент распространяемый приложением. То есть пользователь оплачивает и после этого получает доступ к контенту.
Для организации требуется какая то индетефикация пользователя. Как это лучше сделать? Соц сети? Гоогл плюс?

Код: Выделить всё

package com.elementsoftware.activeme.utils;

import java.sql.SQLException;
import java.util.Date;

import net.robotmedia.billing.BillingController;
import net.robotmedia.billing.BillingRequest.ResponseCode;
import net.robotmedia.billing.helper.AbstractBillingObserver;
import net.robotmedia.billing.model.Transaction.PurchaseState;
import android.app.Activity;
import android.os.AsyncTask;
import android.util.Log;

import com.elementsoftware.activeme.datalayer.accesslayer.HelperFactory;
import com.elementsoftware.activeme.datalayer.entities.ActivityPurchasedEntity;
import com.elementsoftware.activeme.datalayer.entities.PremiumActivityEntity;
import com.elementsoftware.activeme.datalayer.entities.UserInfo;
import com.elementsoftware.activeme.utils.webservice.ServiceExeption;
import com.elementsoftware.activeme.utils.webservice.ServiceHelper;

public class Billing extends Object {
	public static final String ANDROID_MARKET_ITEM = "1";
	public static final String ANDROID_FAKE_PURCHASE = "android.test.purchased";
	public static final String ANDROID_FAKE_CANCEL = "android.test.canceled";

	private AbstractBillingObserver mBillingObserver;
	private Activity activity;
	private PremiumActivityEntity curPurchase;
	private final static String TAG = "Billing";
	private IBilling billing;

	@Override
	protected void finalize() throws Throwable {
		BillingController.unregisterObserver(mBillingObserver);
		super.finalize();
	}

	private void restoreTransactions() {
		if (!mBillingObserver.isTransactionsRestored()) {
			BillingController.restoreTransactions(activity
					.getApplicationContext());
		}
	}

	public void setPremium(PremiumActivityEntity activity) {
		curPurchase = activity;
	}

	// and class must be Activity
	public Billing(final IBilling billing, Activity activity,
			PremiumActivityEntity premiumActivity) {
		curPurchase = premiumActivity;
		this.activity = activity;
		this.billing = billing;

		mBillingObserver = new AbstractBillingObserver(activity) {

			@Override
			public void onSubscriptionChecked(boolean supported) {
				billing.onSubscriptionChecked(supported);
			}

			@Override
			public void onRequestPurchaseResponse(String itemId,
					ResponseCode response) {
				
				billing.onRequestPurchaseResponse(itemId, response);
			}

			@Override
			public void onPurchaseStateChanged(String itemId,
					PurchaseState state) {
				if (state == PurchaseState.PURCHASED) {
					sendPurchaseToService();
				}
				billing.onPurchaseStateChanged(itemId, state);
			}

			@Override
			public void onBillingChecked(boolean supported) {
				if (supported) {
					restoreTransactions();
				}
				billing.onBillingChecked(supported);
			}
		};
		BillingController.registerObserver(mBillingObserver);
		BillingController.checkBillingSupported(activity
				.getApplicationContext());
	}

	private void updateActivity() {
		curPurchase.setPurchased(true);
		try {
			HelperFactory.getHelper().getPremiumDAO().update(curPurchase);
		} catch (SQLException e) {
			Log.e(TAG, e.getMessage());
		}
	}

	private void updateLocalStatus(ActivityPurchasedEntity activityPurchase) {
		try {
			HelperFactory.getHelper().getPurchaseDAO()
					.createOrUpdate(activityPurchase);
		} catch (SQLException e) {
			Log.e(TAG, e.getMessage());
		}
	}

	private void sendPurchaseToService() {
		ActivityPurchasedEntity data = new ActivityPurchasedEntity();
		data.setActivity_id(curPurchase.getActivity_id());
		data.setApi_key(UserInfo.getUser().getUserAPIKey());
		data.setPrice("$ 300");
		data.setDatetime(new Date());
		data.setBuyOnMarket(true);

		try {
			HelperFactory.getHelper().getPurchaseDAO().createOrUpdate(data);
		} catch (SQLException e) {
			Log.e(TAG, e.getMessage());
		}

		new SendPurchase().execute(data);
	}

	private class SendPurchase extends
			AsyncTask<ActivityPurchasedEntity, Void, Void> {
		private static final String TAG = "SendPurchase";

		@Override
		protected Void doInBackground(ActivityPurchasedEntity... params) {
			ActivityPurchasedEntity activity = params[0];
			try {
				ServiceHelper.getService(Billing.this.activity)
						.setActivityGuidePurchased(activity);
				activity.setSendToService(true);
				updateLocalStatus(activity);
			} catch (ServiceExeption e) {
				Log.e(TAG, e.getMessage());
			}
			updateActivity();
			return null;
		}

		@Override
		protected void onPostExecute(Void result) {
			billing.finishBillimg();
			super.onPostExecute(result);
		}
	}

	public interface IBilling {
		public void onPurchaseStateChanged(String itemId, PurchaseState state);

		public void onRequestPurchaseResponse(String itemId,
				ResponseCode response);

		public void onSubscriptionChecked(boolean supported);

		public void onBillingChecked(boolean supported);

		public void finishBillimg();
	}
}
Писал год назад (может 2-ва)

hard
Сообщения: 44
Зарегистрирован: 13 сен 2013, 14:21

Re: Онлайн платежи

Сообщение hard » 21 ноя 2013, 16:58

спасибо, не могли бы не код, а совет дать...по какой технологии что ли лучше.

Ответить