From 71c1911a21dec36c193cce3faeb5544ccd0cb5ba Mon Sep 17 00:00:00 2001 From: cimenmus Date: Wed, 13 Jun 2018 22:45:01 +0300 Subject: [PATCH] payment part 2 --- .idea/caches/build_file_checksums.ser | Bin 538 -> 538 bytes app/build.gradle | 4 + app/src/main/AndroidManifest.xml | 22 +++- .../android/activity/PaymentActivity.java | 118 ++++++++++++++++++ .../ch/pizzapp/android/api/ApiConstants.java | 12 ++ .../CreateOrderSummaryFragment.java | 88 ++++++++++++- .../android/model/PaymentMethodModel.java | 35 ++++++ app/src/main/res/layout/activity_payment.xml | 9 ++ app/src/main/res/values/strings.xml | 2 + 9 files changed, 286 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/ch/pizzapp/android/activity/PaymentActivity.java create mode 100644 app/src/main/res/layout/activity_payment.xml diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 1413b72248c20c5ab8dab2c22fd5c9f302a5d386..bb22a4584831de5eed6e388c02a3940f51e9637c 100644 GIT binary patch delta 33 rcmV++0N($a1eyepm<08F-deGoZ2=ME`uDZwO3R - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/ch/pizzapp/android/activity/PaymentActivity.java b/app/src/main/java/ch/pizzapp/android/activity/PaymentActivity.java new file mode 100644 index 0000000..4bb447f --- /dev/null +++ b/app/src/main/java/ch/pizzapp/android/activity/PaymentActivity.java @@ -0,0 +1,118 @@ +package ch.pizzapp.android.activity; + +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; + +import com.braintreepayments.api.BraintreeFragment; +import com.braintreepayments.api.Card; +import com.braintreepayments.api.PayPal; +import com.braintreepayments.api.exceptions.BraintreeError; +import com.braintreepayments.api.exceptions.ErrorWithResponse; +import com.braintreepayments.api.exceptions.InvalidArgumentException; +import com.braintreepayments.api.interfaces.BraintreeCancelListener; +import com.braintreepayments.api.interfaces.BraintreeErrorListener; +import com.braintreepayments.api.interfaces.ConfigurationListener; +import com.braintreepayments.api.interfaces.PaymentMethodNonceCallback; +import com.braintreepayments.api.interfaces.PaymentMethodNonceCreatedListener; +import com.braintreepayments.api.interfaces.PaymentMethodNoncesUpdatedListener; +import com.braintreepayments.api.models.CardBuilder; +import com.braintreepayments.api.models.Configuration; +import com.braintreepayments.api.models.PayPalRequest; +import com.braintreepayments.api.models.PaymentMethodNonce; + + +import java.util.List; + +import butterknife.ButterKnife; +import ch.pizzapp.android.R; +import ch.pizzapp.android.api.ApiConstants; +import ch.pizzapp.android.helper.DialogHelper; + +public class PaymentActivity extends BaseActivity + implements PaymentMethodNonceCreatedListener, + PaymentMethodNoncesUpdatedListener, ConfigurationListener, + BraintreeCancelListener, PaymentMethodNonceCallback, + BraintreeErrorListener { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_payment); + ButterKnife.bind(this); + showBraintreePaymentFragment(); + } + + @Override + public void onPaymentMethodNonceCreated(PaymentMethodNonce paymentMethodNonce) { + // Send this nonce to your server + String nonce = paymentMethodNonce.getNonce(); + } + + @Override + public void onConfigurationFetched(Configuration configuration) { + + } + + @Override + public void onPaymentMethodNoncesUpdated(List paymentMethodNonces) { + + } + + @Override + public void onCancel(int requestCode) { + // Use this to handle a canceled activity, if the given requestCode is important. + // You may want to use this callback to hide loading indicators, and prepare your UI for input + } + + @Override + public void success(PaymentMethodNonce paymentMethodNonce) { + + } + + @Override + public void failure(Exception exception) { + + } + + @Override + public void onError(Exception error) { + if (error instanceof ErrorWithResponse) { + ErrorWithResponse errorWithResponse = (ErrorWithResponse) error; + BraintreeError cardErrors = errorWithResponse.errorFor("creditCard"); + if (cardErrors != null) { + // There is an issue with the credit card. + BraintreeError expirationMonthError = cardErrors.errorFor("expirationMonth"); + if (expirationMonthError != null) { + // There is an issue with the expiration month. + DialogHelper.showAlertDialog(this, expirationMonthError.getMessage()); + } + } + } + } + + + private void showBraintreePaymentFragment(){ + try { + + BraintreeFragment braintreeFragment = + BraintreeFragment.newInstance( + BaseActivity.currentActivity, ApiConstants.BRAINTREE_TOKENIZATION_KEY_SANDBOX); + + /* + // create paypal payment + PayPal.requestBillingAgreement(braintreeFragment, new PayPalRequest()); + */ + + CardBuilder cardBuilder = new CardBuilder() + .cardNumber("4111111111111111") + .expirationMonth("08") + .expirationYear("2018"); + Card.tokenize(braintreeFragment, cardBuilder); + + }catch (InvalidArgumentException e){ + e.printStackTrace(); + } + + } + +} diff --git a/app/src/main/java/ch/pizzapp/android/api/ApiConstants.java b/app/src/main/java/ch/pizzapp/android/api/ApiConstants.java index b81bd65..bb1b9d0 100644 --- a/app/src/main/java/ch/pizzapp/android/api/ApiConstants.java +++ b/app/src/main/java/ch/pizzapp/android/api/ApiConstants.java @@ -13,4 +13,16 @@ public class ApiConstants { public static final String CAMPAIGN_CODE_PIZZAPASS = "PIZZAPASS"; public static final String CAMPAIGN_CODE_CHAMPAGNE = "CHAMPAGNE"; + + public static final String BRAINTREE_TOKENIZATION_KEY_SANDBOX = "sandbox_wk7668t4_v332h2jkpq44r8w8"; + public static final String BRAINTREE_TOKENIZATION_KEY_PRODUCTION = ""; + + + public static final String PAYMENT_METHOD_CODE_CREDIT_DEBIT_CARD = "braintree"; // Credit / Debit Card + public static final String PAYMENT_METHOD_CODE_BANK_CASH = "cod"; // Bar + public static final String PAYMENT_METHOD_CODE_TRANSFER = "bank_transfer"; // Kreditkarten-Kartenzahlung + public static final String PAYMENT_METHOD_CODE_TWINT = "twintcw_twint"; // TWINT + public static final String PAYMENT_METHOD_CODE_PAYPAL = "paypal"; + public static final String PAYMENT_METHOD_CODE_ANDROID_PAY = "android_pay"; + public static final String PAYMENT_METHOD_CODE_APPLE_PAY = "apple_pay"; } diff --git a/app/src/main/java/ch/pizzapp/android/fragment/createOrder/CreateOrderSummaryFragment.java b/app/src/main/java/ch/pizzapp/android/fragment/createOrder/CreateOrderSummaryFragment.java index 6fc817a..8343682 100644 --- a/app/src/main/java/ch/pizzapp/android/fragment/createOrder/CreateOrderSummaryFragment.java +++ b/app/src/main/java/ch/pizzapp/android/fragment/createOrder/CreateOrderSummaryFragment.java @@ -1,5 +1,6 @@ package ch.pizzapp.android.fragment.createOrder; +import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; @@ -10,9 +11,23 @@ import android.view.ViewGroup; import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; +import com.braintreepayments.api.dropin.DropInActivity; +import com.braintreepayments.api.dropin.DropInRequest; +import com.braintreepayments.api.dropin.DropInResult; +import com.braintreepayments.api.exceptions.BraintreeError; +import com.braintreepayments.api.exceptions.ErrorWithResponse; +import com.braintreepayments.api.interfaces.BraintreeCancelListener; +import com.braintreepayments.api.interfaces.BraintreeErrorListener; +import com.braintreepayments.api.interfaces.ConfigurationListener; +import com.braintreepayments.api.interfaces.PaymentMethodNonceCallback; +import com.braintreepayments.api.interfaces.PaymentMethodNonceCreatedListener; +import com.braintreepayments.api.interfaces.PaymentMethodNoncesUpdatedListener; +import com.braintreepayments.api.models.Configuration; +import com.braintreepayments.api.models.PaymentMethodNonce; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import butterknife.BindString; import butterknife.BindView; @@ -22,6 +37,7 @@ import ch.pizzapp.android.R; import ch.pizzapp.android.activity.BaseActivity; import ch.pizzapp.android.activity.CampaignProductListActivity; import ch.pizzapp.android.activity.CreateOrderActivity; +import ch.pizzapp.android.api.ApiConstants; import ch.pizzapp.android.api.ApiEndPoints; import ch.pizzapp.android.api.ApiErrorUtils; import ch.pizzapp.android.api.ApiService; @@ -31,6 +47,7 @@ import ch.pizzapp.android.helper.PriceHelper; import ch.pizzapp.android.helper.SessionHelper; import ch.pizzapp.android.helper.SharedPrefsHelper; import ch.pizzapp.android.model.CampaignModel; +import ch.pizzapp.android.model.PaymentMethodModel; import ch.pizzapp.android.model.cart.CartInfoModel; import ch.pizzapp.android.model.cart.CartProductModel; import ch.pizzapp.android.view.AppInfoView; @@ -65,9 +82,11 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { @BindString(R.string.no) String noText; @BindString(R.string.restaurant_out_of_order) String restaurantOutOfOrderText; @BindString(R.string.something_went_wrong) String genericErrorText; + @BindString(R.string.unknown_payment_method) String unknownPaymentMethodText; public static final java.lang.String FRAGMENT_NAME = "orderSummaryFragment"; private int REQUEST_CODE_CAMPAIGN_PRODUCT_LIST = 7847; + private final int REQUEST_CODE_PAYMENT = 3784; private CreateOrderActivity createOrderActivity; public CreateOrderSummaryFragment() {} @@ -96,6 +115,21 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { BaseActivity.setCurrentActivity(createOrderActivity); getCartProducts(); } + else if (requestCode == REQUEST_CODE_PAYMENT) { + if (resultCode == Activity.RESULT_OK) { + DropInResult result = data.getParcelableExtra(DropInResult.EXTRA_DROP_IN_RESULT); + Log.i("fjehfhreuf", "vjfjvjfv"); + //createOrder(); + // use the result to update your UI and send the payment method nonce to your server + } else if (resultCode == Activity.RESULT_CANCELED) { + // the user canceled + Log.i("fjehfhreuf", "vjfjvjfv"); + } else { + // handle errors here, an exception may be available in + Exception error = (Exception) data.getSerializableExtra(DropInActivity.EXTRA_ERROR); + Log.i("fjehfhreuf", "vjfjvjfv"); + } + } } @OnClick({R.id.previousTextView, R.id.nextTextView}) @@ -318,7 +352,23 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { response.body() != null){ if(response.body().isSuccess()){ - createOrder(); + + if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.UNKNOWN){ + DialogHelper.hideLoadingDialog(); + DialogHelper.showAlertDialog(BaseActivity.currentActivity, unknownPaymentMethodText); + } + else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.CASH || + createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TRANSFER){ + createOrder(); + } + else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT) { + DialogHelper.hideLoadingDialog(); + startTwintPayment(); + } + else { + DialogHelper.hideLoadingDialog(); + startBraintreePayment(); + } } else { DialogHelper.hideLoadingDialog(); @@ -342,7 +392,7 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { } private void createOrder(){ - //DialogHelper.showLoadingDialog(); + DialogHelper.showLoadingDialog(); Call> call = ApiService.apiInterface.createOrder( ApiEndPoints.API_CREATE_ORDER + SessionHelper.getCustomerToken().getToken(), getCreateOrderParams()); call.enqueue(new Callback>() { @@ -437,4 +487,38 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { }); } + private void startBraintreePayment(){ + + // CVV kodu default olarak gozukmuyor. + // Gozukmesi için braintree'ye login ol + // Go to Settings --> Processing --> CVV --> Click on Edit --> Check option 'CVV not provided(l)', Enable option 'for any transaction' + // + + DropInRequest paymentRequest = new DropInRequest() + .tokenizationKey(ApiConstants.BRAINTREE_TOKENIZATION_KEY_SANDBOX) + //.clientToken("eyJ2ZXJzaW9uIjoyLCJhdXRob3JpemF0aW9uRmluZ2VycHJpbnQiOiI3NzY2ZmNmNTQ3MDc1YWMzMGZiNmIxMzU3MTI1ZTJmODc5YjM4MmNkOTcwYmYwZmYyNmQzMWJmNGRiYjI1MjQzfGNyZWF0ZWRfYXQ9MjAxOC0wNi0xM1QxODo1Mzo0Mi4wODA4MDc5MDQrMDAwMFx1MDAyNm1lcmNoYW50X2lkPTM0OHBrOWNnZjNiZ3l3MmJcdTAwMjZwdWJsaWNfa2V5PTJuMjQ3ZHY4OWJxOXZtcHIiLCJjb25maWdVcmwiOiJodHRwczovL2FwaS5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tOjQ0My9tZXJjaGFudHMvMzQ4cGs5Y2dmM2JneXcyYi9jbGllbnRfYXBpL3YxL2NvbmZpZ3VyYXRpb24iLCJjaGFsbGVuZ2VzIjpbXSwiZW52aXJvbm1lbnQiOiJzYW5kYm94IiwiY2xpZW50QXBpVXJsIjoiaHR0cHM6Ly9hcGkuc2FuZGJveC5icmFpbnRyZWVnYXRld2F5LmNvbTo0NDMvbWVyY2hhbnRzLzM0OHBrOWNnZjNiZ3l3MmIvY2xpZW50X2FwaSIsImFzc2V0c1VybCI6Imh0dHBzOi8vYXNzZXRzLmJyYWludHJlZWdhdGV3YXkuY29tIiwiYXV0aFVybCI6Imh0dHBzOi8vYXV0aC52ZW5tby5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tIiwiYW5hbHl0aWNzIjp7InVybCI6Imh0dHBzOi8vb3JpZ2luLWFuYWx5dGljcy1zYW5kLnNhbmRib3guYnJhaW50cmVlLWFwaS5jb20vMzQ4cGs5Y2dmM2JneXcyYiJ9LCJ0aHJlZURTZWN1cmVFbmFibGVkIjp0cnVlLCJwYXlwYWxFbmFibGVkIjp0cnVlLCJwYXlwYWwiOnsiZGlzcGxheU5hbWUiOiJBY21lIFdpZGdldHMsIEx0ZC4gKFNhbmRib3gpIiwiY2xpZW50SWQiOm51bGwsInByaXZhY3lVcmwiOiJodHRwOi8vZXhhbXBsZS5jb20vcHAiLCJ1c2VyQWdyZWVtZW50VXJsIjoiaHR0cDovL2V4YW1wbGUuY29tL3RvcyIsImJhc2VVcmwiOiJodHRwczovL2Fzc2V0cy5icmFpbnRyZWVnYXRld2F5LmNvbSIsImFzc2V0c1VybCI6Imh0dHBzOi8vY2hlY2tvdXQucGF5cGFsLmNvbSIsImRpcmVjdEJhc2VVcmwiOm51bGwsImFsbG93SHR0cCI6dHJ1ZSwiZW52aXJvbm1lbnROb05ldHdvcmsiOnRydWUsImVudmlyb25tZW50Ijoib2ZmbGluZSIsInVudmV0dGVkTWVyY2hhbnQiOmZhbHNlLCJicmFpbnRyZWVDbGllbnRJZCI6Im1hc3RlcmNsaWVudDMiLCJiaWxsaW5nQWdyZWVtZW50c0VuYWJsZWQiOnRydWUsIm1lcmNoYW50QWNjb3VudElkIjoiYWNtZXdpZGdldHNsdGRzYW5kYm94IiwiY3VycmVuY3lJc29Db2RlIjoiVVNEIn0sIm1lcmNoYW50SWQiOiIzNDhwazljZ2YzYmd5dzJiIiwidmVubW8iOiJvZmYifQ==") + //.amount("CHF1.0") + //.requestThreeDSecureVerification(true) + .disableVenmo(); + + + switch (createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType()){ + case CREDIT_DEBIT_CARD: + paymentRequest.disableAndroidPay(); + paymentRequest.disablePayPal(); + break; + case PAYPAL: + paymentRequest.disableAndroidPay(); + break; + case ANDROID_PAY: + paymentRequest.disablePayPal(); + break; + } + startActivityForResult(paymentRequest.getIntent(BaseActivity.currentActivity), REQUEST_CODE_PAYMENT); + } + + private void startTwintPayment(){ + + } + } diff --git a/app/src/main/java/ch/pizzapp/android/model/PaymentMethodModel.java b/app/src/main/java/ch/pizzapp/android/model/PaymentMethodModel.java index 6c1eefd..8549e11 100644 --- a/app/src/main/java/ch/pizzapp/android/model/PaymentMethodModel.java +++ b/app/src/main/java/ch/pizzapp/android/model/PaymentMethodModel.java @@ -7,6 +7,8 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import ch.pizzapp.android.api.ApiConstants; + /** * Created by cimenmus on 17/10/2017. */ @@ -21,6 +23,17 @@ public class PaymentMethodModel { @Expose @SerializedName("sort_order") private String sortOrder; + public enum PaymentMethodType { + CREDIT_DEBIT_CARD, + CASH, + TRANSFER, + PAYPAL, + TWINT, + ANDROID_PAY, + APPLE_PAY, + UNKNOWN + } + private void checkNull(){ if(code == null) @@ -51,6 +64,28 @@ public class PaymentMethodModel { }); } + + public PaymentMethodType getPaymentMethodType() { + switch (code){ + case ApiConstants.PAYMENT_METHOD_CODE_CREDIT_DEBIT_CARD: + return PaymentMethodType.CREDIT_DEBIT_CARD; + case ApiConstants.PAYMENT_METHOD_CODE_BANK_CASH: + return PaymentMethodType.CASH; + case ApiConstants.PAYMENT_METHOD_CODE_TRANSFER: + return PaymentMethodType.TRANSFER; + case ApiConstants.PAYMENT_METHOD_CODE_PAYPAL: + return PaymentMethodType.PAYPAL; + case ApiConstants.PAYMENT_METHOD_CODE_TWINT: + return PaymentMethodType.TWINT; + case ApiConstants.PAYMENT_METHOD_CODE_ANDROID_PAY: + return PaymentMethodType.ANDROID_PAY; + case ApiConstants.PAYMENT_METHOD_CODE_APPLE_PAY: + return PaymentMethodType.APPLE_PAY; + default: + return PaymentMethodType.UNKNOWN; + } + } + public String getCode() { return code; } diff --git a/app/src/main/res/layout/activity_payment.xml b/app/src/main/res/layout/activity_payment.xml new file mode 100644 index 0000000..d70db3e --- /dev/null +++ b/app/src/main/res/layout/activity_payment.xml @@ -0,0 +1,9 @@ + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6e1cc8a..4dc58fe 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -171,6 +171,8 @@ ZAHLUNGSWEISE     ZWISCHENSUMME NACHRICHT + + Bilinmeyen ödeme yöntemi.