From 3fb62541ec9e8c574a9d9a11745cf124de5a2465 Mon Sep 17 00:00:00 2001 From: cimenmus Date: Thu, 14 Jun 2018 12:35:50 +0300 Subject: [PATCH] payment methods part 3 --- .idea/caches/build_file_checksums.ser | Bin 538 -> 538 bytes app/build.gradle | 1 + .../android/activity/CreateOrderActivity.java | 30 +++++ .../ch/pizzapp/android/api/ApiEndPoints.java | 1 + .../ch/pizzapp/android/api/ApiInterface.java | 4 + .../CreateOrderSummaryFragment.java | 123 +++++++++++++++--- .../createOrder/PaymentMethodFragment.java | 32 ++++- app/src/main/res/values/strings.xml | 2 + 8 files changed, 171 insertions(+), 22 deletions(-) diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index bb22a4584831de5eed6e388c02a3940f51e9637c..d3baaec653c47cf07189057af9ae892e7a0752a4 100644 GIT binary patch delta 33 rcmV++0N($a1eyepm<0WnV*9b2Z2=Kwz)per2jGud#{k>|Wu=&S1uPGu delta 33 rcmV++0N($a1eyepm<08F-deGoZ2=ME`uDZwO3R paymentMethodList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { @@ -185,6 +190,27 @@ public class CreateOrderActivity extends BaseActivity { this.selectedPaymentMethod = selectedPaymentMethod; } + public void setSelectedPaymentMethod(PaymentMethodType paymentMethodType){ + String paymentMethodCode = ""; + switch (paymentMethodType){ + case PAYPAL: + paymentMethodCode = ApiConstants.PAYMENT_METHOD_CODE_PAYPAL; + break; + case ANDROID_PAY: + paymentMethodCode = ApiConstants.PAYMENT_METHOD_CODE_ANDROID_PAY; + break; + default: + paymentMethodCode = ApiConstants.PAYMENT_METHOD_CODE_CREDIT_DEBIT_CARD; + break; + } + for(PaymentMethodModel paymentMethodModel : paymentMethodList){ + if(paymentMethodModel.getCode().equalsIgnoreCase(paymentMethodCode)){ + selectedPaymentMethod = paymentMethodModel; + break; + } + } + } + public String getOrderNote(){ if(orderNote == null) orderNote = ""; @@ -218,4 +244,8 @@ public class CreateOrderActivity extends BaseActivity { public void setCouponCode(String couponCode) { this.couponCode = couponCode; } + + public void setPaymentMethodList(ArrayList paymentMethodList) { + this.paymentMethodList = paymentMethodList; + } } diff --git a/app/src/main/java/ch/pizzapp/android/api/ApiEndPoints.java b/app/src/main/java/ch/pizzapp/android/api/ApiEndPoints.java index a697e7d..b28e9ae 100644 --- a/app/src/main/java/ch/pizzapp/android/api/ApiEndPoints.java +++ b/app/src/main/java/ch/pizzapp/android/api/ApiEndPoints.java @@ -39,4 +39,5 @@ public class ApiEndPoints { public static final String API_CHECK_CAMPAIGN_PIZZAPASS = PREFIX + "detectPizzaPassCampaign" + SUFFIX + "&token="; public static final String API_CHECK_CAMPAIGN_CHAMPAGNE = PREFIX + "detectChampagneCampaign" + SUFFIX + "&token="; public static final String API_CHECK_DELIVERY_TIME = PREFIX + "checkDeliveryTimeService" + SUFFIX + "&token="; + public static final String API_CREATE_PAYMENT = PREFIX + "createPayment" + SUFFIX + "&token="; } diff --git a/app/src/main/java/ch/pizzapp/android/api/ApiInterface.java b/app/src/main/java/ch/pizzapp/android/api/ApiInterface.java index 4fda877..af796a7 100644 --- a/app/src/main/java/ch/pizzapp/android/api/ApiInterface.java +++ b/app/src/main/java/ch/pizzapp/android/api/ApiInterface.java @@ -159,4 +159,8 @@ public interface ApiInterface { @GET(ApiEndPoints.API_CHECK_DELIVERY_TIME) Call> checkDeliveryTime(); + @FormUrlEncoded + @POST + Call> createPayment(@Url String url, @FieldMap HashMap body); + } 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 8343682..2403e6a 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 @@ -14,16 +14,8 @@ 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 com.google.android.gms.wallet.Cart; +import com.google.android.gms.wallet.LineItem; import java.util.ArrayList; import java.util.HashMap; @@ -83,10 +75,12 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { @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; + @BindString(R.string.payment_canceled) String paymentCanceledText; + @BindString(R.string.andorid_pay_not_found) String androidPayNotFoundText; 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 final int REQUEST_CODE_BRAINTREE_PAYMENT = 3784; private CreateOrderActivity createOrderActivity; public CreateOrderSummaryFragment() {} @@ -115,19 +109,20 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { BaseActivity.setCurrentActivity(createOrderActivity); getCartProducts(); } - else if (requestCode == REQUEST_CODE_PAYMENT) { + else if (requestCode == REQUEST_CODE_BRAINTREE_PAYMENT) { if (resultCode == Activity.RESULT_OK) { DropInResult result = data.getParcelableExtra(DropInResult.EXTRA_DROP_IN_RESULT); - Log.i("fjehfhreuf", "vjfjvjfv"); - //createOrder(); + createOrderActivity.setSelectedPaymentMethod(result.getPaymentMethodType()); + createBraintreePayment(result); // 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"); + DialogHelper.showAlertDialog(BaseActivity.currentActivity, paymentCanceledText); } else { // handle errors here, an exception may be available in Exception error = (Exception) data.getSerializableExtra(DropInActivity.EXTRA_ERROR); - Log.i("fjehfhreuf", "vjfjvjfv"); + DialogHelper.showAlertDialog(BaseActivity.currentActivity, error.getMessage()); } } } @@ -140,7 +135,6 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { createOrderActivity.onPreviousClicked(FRAGMENT_NAME); break; case R.id.nextTextView: - //createOrder(); checkPizzapassCampaign(); break; } @@ -359,7 +353,7 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { } else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.CASH || createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TRANSFER){ - createOrder(); + createOrder(null); } else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT) { DialogHelper.hideLoadingDialog(); @@ -387,14 +381,37 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { DialogHelper.hideLoadingDialog(); DialogHelper.showFailedDialog(); + + /* + // dummy // + + 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(null); + } + else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT) { + DialogHelper.hideLoadingDialog(); + startTwintPayment(); + } + else { + DialogHelper.hideLoadingDialog(); + startBraintreePayment(); + } + */ + + } }); } - private void createOrder(){ + private void createOrder(String paymentMethodNonce){ DialogHelper.showLoadingDialog(); Call> call = ApiService.apiInterface.createOrder( - ApiEndPoints.API_CREATE_ORDER + SessionHelper.getCustomerToken().getToken(), getCreateOrderParams()); + ApiEndPoints.API_CREATE_ORDER + SessionHelper.getCustomerToken().getToken(), getCreateOrderParams(paymentMethodNonce)); call.enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { @@ -415,7 +432,7 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { }); } - private HashMap getCreateOrderParams(){ + private HashMap getCreateOrderParams(String paymentMethodNonce){ HashMap params = new HashMap<>(); params.put("customer_id", SessionHelper.getUser().getId()); params.put("shipping_method_title", createOrderActivity.getSelectedShippingMethod().getTitle()); @@ -424,6 +441,9 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { params.put("payment_method_title", createOrderActivity.getSelectedPaymentMethod().getTitle()); params.put("payment_method_code", createOrderActivity.getSelectedPaymentMethod().getCode()); params.put("comment", createOrderNote()); + if(paymentMethodNonce != null){ + params.put("payment_method_nonce", paymentMethodNonce); + } return params; } @@ -512,13 +532,74 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { break; case ANDROID_PAY: paymentRequest.disablePayPal(); + if(getAndroidPayCart() == null){ + DialogHelper.showAlertDialog(BaseActivity.currentActivity, androidPayNotFoundText); + return; + } + else { + paymentRequest.androidPayCart(getAndroidPayCart()); + } break; } - startActivityForResult(paymentRequest.getIntent(BaseActivity.currentActivity), REQUEST_CODE_PAYMENT); + startActivityForResult(paymentRequest.getIntent(BaseActivity.currentActivity), REQUEST_CODE_BRAINTREE_PAYMENT); } private void startTwintPayment(){ } + private void createBraintreePayment(final DropInResult dropInResult){ + DialogHelper.showLoadingDialog(); + Call> call = ApiService.apiInterface.createPayment( + ApiEndPoints.API_CREATE_PAYMENT + SessionHelper.getCustomerToken().getToken(), + getBraintreePaymentParams(dropInResult)); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, final Response> response) { + DialogHelper.hideLoadingDialog(); + if(response.isSuccessful() && + response.body().getData() != null && + response.body().isSuccess()){ + createOrder(dropInResult.getPaymentMethodNonce().getNonce()); + } + else { + ApiErrorUtils.parseError(response); + /* + // dummy // + createOrder(dropInResult.getPaymentMethodNonce().getNonce()); + */ + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + DialogHelper.hideLoadingDialog(); + DialogHelper.showFailedDialog(); + } + }); + } + + private HashMap getBraintreePaymentParams(DropInResult dropInResult){ + HashMap params = new HashMap<>(); + params.put("payment_method_nonce", dropInResult.getPaymentMethodNonce().getNonce()); + return params; + } + + private Cart getAndroidPayCart() { + return Cart.newBuilder() + .setCurrencyCode("CHF") + .setTotalPrice(PriceHelper.removeCurrencyFromPrice(createOrderActivity.getCartInfo().getCartTotalModel().getText())) + /* + .addLineItem(LineItem.newBuilder() + .setCurrencyCode("CHF") + .setDescription("Description") + .setQuantity("1") + .setUnitPrice("1.00") + .setTotalPrice("1.00") + .build()) + */ + .build(); + } + + } diff --git a/app/src/main/java/ch/pizzapp/android/fragment/createOrder/PaymentMethodFragment.java b/app/src/main/java/ch/pizzapp/android/fragment/createOrder/PaymentMethodFragment.java index 4d07c3b..4bad151 100644 --- a/app/src/main/java/ch/pizzapp/android/fragment/createOrder/PaymentMethodFragment.java +++ b/app/src/main/java/ch/pizzapp/android/fragment/createOrder/PaymentMethodFragment.java @@ -7,6 +7,8 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import com.google.android.gms.common.api.Api; + import java.util.ArrayList; import butterknife.BindString; @@ -17,6 +19,7 @@ import ch.pizzapp.android.R; import ch.pizzapp.android.activity.BaseActivity; import ch.pizzapp.android.activity.CreateOrderActivity; import ch.pizzapp.android.adapter.recycler.PaymentMethodsRecyclerAdapter; +import ch.pizzapp.android.api.ApiConstants; import ch.pizzapp.android.api.ApiEndPoints; import ch.pizzapp.android.api.ApiErrorUtils; import ch.pizzapp.android.api.ApiService; @@ -140,12 +143,38 @@ public class PaymentMethodFragment extends CreateOrderBaseFragment { private void fillAndNotifyAdapter(ArrayList paymentMethodModels){ PaymentMethodModel.checkNull(paymentMethodModels); + for(PaymentMethodModel paymentMethodModel : paymentMethodModels){ + if(paymentMethodModel.getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.APPLE_PAY){ + paymentMethodModels.remove(paymentMethodModel); + } + } + + + /* + // dummy // + PaymentMethodModel paypal = new PaymentMethodModel(); + paypal.setCode(ApiConstants.PAYMENT_METHOD_CODE_PAYPAL); + paypal.setTitle("PAYPAL"); + paypal.setSortOrder("0"); + paymentMethodModels.add(paypal); + */ + + /* + // dummy // + PaymentMethodModel androidPay = new PaymentMethodModel(); + androidPay.setCode(ApiConstants.PAYMENT_METHOD_CODE_ANDROID_PAY); + androidPay.setTitle("Android Pay"); + androidPay.setSortOrder("0"); + paymentMethodModels.add(androidPay); + */ + + PaymentMethodModel.sort(paymentMethodModels); paymentMethodList.clear(); paymentMethodList.addAll(paymentMethodModels); + CreateOrderActivity createOrderActivity = (CreateOrderActivity) getActivity(); if(paymentMethodList.size() != 0){ - CreateOrderActivity createOrderActivity = (CreateOrderActivity) getActivity(); if(createOrderActivity.getSelectedPaymentMethod() == null){ paymentMethodList.get(0).setSelected(true); selectedPaymentMethod = paymentMethodList.get(0); @@ -161,6 +190,7 @@ public class PaymentMethodFragment extends CreateOrderBaseFragment { } } + createOrderActivity.setPaymentMethodList(paymentMethodList); paymentMethodsRecyclerAdapter.notifyDataSetChanged(); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4dc58fe..95b3d34 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -173,6 +173,8 @@ NACHRICHT Bilinmeyen ödeme yöntemi. + Ödeme işlemi iptal edildi. + Android Pay Card not found.