From 3a7482841d924e7315af0eecee07024f7b423f0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?mustafa=20ic=CC=A7men?= Date: Sat, 21 Dec 2019 23:58:31 +0300 Subject: [PATCH] - datatrans deleted - posfinance added --- .idea/caches/build_file_checksums.ser | Bin 542 -> 542 bytes .idea/caches/gradle_models.ser | Bin 317661 -> 315116 bytes app/build.gradle | 2 +- .../android/activity/CreateOrderActivity.java | 43 +- .../ch/pizzaleu/android/api/ApiConstants.java | 4 + .../ch/pizzaleu/android/api/ApiInterface.java | 10 - .../CreateOrderSummaryFragment.java | 375 +++++++----------- .../android/model/DatatransInitInfoModel.java | 31 -- .../PostfinancePaymentResponseModel.java | 34 ++ .../model/PostfinancePaymentSuccessModel.java | 55 +++ .../main/res/layout/activity_create_order.xml | 5 +- 11 files changed, 260 insertions(+), 299 deletions(-) delete mode 100644 app/src/main/java/ch/pizzaleu/android/model/DatatransInitInfoModel.java create mode 100644 app/src/main/java/ch/pizzaleu/android/model/PostfinancePaymentResponseModel.java create mode 100644 app/src/main/java/ch/pizzaleu/android/model/PostfinancePaymentSuccessModel.java diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 5c12e730d6e026bf5e2acde04621ac24b46e62ad..41db24a46a29f178cfae1888ca4f04a766b114dd 100644 GIT binary patch delta 50 zcmV-20L}lN1fB$tmj!PrUEoNuoG1a4@c}FcbN~=xaBwe^Zvhq&Im6uc_$U_P@Y)xu IXIjv_c;Z_X4*&oF delta 50 zcmV-20L}lN1fB$tmj!P7|Hmn@oG1a4@&OwY%GWbsMmuaX@a}+BX6#xDbN~^PK>-_+ I-~kW;cr8^FA^-pY diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser index 8c69107c944dabab54cf6c66e481849b691c4655..5964a1106ef92a19554b60c89b47a17696a82e7f 100644 GIT binary patch delta 24435 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 delta 26245 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 diff --git a/app/build.gradle b/app/build.gradle index 4d03e53..1fb734b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -92,6 +92,7 @@ dependencies { implementation 'io.nlopez.smartlocation:library:3.3.3' implementation 'q.rorbin:badgeview:1.1.0' implementation 'com.braintreepayments.api:braintree:2.22.0' + implementation 'org.jsoup:jsoup:1.11.1' implementation('com.braintreepayments.api:drop-in:3.7.1') { exclude group: 'com.braintreepayments.api', module: 'braintree' } @@ -99,7 +100,6 @@ dependencies { transitive = true } - implementation(name:'datatrans_payment_v3.5.1', ext:'aar') api 'com.google.guava:guava:26.0-android' testImplementation 'junit:junit:4.12' } diff --git a/app/src/main/java/ch/pizzaleu/android/activity/CreateOrderActivity.java b/app/src/main/java/ch/pizzaleu/android/activity/CreateOrderActivity.java index fb8edda..5d494d3 100644 --- a/app/src/main/java/ch/pizzaleu/android/activity/CreateOrderActivity.java +++ b/app/src/main/java/ch/pizzaleu/android/activity/CreateOrderActivity.java @@ -5,6 +5,7 @@ import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v7.widget.CardView; import android.view.View; +import android.webkit.WebView; import android.widget.FrameLayout; import com.badoualy.stepperindicator.StepperIndicator; @@ -31,7 +32,7 @@ import ch.pizzaleu.android.model.cart.CartInfoModel; public class CreateOrderActivity extends BaseActivity { @BindView(R.id.createOrderCardView) CardView createOrderCardView; - @BindView(R.id.paymentContainerLayout) FrameLayout paymentContainerLayout; + @BindView(R.id.paymentWebView) WebView paymentWebView; @BindView(R.id.stepperIndicator) StepperIndicator stepperIndicator; private FragmentManager fragmentManager; @@ -240,20 +241,30 @@ public class CreateOrderActivity extends BaseActivity { return orderNote; } - public void setPaymentLayoutVisibility(final boolean show){ - runOnUiThread(new Runnable() { - @Override - public void run() { - if(show){ - createOrderCardView.setVisibility(View.GONE); - paymentContainerLayout.setVisibility(View.VISIBLE); - } - else { - createOrderCardView.setVisibility(View.VISIBLE); - paymentContainerLayout.setVisibility(View.GONE); - } + public void setPaymentWebViewVisibility(final boolean show){ + if(show){ + createOrderCardView.setVisibility(View.GONE); + paymentWebView.setVisibility(View.VISIBLE); + } + else { + createOrderCardView.setVisibility(View.VISIBLE); + paymentWebView.setVisibility(View.GONE); + } + } + + @Override + public void onBackPressed() { + if(paymentWebView.getVisibility() == View.VISIBLE){ + if(paymentWebView.canGoBack()){ + paymentWebView.goBack(); } - }); + else{ + setPaymentWebViewVisibility(false); + } + } + else{ + super.onBackPressed(); + } } public void setOrderNote(String orderNote){ @@ -288,7 +299,7 @@ public class CreateOrderActivity extends BaseActivity { this.paymentMethodList = paymentMethodList; } - public FrameLayout getPaymentContainerLayout() { - return paymentContainerLayout; + public WebView getPaymentWebView() { + return paymentWebView; } } diff --git a/app/src/main/java/ch/pizzaleu/android/api/ApiConstants.java b/app/src/main/java/ch/pizzaleu/android/api/ApiConstants.java index a44f13d..56b4097 100644 --- a/app/src/main/java/ch/pizzaleu/android/api/ApiConstants.java +++ b/app/src/main/java/ch/pizzaleu/android/api/ApiConstants.java @@ -43,4 +43,8 @@ public class ApiConstants { public static final String ONESIGNAL_NOTIFICATION_TAG_KEY = "notificationAllowed"; public static final String ONESIGNAL_NOTIFICATION_TAG_VALUE = "true"; + public static final String PAYMENT_WEBVIEW_URL_POSTFINANCE_TWINT = "https://pizza-leu.ch/pizzaleu/index.php?route=mobile/service/postFinancePayment&order_id="; + public static final String PAYMENT_WEBVIEW_SUCCESS_POSTFINANCE_TWINT = "postFinancePaymentIsSuccess"; + public static final String PAYMENT_WEBVIEW_FAIL_POSTFINANCE_TWINT = "postFinancePaymentIsFailed"; + } diff --git a/app/src/main/java/ch/pizzaleu/android/api/ApiInterface.java b/app/src/main/java/ch/pizzaleu/android/api/ApiInterface.java index effa400..9541518 100644 --- a/app/src/main/java/ch/pizzaleu/android/api/ApiInterface.java +++ b/app/src/main/java/ch/pizzaleu/android/api/ApiInterface.java @@ -10,7 +10,6 @@ import ch.pizzaleu.android.model.CampaignBannerModel; import ch.pizzaleu.android.model.CampaignModel; import ch.pizzaleu.android.model.CheckCouponModel; import ch.pizzaleu.android.model.CountryModel; -import ch.pizzaleu.android.model.DatatransInitInfoModel; import ch.pizzaleu.android.model.DeleteAddressResponseModel; import ch.pizzaleu.android.model.PaymentMethodsResponseModel; import ch.pizzaleu.android.model.PaymentTokenModel; @@ -215,12 +214,6 @@ public interface ApiInterface { @POST Call createBraintreePayment(@Url String url, @FieldMap HashMap body); - - @FormUrlEncoded - @POST - Call createDatatransPayment(@Url String url, - @FieldMap HashMap body); - @FormUrlEncoded @POST Call repeatOrder(@Url String url, @@ -240,9 +233,6 @@ public interface ApiInterface { @GET Call> createBraintreePaymentToken(@Url String url); - @GET - Call> getDatatransInitInfoModel(@Url String url); - @GET(ApiEndPoints.API_GET_CAMPAIGN_BANNERS) Call> getCampaignBanners(); diff --git a/app/src/main/java/ch/pizzaleu/android/fragment/createOrder/CreateOrderSummaryFragment.java b/app/src/main/java/ch/pizzaleu/android/fragment/createOrder/CreateOrderSummaryFragment.java index f7d39ae..bb7b8f3 100644 --- a/app/src/main/java/ch/pizzaleu/android/fragment/createOrder/CreateOrderSummaryFragment.java +++ b/app/src/main/java/ch/pizzaleu/android/fragment/createOrder/CreateOrderSummaryFragment.java @@ -1,48 +1,53 @@ package ch.pizzaleu.android.fragment.createOrder; +import android.annotation.SuppressLint; +import android.annotation.TargetApi; import android.app.Activity; +import android.content.Context; import android.content.Intent; +import android.net.http.SslError; +import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; +import android.support.annotation.RequiresApi; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.Toast; +import android.webkit.JavascriptInterface; +import android.webkit.WebResourceError; +import android.webkit.WebResourceRequest; +import android.webkit.WebView; +import android.webkit.WebViewClient; 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.crashlytics.android.Crashlytics; import com.google.android.gms.wallet.Cart; +import com.google.gson.Gson; import com.wdullaer.materialdatetimepicker.date.DatePickerDialog; import com.wdullaer.materialdatetimepicker.time.TimePickerDialog; import com.wdullaer.materialdatetimepicker.time.Timepoint; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; -import java.util.Random; import butterknife.BindString; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; -import ch.datatrans.payment.AliasPaymentMethod; -import ch.datatrans.payment.BusinessException; -import ch.datatrans.payment.Payment; -import ch.datatrans.payment.PaymentMethod; -import ch.datatrans.payment.PaymentMethodType; -import ch.datatrans.payment.android.DisplayContext; -import ch.datatrans.payment.android.IPaymentProcessStateListener; -import ch.datatrans.payment.android.PaymentProcessAndroid; -import ch.datatrans.payment.android.ResourceProvider; import ch.pizzaleu.android.R; import ch.pizzaleu.android.activity.BaseActivity; import ch.pizzaleu.android.activity.CreateOrderActivity; @@ -57,9 +62,9 @@ import ch.pizzaleu.android.helper.DialogHelper; import ch.pizzaleu.android.helper.PriceHelper; import ch.pizzaleu.android.helper.SessionHelper; import ch.pizzaleu.android.helper.SharedPrefsHelper; -import ch.pizzaleu.android.model.DatatransInitInfoModel; import ch.pizzaleu.android.model.PaymentMethodModel; import ch.pizzaleu.android.model.PaymentTokenModel; +import ch.pizzaleu.android.model.PostfinancePaymentResponseModel; import ch.pizzaleu.android.model.StoreShiftModel; import ch.pizzaleu.android.model.cart.CartInfoModel; import ch.pizzaleu.android.model.cart.CartProductModel; @@ -73,7 +78,7 @@ import retrofit2.Response; * Created by cimenmus on 17/10/2017. */ -public class CreateOrderSummaryFragment extends CreateOrderBaseFragment implements IPaymentProcessStateListener { +public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { @BindView(R.id.orderPersonFullnamePizzalinkInfoLayout) AppInfoView orderPersonFullnamePizzalinkInfoLayout; @BindView(R.id.orderShippingMethodPizzalinkInfoLayout) AppInfoView orderShippingMethodPizzalinkInfoLayout; @@ -110,7 +115,6 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment implemen private ProductOnOrderSummaryRecyclerAdapter productOnOrderSummaryRecyclerAdapter; private StoreShiftModel storeShiftModel; private PaymentTokenModel braintreePaymentTokenModel; - private DatatransInitInfoModel datatransInitInfoModel; public CreateOrderSummaryFragment() {} @@ -524,14 +528,9 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment implemen createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TRANSFER){ createOrder(getCreateOrderParams(null)); } - else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.POST_FINANCE_CARD) { - DialogHelper.hideLoadingDialog(); - Toast.makeText(BaseActivity.currentActivity, "Post Finance payment has not been implemented yet.", Toast.LENGTH_LONG).show(); - } - else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT) { - DialogHelper.hideLoadingDialog(); - //startDatatransPayment(); - Toast.makeText(BaseActivity.currentActivity, "Twint payment has not been implemented yet.", Toast.LENGTH_LONG).show(); + else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.POST_FINANCE_CARD || + createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT) { + createOrder(getCreateOrderParams(null)); } else { DialogHelper.hideLoadingDialog(); @@ -548,7 +547,14 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment implemen public void onResponse(Call> call, Response> response) { DialogHelper.hideLoadingDialog(); if(response.isSuccessful() && response.body().isSuccess()){ - createOrderActivity.onNextClicked(FRAGMENT_NAME); + + if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.POST_FINANCE_CARD || + createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT){ + showPaymentWebView(response.body().getData()); + } + else { + createOrderActivity.onNextClicked(FRAGMENT_NAME); + } } else{ ApiErrorUtils.parseError(response); @@ -589,34 +595,6 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment implemen return params; } - // for datatrans payment - private HashMap getCreateOrderParams(String datatransTransactionId, String datatransPaymentMethodName){ - HashMap params = new HashMap<>(); - params.put("customer_id", SessionHelper.getUser().getId()); - params.put("shipping_method_title", createOrderActivity.getSelectedShippingMethod().getTitle()); - params.put("shipping_method_code", createOrderActivity.getSelectedShippingMethod().getCode()); - params.put("address_id", createOrderActivity.getSelectedShippingAddress().getId()); - params.put("payment_method_title", createOrderActivity.getSelectedPaymentMethod().getTitle()); - params.put("payment_method_code", createOrderActivity.getSelectedPaymentMethod().getCode()); - params.put("comment", createOrderNote()); - params.put("is_pizza_pass_campaign", createOrderActivity.getCartInfo().isPizzapassCampaignUsed()); - params.put("is_kebap_pass_campaign", createOrderActivity.getCartInfo().isKebappassCampaignUsed()); - params.put("application_id", ApiConstants.APP_TYPE_ID_ANDROID); - params.put("datatrans_merchant_id", datatransInitInfoModel.getMerchantId()); - params.put("datatrans_ref_no", datatransInitInfoModel.getReferenceNumber()); - params.put("datatrans_transaction_id", datatransTransactionId); - params.put("datatrans_payment_method_name", datatransPaymentMethodName); - - if(SessionHelper.getSelectedCoupon() != null){ - params.put("coupon", SessionHelper.getSelectedCoupon().getCode()); - } - if(dateOfOrderString != null && !dateOfOrderString.isEmpty() && - timeOfOrder != null && !timeOfOrder.isEmpty()){ - params.put("delivery_date", dateOfOrderString + " " + timeOfOrder); - } - return params; - } - private String createOrderNote(){ CreateOrderActivity createOrderActivity = (CreateOrderActivity) BaseActivity.currentActivity; @@ -752,7 +730,6 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment implemen fixCartTotalList(); orderPriceRecyclerAdapter.notifyDataSetChanged(); createBraintreePaymentToken(); - //getDatatransInitInfoModel(); } else { DialogHelper.hideLoadingDialog(); @@ -796,34 +773,6 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment implemen }); } - private void getDatatransInitInfoModel(){ - - Call> call = ApiService.apiInterface.getDatatransInitInfoModel( - "/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_GET_DATATRANS_INFO + SessionHelper.getCustomerToken().getToken()); - - call.enqueue(new Callback>() { - @Override - public void onResponse(Call> call, Response> response) { - DialogHelper.hideLoadingDialog(); - if(response.isSuccessful() && - response.body().getData() != null && - response.body().isSuccess()){ - datatransInitInfoModel = response.body().getData(); - Log.i("fuhrfuhruhfr", "fhurhfurfhurfh"); - } - else { - ApiErrorUtils.parseError(response); - } - } - - @Override - public void onFailure(Call> call, Throwable t) { - DialogHelper.hideLoadingDialog(); - DialogHelper.showFailedDialog(); - } - }); - } - private void startBraintreePayment(){ // CVV kodu default olarak gozukmuyor. @@ -871,131 +820,6 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment implemen startActivityForResult(paymentRequest.getIntent(BaseActivity.currentActivity), REQUEST_CODE_BRAINTREE_PAYMENT); } - private void startDatatransPayment(){ - - if(datatransInitInfoModel == null || - datatransInitInfoModel.getMerchantId().isEmpty() || - datatransInitInfoModel.getReferenceNumber().isEmpty()){ - /* - datatransInitInfoModel = new DatatransInitInfoModel( - ApiConstants.DATATRANS_MERCHANT_ID_TEST, - String.valueOf(Integer.valueOf(ApiConstants.DATATRANS_REFERENCE_NUMBER_TEST) + new Random().nextInt(1000))); - */ - DialogHelper.showAlertDialog(BaseActivity.currentActivity, getString(R.string.something_went_wrong)); - return; - } - - String currencyCode = "CHF"; - String amountString = PriceHelper.removeCurrencyFromPrice(cartTotalList.get(cartTotalList.size() - 1).getText()); - double amountDouble; - int amountInt; - try { - amountDouble = Double.valueOf(amountString); - amountDouble *= 100; // we have to multiply amount with 100 -> e.g. if amout is CHF 10, you have to send 10*100 = 1000 - amountInt = (int) amountDouble; - }catch (Exception e){ - e.printStackTrace(); - return; - } - String signature = null; - //DisplayContext displayContext = new DisplayContext(new ResourceProvider(), createOrderActivity); - DisplayContext displayContext = new DisplayContext(new ResourceProvider(), createOrderActivity.getPaymentContainerLayout()); - - // Payment method selection/input by library (standard mode) - Payment payment = new Payment(datatransInitInfoModel.getMerchantId(), datatransInitInfoModel.getReferenceNumber(), currencyCode, amountInt, signature); - ArrayList datatransPaymentMethods = new ArrayList<>(); - /* - datatransPaymentMethods.add(new PaymentMethod(PaymentMethodType.VISA)); - datatransPaymentMethods.add(new PaymentMethod(PaymentMethodType.MASTERCARD)); - datatransPaymentMethods.add(new PaymentMethod(PaymentMethodType.AMEX)); - datatransPaymentMethods.add(new PaymentMethod(PaymentMethodType.DINERS)); - datatransPaymentMethods.add(new PaymentMethod(PaymentMethodType.JCB)); - datatransPaymentMethods.add(new PaymentMethod(PaymentMethodType.PAYPAL)); - */ - - - if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT){ - datatransPaymentMethods.add(new PaymentMethod(PaymentMethodType.TWINT)); - } - else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.POST_FINANCE_CARD){ - datatransPaymentMethods.add(new PaymentMethod(PaymentMethodType.PFCARD)); - } - else { - return; - } - - PaymentProcessAndroid datatransPaymentProcess = new PaymentProcessAndroid(displayContext, payment, datatransPaymentMethods); - - /* - //Payment method preselected by app, input by library - PaymentMethodType selectedPaymentMethodType; - if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT){ - selectedPaymentMethodType = PaymentMethodType.TWINT; - } - else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.POST_FINANCE_CARD){ - selectedPaymentMethodType = PaymentMethodType.PFCARD; - } - else { - return; - } - AliasRequest aliasRequest = new AliasRequest(merchantId, currencyCode, new PaymentMethod(selectedPaymentMethodType)); - PaymentProcessAndroid datatransPaymentProcess = new PaymentProcessAndroid(displayContext, aliasRequest); - */ - - // common part - datatransPaymentProcess.setTestingEnabled(true); - datatransPaymentProcess.addStateListener(this); - datatransPaymentProcess.start(); - } - - @Override - public void paymentProcessStateChanged(final PaymentProcessAndroid datatransPaymentProcess) { - BaseActivity.currentActivity.runOnUiThread(new Runnable() { - @Override - public void run() { - switch (datatransPaymentProcess.getState()) { - - case STARTED: - createOrderActivity.setPaymentLayoutVisibility(true); - break; - - case NOT_STARTED: - createOrderActivity.setPaymentLayoutVisibility(false); - break; - - case COMPLETED: - createOrderActivity.setPaymentLayoutVisibility(false); - String transcationId = datatransPaymentProcess.getTransactionId(); - String paymentMethodName = datatransPaymentProcess.getPaymentMethodType().getName(); - AliasPaymentMethod aliasPaymentMethod = datatransPaymentProcess.getAliasPaymentMethod(); - if (aliasPaymentMethod != null) { - String json = aliasPaymentMethod.toJson(); - Log.i("dgyef", "vryf"); - // serialize and securely store aliasPaymentMethod for reuse - } - createDatatransPayment(transcationId, paymentMethodName); - break; - case CANCELED: - createOrderActivity.setPaymentLayoutVisibility(false); - DialogHelper.showAlertDialog(BaseActivity.currentActivity, paymentCanceledText); - break; - case ERROR: - createOrderActivity.setPaymentLayoutVisibility(false); - Exception e = datatransPaymentProcess.getException(); - if (e instanceof BusinessException) { - BusinessException be = (BusinessException)e; - int errorCode = be.getErrorCode();// Datatrans error code if needed - // display some error message - } else { - // unexpected technical exception, either fatal TechnicalException or // javax.net.ssl.SSLException (certificate error) - } - DialogHelper.showAlertDialog(BaseActivity.currentActivity, e.getMessage()); - break; - } - } - }); - } - private void createBraintreePayment(final DropInResult dropInResult){ DialogHelper.showLoadingDialog(); Call call = ApiService.apiInterface.createBraintreePayment( @@ -1023,40 +847,6 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment implemen }); } - private void createDatatransPayment(final String transactionId, final String datatransPaymentMethodName){ - DialogHelper.showLoadingDialog(); - - HashMap params = new HashMap<>(); - params.put("merchant_id", datatransInitInfoModel.getMerchantId()); - params.put("ref_no", datatransInitInfoModel.getReferenceNumber()); - params.put("transaction_id", transactionId); - params.put("datatrans_payment_method_name", datatransPaymentMethodName); - params.put("amount", PriceHelper.removeCurrencyFromPrice(createOrderActivity.getCartInfo().getCartTotalModel().getText())); - - Call call = ApiService.apiInterface.createDatatransPayment( - "/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_DATATRANS_PAYMENT + SessionHelper.getCustomerToken().getToken(), params); - 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(getCreateOrderParams(transactionId, datatransPaymentMethodName)); - } - else { - ApiErrorUtils.parseError(response); - } - } - - @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()); @@ -1318,6 +1108,69 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment implemen tempTotalList.clear(); } + private void showPaymentWebView(int orderId){ + createOrderActivity.setPaymentWebViewVisibility(true); + final WebView paymentWebView = createOrderActivity.getPaymentWebView(); + paymentWebView.setVisibility(View.VISIBLE); + paymentWebView.getSettings().setJavaScriptEnabled(true); + paymentWebView.setWebViewClient(new WebViewClient(){ + + @RequiresApi(Build.VERSION_CODES.N) + @Override + public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { + if(request.getUrl().toString().contains(ApiConstants.PAYMENT_WEBVIEW_SUCCESS_POSTFINANCE_TWINT) || + request.getUrl().toString().contains(ApiConstants.PAYMENT_WEBVIEW_FAIL_POSTFINANCE_TWINT)){ + createOrderActivity.setPaymentWebViewVisibility(false); + } + else if(request.getUrl().toString().equals("http://www.pizza-leu.ch/") || + request.getUrl().toString().equals("https://www.pizza-leu.ch/")){ + createOrderActivity.setPaymentWebViewVisibility(false); + createOrderActivity.onNextClicked(FRAGMENT_NAME); + } + else if(request.getUrl().toString().contains("http://www.pizza-leu.ch/") || + request.getUrl().toString().contains("https://www.pizza-leu.ch/")){ + createOrderActivity.setPaymentWebViewVisibility(false); + DialogHelper.showAlertDialog(BaseActivity.currentActivity, getString(R.string.error_message)); + } + return super.shouldOverrideUrlLoading(view, request); + } + + @SuppressWarnings("deprecation") + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + if(url.contains(ApiConstants.PAYMENT_WEBVIEW_SUCCESS_POSTFINANCE_TWINT) || + url.contains(ApiConstants.PAYMENT_WEBVIEW_FAIL_POSTFINANCE_TWINT)){ + createOrderActivity.setPaymentWebViewVisibility(false); + } + else if(url.equals("http://www.pizza-leu.ch/") || + url.equals("https://www.pizza-leu.ch/")){ + createOrderActivity.setPaymentWebViewVisibility(false); + createOrderActivity.onNextClicked(FRAGMENT_NAME); + } + else if(url.contains("http://www.pizza-leu.ch/") || url.contains("https://www.pizza-leu.ch/")){ + createOrderActivity.setPaymentWebViewVisibility(false); + DialogHelper.showAlertDialog(BaseActivity.currentActivity, getString(R.string.error_message)); + } + return super.shouldOverrideUrlLoading(view, url); + } + + @Override + public void onPageFinished(WebView view, String url) { + view.loadUrl("javascript:PaymentResponseHandler.handlePaymentResponse" + + "(''+document.getElementsByTagName('html')[0].innerHTML+'');"); + } + + @Override + public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { + super.onReceivedError(view, request, error); + DialogHelper.showAlertDialog(BaseActivity.currentActivity, getString(R.string.error_message)); + } + }); + + paymentWebView.loadUrl(ApiConstants.PAYMENT_WEBVIEW_URL_POSTFINANCE_TWINT + orderId); + paymentWebView.addJavascriptInterface(new PaymentJavaScriptInterface(getActivity()), "PaymentResponseHandler"); + } + private String fixEndTime(String endTime){ try { String[] time = endTime.split(":"); @@ -1345,4 +1198,48 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment implemen return endTime; } } + + class PaymentJavaScriptInterface { + + private Context ctx; + + PaymentJavaScriptInterface(Context ctx) { + this.ctx = ctx; + } + + @JavascriptInterface + public void handlePaymentResponse(String html) { + try{ + if(html.contains("success") && html.contains("message") && html.contains("error_code") && html.contains("data")){ + Document document = Jsoup.parse(html); + String json = document.getElementsByTag("pre").text(); + Gson gson = new Gson(); + PostfinancePaymentResponseModel postfinancePaymentResponseModel = gson.fromJson(json, PostfinancePaymentResponseModel.class); + + if(postfinancePaymentResponseModel.isSuccess()){ + createOrderActivity.onNextClicked(FRAGMENT_NAME); + } + else { + DialogHelper.showAlertDialog(BaseActivity.currentActivity, postfinancePaymentResponseModel.getMessage()); + } + + /* + final WebView paymentWebView = createOrderActivity.getPaymentWebView(); + paymentWebView.post(new Runnable() { + @Override + public void run() { + paymentWebView.removeJavascriptInterface("PaymentResponseHandler"); + paymentWebView.loadData("", "text/html", "UTF-8"); + paymentWebView.clearHistory(); + } + }); + */ + } + } + catch (Exception e){ + DialogHelper.showAlertDialog(BaseActivity.currentActivity, getString(R.string.error_message)); + Crashlytics.logException(e); + } + } + } } diff --git a/app/src/main/java/ch/pizzaleu/android/model/DatatransInitInfoModel.java b/app/src/main/java/ch/pizzaleu/android/model/DatatransInitInfoModel.java deleted file mode 100644 index f5c3c79..0000000 --- a/app/src/main/java/ch/pizzaleu/android/model/DatatransInitInfoModel.java +++ /dev/null @@ -1,31 +0,0 @@ -package ch.pizzaleu.android.model; - -import com.google.gson.annotations.SerializedName; - -public class DatatransInitInfoModel { - - @SerializedName("merchant_id") - private String merchantId; - - @SerializedName("ref_no") - private String referenceNumber; - - public DatatransInitInfoModel(String merchantId, String referenceNumber) { - this.merchantId = merchantId; - this.referenceNumber = referenceNumber; - } - - public String getMerchantId() { - if(merchantId == null){ - merchantId = ""; - } - return merchantId; - } - - public String getReferenceNumber() { - if(referenceNumber == null){ - referenceNumber = ""; - } - return referenceNumber; - } -} diff --git a/app/src/main/java/ch/pizzaleu/android/model/PostfinancePaymentResponseModel.java b/app/src/main/java/ch/pizzaleu/android/model/PostfinancePaymentResponseModel.java new file mode 100644 index 0000000..50ccdfa --- /dev/null +++ b/app/src/main/java/ch/pizzaleu/android/model/PostfinancePaymentResponseModel.java @@ -0,0 +1,34 @@ +package ch.pizzaleu.android.model; + +import com.google.gson.annotations.SerializedName; + +public class PostfinancePaymentResponseModel { + + private boolean success; + private String message; + + @SerializedName("error_code") + private int errorCode; + + @SerializedName("data") + private PostfinancePaymentSuccessModel paymentSuccessModel; + + public boolean isSuccess() { + return success; + } + + public String getMessage() { + if(message == null){ + message = ""; + } + return message; + } + + public int getErrorCode() { + return errorCode; + } + + public PostfinancePaymentSuccessModel getPaymentSuccessModel() { + return paymentSuccessModel; + } +} diff --git a/app/src/main/java/ch/pizzaleu/android/model/PostfinancePaymentSuccessModel.java b/app/src/main/java/ch/pizzaleu/android/model/PostfinancePaymentSuccessModel.java new file mode 100644 index 0000000..e54f72e --- /dev/null +++ b/app/src/main/java/ch/pizzaleu/android/model/PostfinancePaymentSuccessModel.java @@ -0,0 +1,55 @@ +package ch.pizzaleu.android.model; + +import com.google.gson.annotations.SerializedName; + +public class PostfinancePaymentSuccessModel { + + private String route; + + @SerializedName("orderID") + private String orderId; + + @SerializedName("PM") + private String paymentMethodName; + + @SerializedName("STATUS") + private String status; + + @SerializedName("PAYID") + private String paymentId; + + public String getRoute() { + if(route == null){ + route = ""; + } + return route; + } + + public String getOrderId() { + if(orderId == null){ + orderId = ""; + } + return orderId; + } + + public String getPaymentMethodName() { + if(paymentMethodName == null){ + paymentMethodName = ""; + } + return paymentMethodName; + } + + public String getStatus() { + if(status == null){ + status = ""; + } + return status; + } + + public String getPaymentId() { + if(paymentId == null){ + paymentId = ""; + } + return paymentId; + } +} diff --git a/app/src/main/res/layout/activity_create_order.xml b/app/src/main/res/layout/activity_create_order.xml index e155df6..de68c23 100644 --- a/app/src/main/res/layout/activity_create_order.xml +++ b/app/src/main/res/layout/activity_create_order.xml @@ -79,11 +79,12 @@ -