datatrans payment library integrated for twint and postfinance

This commit is contained in:
2019-12-08 18:36:14 +03:00
parent 9669c92c34
commit 551c095c34
15 changed files with 329 additions and 34 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -96,9 +96,10 @@ dependencies {
exclude group: 'com.braintreepayments.api', module: 'braintree' exclude group: 'com.braintreepayments.api', module: 'braintree'
} }
implementation('com.crashlytics.sdk.android:crashlytics:2.9.4@aar') { implementation('com.crashlytics.sdk.android:crashlytics:2.9.4@aar') {
transitive = true; transitive = true
} }
implementation(name:'datatrans_payment_v3.5.1', ext:'aar')
api 'com.google.guava:guava:26.0-android' api 'com.google.guava:guava:26.0-android'
testImplementation 'junit:junit:4.12' testImplementation 'junit:junit:4.12'
} }

Binary file not shown.

View File

@@ -3,6 +3,9 @@ package ch.pizzaleu.android.activity;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
import android.support.v7.widget.CardView;
import android.view.View;
import android.widget.FrameLayout;
import com.badoualy.stepperindicator.StepperIndicator; import com.badoualy.stepperindicator.StepperIndicator;
import com.braintreepayments.api.dropin.utils.PaymentMethodType; import com.braintreepayments.api.dropin.utils.PaymentMethodType;
@@ -27,6 +30,8 @@ import ch.pizzaleu.android.model.cart.CartInfoModel;
public class CreateOrderActivity extends BaseActivity { public class CreateOrderActivity extends BaseActivity {
@BindView(R.id.createOrderCardView) CardView createOrderCardView;
@BindView(R.id.paymentContainerLayout) FrameLayout paymentContainerLayout;
@BindView(R.id.stepperIndicator) StepperIndicator stepperIndicator; @BindView(R.id.stepperIndicator) StepperIndicator stepperIndicator;
private FragmentManager fragmentManager; private FragmentManager fragmentManager;
@@ -235,6 +240,22 @@ public class CreateOrderActivity extends BaseActivity {
return orderNote; 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 setOrderNote(String orderNote){ public void setOrderNote(String orderNote){
this.orderNote = orderNote; this.orderNote = orderNote;
} }
@@ -266,4 +287,8 @@ public class CreateOrderActivity extends BaseActivity {
public void setPaymentMethodList(ArrayList<PaymentMethodModel> paymentMethodList) { public void setPaymentMethodList(ArrayList<PaymentMethodModel> paymentMethodList) {
this.paymentMethodList = paymentMethodList; this.paymentMethodList = paymentMethodList;
} }
public FrameLayout getPaymentContainerLayout() {
return paymentContainerLayout;
}
} }

View File

@@ -21,9 +21,15 @@ public class ApiConstants {
public static final String PAYMENT_METHOD_CODE_TRANSFER = "bank_transfer"; // Kreditkarten-Kartenzahlung 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_TWINT = "twintcw_twint"; // TWINT
public static final String PAYMENT_METHOD_CODE_PAYPAL = "pp_standard"; public static final String PAYMENT_METHOD_CODE_PAYPAL = "pp_standard";
public static final String PAYMENT_METHOD_CODE_POST_FINANCE_CARD = "postfinancecw_postfinancecard";
public static final String PAYMENT_METHOD_CODE_ANDROID_PAY = "android_pay"; public static final String PAYMENT_METHOD_CODE_ANDROID_PAY = "android_pay";
public static final String PAYMENT_METHOD_CODE_APPLE_PAY = "apple_pay"; public static final String PAYMENT_METHOD_CODE_APPLE_PAY = "apple_pay";
public static final String DATATRANS_MERCHANT_ID_TEST = "1100004450"; // Taken from Datatrans sample app
//public static final String DATATRANS_MERCHANT_ID_TEST = "1100020808"; // taken from Datatrans sandbox Demo Pusula Media GmbH
public static final String DATATRANS_REFERENCE_NUMBER_TEST = "968927"; // Taken from Datatrans sample app
public static final String DATATRANS_SIGNATURE_TEST = "30916165706580013"; // Taken from Datatrans sample app
public static final String SHIPPING_METHOD_CODE_PICK_UP_FROM_STORE = "pickup.pickup"; public static final String SHIPPING_METHOD_CODE_PICK_UP_FROM_STORE = "pickup.pickup";
public static final String CART_SUBTOTAL = "zwischensumme"; public static final String CART_SUBTOTAL = "zwischensumme";

View File

@@ -45,9 +45,11 @@ public class ApiEndPoints {
public static final String API_REMOVE_RPODUCT_FORM_CART = PREFIX + "removeProductFromBasket" + SUFFIX + "&token="; public static final String API_REMOVE_RPODUCT_FORM_CART = PREFIX + "removeProductFromBasket" + SUFFIX + "&token=";
public static final String API_GET_ORDER_PRODUCT_LIST = PREFIX + "getOrderProducts" + SUFFIX + "&token="; public static final String API_GET_ORDER_PRODUCT_LIST = PREFIX + "getOrderProducts" + SUFFIX + "&token=";
public static final String API_CHECK_COUPON = PREFIX + "checkCoupon" + SUFFIX + "&token="; public static final String API_CHECK_COUPON = PREFIX + "checkCoupon" + SUFFIX + "&token=";
public static final String API_CREATE_PAYMENT = PREFIX + "checkBrainTreePayment" + SUFFIX + "&token="; public static final String API_CREATE_BRAINTREE_PAYMENT = PREFIX + "checkBrainTreePayment" + SUFFIX + "&token=";
public static final String API_REPEAT_ORDER = PREFIX + "reOrder" + SUFFIX + "&token="; public static final String API_REPEAT_ORDER = PREFIX + "reOrder" + SUFFIX + "&token=";
public static final String API_CHECK_ORDER_PRICE = PREFIX + "checkOrderPrice" + SUFFIX + "&token="; public static final String API_CHECK_ORDER_PRICE = PREFIX + "checkOrderPrice" + SUFFIX + "&token=";
public static final String API_CREATE_PAYMENT_TOKEN = PREFIX + "createPaymentToken" + SUFFIX + "&token="; public static final String API_CREATE_BRAINTREE_PAYMENT_TOKEN = PREFIX + "createBraintreePaymentToken" + SUFFIX + "&token=";
public static final String API_GET_DATATRANS_INFO = PREFIX + "getDatatransInfo" + SUFFIX + "&token=";
public static final String API_CREATE_DATATRANS_PAYMENT = PREFIX + "checkDatatransPayment" + SUFFIX + "&token=";
} }

View File

@@ -10,6 +10,7 @@ import ch.pizzaleu.android.model.CampaignBannerModel;
import ch.pizzaleu.android.model.CampaignModel; import ch.pizzaleu.android.model.CampaignModel;
import ch.pizzaleu.android.model.CheckCouponModel; import ch.pizzaleu.android.model.CheckCouponModel;
import ch.pizzaleu.android.model.CountryModel; import ch.pizzaleu.android.model.CountryModel;
import ch.pizzaleu.android.model.DatatransInitInfoModel;
import ch.pizzaleu.android.model.DeleteAddressResponseModel; import ch.pizzaleu.android.model.DeleteAddressResponseModel;
import ch.pizzaleu.android.model.PaymentMethodsResponseModel; import ch.pizzaleu.android.model.PaymentMethodsResponseModel;
import ch.pizzaleu.android.model.PaymentTokenModel; import ch.pizzaleu.android.model.PaymentTokenModel;
@@ -212,7 +213,12 @@ public interface ApiInterface {
@FormUrlEncoded @FormUrlEncoded
@POST @POST
Call<ResponseObject> createPayment(@Url String url, Call<ResponseObject> createBraintreePayment(@Url String url,
@FieldMap HashMap<String, Object> body);
@FormUrlEncoded
@POST
Call<ResponseObject> createDatatransPayment(@Url String url,
@FieldMap HashMap<String, Object> body); @FieldMap HashMap<String, Object> body);
@FormUrlEncoded @FormUrlEncoded
@@ -232,7 +238,10 @@ public interface ApiInterface {
@FieldMap HashMap<String, Object> body); @FieldMap HashMap<String, Object> body);
@GET @GET
Call<ResponseObject<PaymentTokenModel>> createPaymentToken(@Url String url); Call<ResponseObject<PaymentTokenModel>> createBraintreePaymentToken(@Url String url);
@GET
Call<ResponseObject<DatatransInitInfoModel>> getDatatransInitInfoModel(@Url String url);
@GET(ApiEndPoints.API_GET_CAMPAIGN_BANNERS) @GET(ApiEndPoints.API_GET_CAMPAIGN_BANNERS)
Call<ResponseArray<CampaignBannerModel>> getCampaignBanners(); Call<ResponseArray<CampaignBannerModel>> getCampaignBanners();

View File

@@ -27,11 +27,21 @@ import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Random;
import butterknife.BindString; import butterknife.BindString;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; 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.R;
import ch.pizzaleu.android.activity.BaseActivity; import ch.pizzaleu.android.activity.BaseActivity;
import ch.pizzaleu.android.activity.CreateOrderActivity; import ch.pizzaleu.android.activity.CreateOrderActivity;
@@ -46,6 +56,7 @@ import ch.pizzaleu.android.helper.DialogHelper;
import ch.pizzaleu.android.helper.PriceHelper; import ch.pizzaleu.android.helper.PriceHelper;
import ch.pizzaleu.android.helper.SessionHelper; import ch.pizzaleu.android.helper.SessionHelper;
import ch.pizzaleu.android.helper.SharedPrefsHelper; import ch.pizzaleu.android.helper.SharedPrefsHelper;
import ch.pizzaleu.android.model.DatatransInitInfoModel;
import ch.pizzaleu.android.model.PaymentMethodModel; import ch.pizzaleu.android.model.PaymentMethodModel;
import ch.pizzaleu.android.model.PaymentTokenModel; import ch.pizzaleu.android.model.PaymentTokenModel;
import ch.pizzaleu.android.model.StoreShiftModel; import ch.pizzaleu.android.model.StoreShiftModel;
@@ -61,7 +72,7 @@ import retrofit2.Response;
* Created by cimenmus on 17/10/2017. * Created by cimenmus on 17/10/2017.
*/ */
public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { public class CreateOrderSummaryFragment extends CreateOrderBaseFragment implements IPaymentProcessStateListener {
@BindView(R.id.orderPersonFullnamePizzalinkInfoLayout) AppInfoView orderPersonFullnamePizzalinkInfoLayout; @BindView(R.id.orderPersonFullnamePizzalinkInfoLayout) AppInfoView orderPersonFullnamePizzalinkInfoLayout;
@BindView(R.id.orderShippingMethodPizzalinkInfoLayout) AppInfoView orderShippingMethodPizzalinkInfoLayout; @BindView(R.id.orderShippingMethodPizzalinkInfoLayout) AppInfoView orderShippingMethodPizzalinkInfoLayout;
@@ -98,6 +109,7 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
private ProductOnOrderSummaryRecyclerAdapter productOnOrderSummaryRecyclerAdapter; private ProductOnOrderSummaryRecyclerAdapter productOnOrderSummaryRecyclerAdapter;
private StoreShiftModel storeShiftModel; private StoreShiftModel storeShiftModel;
private PaymentTokenModel braintreePaymentTokenModel; private PaymentTokenModel braintreePaymentTokenModel;
private DatatransInitInfoModel datatransInitInfoModel;
public CreateOrderSummaryFragment() {} public CreateOrderSummaryFragment() {}
@@ -359,7 +371,7 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
} }
else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT) { else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT) {
DialogHelper.hideLoadingDialog(); DialogHelper.hideLoadingDialog();
startTwintPayment(); startDatatransPayment();
} }
else { else {
DialogHelper.hideLoadingDialog(); DialogHelper.hideLoadingDialog();
@@ -535,22 +547,21 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TRANSFER){ createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TRANSFER){
createOrder(null); createOrder(null);
} }
/* else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT ||
else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT) { createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.POST_FINANCE_CARD) {
DialogHelper.hideLoadingDialog(); DialogHelper.hideLoadingDialog();
startTwintPayment(); startDatatransPayment();
} }
*/
else { else {
DialogHelper.hideLoadingDialog(); DialogHelper.hideLoadingDialog();
startBraintreePayment(); startBraintreePayment();
} }
} }
private void createOrder(String paymentMethodNonce){ private void createOrder(HashMap<String, Object> params){
DialogHelper.showLoadingDialog(); DialogHelper.showLoadingDialog();
Call<ResponseObject<Integer>> call = ApiService.apiInterface.createOrder( Call<ResponseObject<Integer>> call = ApiService.apiInterface.createOrder(
"/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_ORDER + SessionHelper.getCustomerToken().getToken(), getCreateOrderParams(paymentMethodNonce)); "/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_ORDER + SessionHelper.getCustomerToken().getToken(), params);
call.enqueue(new Callback<ResponseObject<Integer>>() { call.enqueue(new Callback<ResponseObject<Integer>>() {
@Override @Override
public void onResponse(Call<ResponseObject<Integer>> call, Response<ResponseObject<Integer>> response) { public void onResponse(Call<ResponseObject<Integer>> call, Response<ResponseObject<Integer>> response) {
@@ -571,6 +582,7 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
}); });
} }
// for braintree payment
private HashMap<String, Object> getCreateOrderParams(String paymentMethodNonce){ private HashMap<String, Object> getCreateOrderParams(String paymentMethodNonce){
HashMap<String, Object> params = new HashMap<>(); HashMap<String, Object> params = new HashMap<>();
params.put("customer_id", SessionHelper.getUser().getId()); params.put("customer_id", SessionHelper.getUser().getId());
@@ -596,6 +608,34 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
return params; return params;
} }
// for datatrans payment
private HashMap<String, Object> getCreateOrderParams(String datatransTransactionId, String datatransPaymentMethodName){
HashMap<String, Object> 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(){ private String createOrderNote(){
CreateOrderActivity createOrderActivity = (CreateOrderActivity) BaseActivity.currentActivity; CreateOrderActivity createOrderActivity = (CreateOrderActivity) BaseActivity.currentActivity;
@@ -729,7 +769,8 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
cartTotalList.clear(); cartTotalList.clear();
cartTotalList.addAll(cartInfoModel.getTotalsList()); cartTotalList.addAll(cartInfoModel.getTotalsList());
orderPriceRecyclerAdapter.notifyDataSetChanged(); orderPriceRecyclerAdapter.notifyDataSetChanged();
createPaymentToken(); createBraintreePaymentToken();
getDatatransInitInfoModel();
} }
else { else {
DialogHelper.hideLoadingDialog(); DialogHelper.hideLoadingDialog();
@@ -745,10 +786,10 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
}); });
} }
private void createPaymentToken(){ private void createBraintreePaymentToken(){
Call<ResponseObject<PaymentTokenModel>> call = ApiService.apiInterface.createPaymentToken( Call<ResponseObject<PaymentTokenModel>> call = ApiService.apiInterface.createBraintreePaymentToken(
"/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_PAYMENT_TOKEN + SessionHelper.getCustomerToken().getToken()); "/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_BRAINTREE_PAYMENT_TOKEN + SessionHelper.getCustomerToken().getToken());
call.enqueue(new Callback<ResponseObject<PaymentTokenModel>>() { call.enqueue(new Callback<ResponseObject<PaymentTokenModel>>() {
@Override @Override
@@ -773,6 +814,34 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
}); });
} }
private void getDatatransInitInfoModel(){
Call<ResponseObject<DatatransInitInfoModel>> call = ApiService.apiInterface.getDatatransInitInfoModel(
"/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_GET_DATATRANS_INFO + SessionHelper.getCustomerToken().getToken());
call.enqueue(new Callback<ResponseObject<DatatransInitInfoModel>>() {
@Override
public void onResponse(Call<ResponseObject<DatatransInitInfoModel>> call, Response<ResponseObject<DatatransInitInfoModel>> 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<ResponseObject<DatatransInitInfoModel>> call, Throwable t) {
DialogHelper.hideLoadingDialog();
DialogHelper.showFailedDialog();
}
});
}
private void startBraintreePayment(){ private void startBraintreePayment(){
// CVV kodu default olarak gozukmuyor. // CVV kodu default olarak gozukmuyor.
@@ -820,14 +889,130 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
startActivityForResult(paymentRequest.getIntent(BaseActivity.currentActivity), REQUEST_CODE_BRAINTREE_PAYMENT); startActivityForResult(paymentRequest.getIntent(BaseActivity.currentActivity), REQUEST_CODE_BRAINTREE_PAYMENT);
} }
private void startTwintPayment(){ 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<PaymentMethod> 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(PaymentProcessAndroid datatransPaymentProcess) {
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){ private void createBraintreePayment(final DropInResult dropInResult){
DialogHelper.showLoadingDialog(); DialogHelper.showLoadingDialog();
Call<ResponseObject> call = ApiService.apiInterface.createPayment( Call<ResponseObject> call = ApiService.apiInterface.createBraintreePayment(
"/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_PAYMENT + SessionHelper.getCustomerToken().getToken(), "/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_BRAINTREE_PAYMENT + SessionHelper.getCustomerToken().getToken(),
getBraintreePaymentParams(dropInResult)); getBraintreePaymentParams(dropInResult));
call.enqueue(new Callback<ResponseObject>() { call.enqueue(new Callback<ResponseObject>() {
@Override @Override
@@ -836,14 +1021,44 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
if(response.isSuccessful() && if(response.isSuccessful() &&
response.body().getData() != null && response.body().getData() != null &&
response.body().isSuccess()){ response.body().isSuccess()){
createOrder(dropInResult.getPaymentMethodNonce().getNonce()); createOrder(getCreateOrderParams(dropInResult.getPaymentMethodNonce().getNonce()));
}
else {
ApiErrorUtils.parseError(response);
}
}
@Override
public void onFailure(Call<ResponseObject> call, Throwable t) {
DialogHelper.hideLoadingDialog();
DialogHelper.showFailedDialog();
}
});
}
private void createDatatransPayment(final String transactionId, final String datatransPaymentMethodName){
DialogHelper.showLoadingDialog();
HashMap<String, Object> 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<ResponseObject> call = ApiService.apiInterface.createDatatransPayment(
"/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_DATATRANS_PAYMENT + SessionHelper.getCustomerToken().getToken(), params);
call.enqueue(new Callback<ResponseObject>() {
@Override
public void onResponse(Call<ResponseObject> call, final Response<ResponseObject> response) {
DialogHelper.hideLoadingDialog();
if(response.isSuccessful() &&
response.body().getData() != null &&
response.body().isSuccess()){
createOrder(getCreateOrderParams(transactionId, datatransPaymentMethodName));
} }
else { else {
ApiErrorUtils.parseError(response); ApiErrorUtils.parseError(response);
/*
// dummy //
createOrder(dropInResult.getPaymentMethodNonce().getNonce());
*/
} }
} }
@@ -1129,5 +1344,4 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
return endTime; return endTime;
} }
} }
} }

View File

@@ -160,13 +160,6 @@ public class PaymentMethodFragment extends CreateOrderBaseFragment {
} }
} }
for(PaymentMethodModel paymentMethodModel : paymentMethodModels){
if(paymentMethodModel.getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT){
paymentMethodModels.remove(paymentMethodModel);
break;
}
}
/* /*
// dummy // // dummy //

View File

@@ -0,0 +1,31 @@
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;
}
}

View File

@@ -29,6 +29,7 @@ public class PaymentMethodModel {
TRANSFER, TRANSFER,
PAYPAL, PAYPAL,
TWINT, TWINT,
POST_FINANCE_CARD,
ANDROID_PAY, ANDROID_PAY,
APPLE_PAY, APPLE_PAY,
UNKNOWN UNKNOWN
@@ -77,6 +78,8 @@ public class PaymentMethodModel {
return PaymentMethodType.PAYPAL; return PaymentMethodType.PAYPAL;
case ApiConstants.PAYMENT_METHOD_CODE_TWINT: case ApiConstants.PAYMENT_METHOD_CODE_TWINT:
return PaymentMethodType.TWINT; return PaymentMethodType.TWINT;
case ApiConstants.PAYMENT_METHOD_CODE_POST_FINANCE_CARD:
return PaymentMethodType.POST_FINANCE_CARD;
case ApiConstants.PAYMENT_METHOD_CODE_ANDROID_PAY: case ApiConstants.PAYMENT_METHOD_CODE_ANDROID_PAY:
return PaymentMethodType.ANDROID_PAY; return PaymentMethodType.ANDROID_PAY;
case ApiConstants.PAYMENT_METHOD_CODE_APPLE_PAY: case ApiConstants.PAYMENT_METHOD_CODE_APPLE_PAY:

View File

@@ -31,6 +31,7 @@
android:src="@drawable/background_wood" /> android:src="@drawable/background_wood" />
<android.support.v7.widget.CardView <android.support.v7.widget.CardView
android:id="@+id/createOrderCardView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/white" android:background="@color/white"
@@ -78,6 +79,13 @@
</android.support.v7.widget.CardView> </android.support.v7.widget.CardView>
<FrameLayout
android:id="@+id/paymentContainerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:visibility="gone"/>
</RelativeLayout> </RelativeLayout>
</RelativeLayout> </RelativeLayout>

View File

@@ -21,6 +21,9 @@ allprojects {
maven { url 'https://jitpack.io' } maven { url 'https://jitpack.io' }
maven { url "https://maven.google.com" } maven { url "https://maven.google.com" }
google() google()
flatDir {
dirs 'libs'
}
} }
} }

Binary file not shown.