3dsecure part 1

This commit is contained in:
2019-03-14 23:43:07 +03:00
parent 33fb6702c0
commit 02ff66bd16
14 changed files with 77 additions and 84 deletions

View File

@@ -1,32 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="WizardSettings">
<option name="children">
<map>
<entry key="vectorWizard">
<value>
<PersistentState>
<option name="children">
<map>
<entry key="vectorAssetStep">
<value>
<PersistentState>
<option name="values">
<map>
<entry key="assetSourceType" value="FILE" />
<entry key="outputName" value="ic_gift" />
<entry key="sourceFile" value="$USER_HOME$/Downloads/toxic-warning-sign.svg" />
</map>
</option>
</PersistentState>
</value>
</entry>
</map>
</option>
</PersistentState>
</value>
</entry>
</map>
</option>
</component>
</project>

Binary file not shown.

Binary file not shown.

8
.idea/compiler.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
</annotationProcessing>
</component>
</project>

6
.idea/gradle.xml generated
View File

@@ -8,12 +8,6 @@
</compositeConfiguration>
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
</GradleProjectSettings>
</option>

35
.idea/misc.xml generated
View File

@@ -1,40 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="NullableNotNullManager">
<option name="myDefaultNullable" value="android.support.annotation.Nullable" />
<option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
<option name="myNullables">
<value>
<list size="10">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
<item index="2" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" />
<item index="3" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
<item index="4" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
<item index="5" class="java.lang.String" itemvalue="androidx.annotation.Nullable" />
<item index="6" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNullable" />
<item index="7" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.Nullable" />
<item index="8" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableDecl" />
<item index="9" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableType" />
</list>
</value>
</option>
<option name="myNotNulls">
<value>
<list size="9">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
<item index="4" class="java.lang.String" itemvalue="androidx.annotation.NonNull" />
<item index="5" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNonNull" />
<item index="6" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.NonNull" />
<item index="7" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullDecl" />
<item index="8" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullType" />
</list>
</value>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>

2
.idea/vcs.xml generated
View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@@ -91,8 +91,8 @@ dependencies {
implementation 'com.wdullaer:materialdatetimepicker:3.6.3'
implementation 'io.nlopez.smartlocation:library:3.3.3'
implementation 'q.rorbin:badgeview:1.1.0'
implementation 'com.braintreepayments.api:braintree:2.13.1'
implementation('com.braintreepayments.api:drop-in:3.1.0') {
implementation 'com.braintreepayments.api:braintree:2.22.0'
implementation('com.braintreepayments.api:drop-in:3.7.1') {
exclude group: 'com.braintreepayments.api', module: 'braintree'
}
implementation('com.crashlytics.sdk.android:crashlytics:2.9.4@aar') {

View File

@@ -49,5 +49,6 @@ public class ApiEndPoints {
public static final String API_CREATE_PAYMENT = PREFIX + "checkBrainTreePayment" + 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_CREATE_PAYMENT_TOKEN = PREFIX + "createPaymentToken" + SUFFIX + "&token=";
}

View File

@@ -11,6 +11,7 @@ import ch.pizzapp.android.model.CheckCouponModel;
import ch.pizzapp.android.model.CountryModel;
import ch.pizzapp.android.model.DeleteAddressResponseModel;
import ch.pizzapp.android.model.PaymentMethodsResponseModel;
import ch.pizzapp.android.model.PaymentTokenModel;
import ch.pizzapp.android.model.RemoveProductFromCartResponseModel;
import ch.pizzapp.android.model.ShippingMethodModel;
import ch.pizzapp.android.model.StoreInfoModel;
@@ -229,6 +230,8 @@ public interface ApiInterface {
Call<ResponseObject> checkOrderPrice(@Url String url,
@FieldMap HashMap<String, Object> body);
@GET
Call<ResponseObject<PaymentTokenModel>> createPaymentToken(@Url String url);

View File

@@ -50,7 +50,7 @@ public class ApiService {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); // set your desired log level
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
//builder.addInterceptor(logging);
builder.addInterceptor(logging);
OkHttpClient client = builder.build();

View File

@@ -44,6 +44,7 @@ import ch.pizzapp.android.helper.PriceHelper;
import ch.pizzapp.android.helper.SessionHelper;
import ch.pizzapp.android.helper.SharedPrefsHelper;
import ch.pizzapp.android.model.PaymentMethodModel;
import ch.pizzapp.android.model.PaymentTokenModel;
import ch.pizzapp.android.model.StoreShiftModel;
import ch.pizzapp.android.model.StoreWorkDayModel;
import ch.pizzapp.android.model.cart.CartInfoModel;
@@ -93,6 +94,7 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
private OrderPriceRecyclerAdapter orderPriceRecyclerAdapter;
private ProductOnOrderSummaryRecyclerAdapter productOnOrderSummaryRecyclerAdapter;
private StoreShiftModel storeShiftModel;
private PaymentTokenModel braintreePaymentTokenModel;
public CreateOrderSummaryFragment() {}
@@ -121,7 +123,7 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
if (resultCode == Activity.RESULT_OK) {
DropInResult result = data.getParcelableExtra(DropInResult.EXTRA_DROP_IN_RESULT);
createOrderActivity.setSelectedPaymentMethod(result.getPaymentMethodType());
createBraintreePayment(result);
//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
@@ -689,7 +691,6 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
call.enqueue(new Callback<ResponseObject<CartInfoModel>>() {
@Override
public void onResponse(Call<ResponseObject<CartInfoModel>> call, Response<ResponseObject<CartInfoModel>> response) {
DialogHelper.hideLoadingDialog();
if(response.isSuccessful() &&
response.body().getData() != null &&
response.body().isSuccess()){
@@ -700,10 +701,13 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
cartTotalList.clear();
cartTotalList.addAll(cartInfoModel.getTotalsList());
orderPriceRecyclerAdapter.notifyDataSetChanged();
createPaymentToken();
}
else
else {
DialogHelper.hideLoadingDialog();
ApiErrorUtils.parseError(response);
}
}
@Override
public void onFailure(Call<ResponseObject<CartInfoModel>> call, Throwable t) {
@@ -713,19 +717,55 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
});
}
private void createPaymentToken(){
Call<ResponseObject<PaymentTokenModel>> call = ApiService.apiInterface.createPaymentToken(
"/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_PAYMENT_TOKEN + SessionHelper.getCustomerToken().getToken());
call.enqueue(new Callback<ResponseObject<PaymentTokenModel>>() {
@Override
public void onResponse(Call<ResponseObject<PaymentTokenModel>> call, Response<ResponseObject<PaymentTokenModel>> response) {
DialogHelper.hideLoadingDialog();
if(response.isSuccessful() &&
response.body().getData() != null &&
response.body().isSuccess()){
braintreePaymentTokenModel = response.body().getData();
Log.i("fuhrfuhruhfr", "fhurhfurfhurfh");
}
else {
ApiErrorUtils.parseError(response);
}
}
@Override
public void onFailure(Call<ResponseObject<PaymentTokenModel>> call, Throwable t) {
DialogHelper.hideLoadingDialog();
DialogHelper.showFailedDialog();
}
});
}
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'
if(braintreePaymentTokenModel == null ||braintreePaymentTokenModel.getToken().isEmpty()){
DialogHelper.showAlertDialog(BaseActivity.currentActivity, getString(R.string.something_went_wrong));
return;
}
String amountStringForBraintree = PriceHelper.removeCurrencyFromPrice(cartTotalList.get(cartTotalList.size() - 1).getText());
DropInRequest paymentRequest = new DropInRequest()
//.tokenizationKey(ApiConstants.BRAINTREE_TOKENIZATION_KEY_SANDBOX)
.tokenizationKey(ApiConstants.BRAINTREE_TOKENIZATION_KEY_PRODUCTION)
//.tokenizationKey(ApiConstants.BRAINTREE_TOKENIZATION_KEY_PRODUCTION)
//.clientToken("eyJ2ZXJzaW9uIjoyLCJhdXRob3JpemF0aW9uRmluZ2VycHJpbnQiOiI3NzY2ZmNmNTQ3MDc1YWMzMGZiNmIxMzU3MTI1ZTJmODc5YjM4MmNkOTcwYmYwZmYyNmQzMWJmNGRiYjI1MjQzfGNyZWF0ZWRfYXQ9MjAxOC0wNi0xM1QxODo1Mzo0Mi4wODA4MDc5MDQrMDAwMFx1MDAyNm1lcmNoYW50X2lkPTM0OHBrOWNnZjNiZ3l3MmJcdTAwMjZwdWJsaWNfa2V5PTJuMjQ3ZHY4OWJxOXZtcHIiLCJjb25maWdVcmwiOiJodHRwczovL2FwaS5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tOjQ0My9tZXJjaGFudHMvMzQ4cGs5Y2dmM2JneXcyYi9jbGllbnRfYXBpL3YxL2NvbmZpZ3VyYXRpb24iLCJjaGFsbGVuZ2VzIjpbXSwiZW52aXJvbm1lbnQiOiJzYW5kYm94IiwiY2xpZW50QXBpVXJsIjoiaHR0cHM6Ly9hcGkuc2FuZGJveC5icmFpbnRyZWVnYXRld2F5LmNvbTo0NDMvbWVyY2hhbnRzLzM0OHBrOWNnZjNiZ3l3MmIvY2xpZW50X2FwaSIsImFzc2V0c1VybCI6Imh0dHBzOi8vYXNzZXRzLmJyYWludHJlZWdhdGV3YXkuY29tIiwiYXV0aFVybCI6Imh0dHBzOi8vYXV0aC52ZW5tby5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tIiwiYW5hbHl0aWNzIjp7InVybCI6Imh0dHBzOi8vb3JpZ2luLWFuYWx5dGljcy1zYW5kLnNhbmRib3guYnJhaW50cmVlLWFwaS5jb20vMzQ4cGs5Y2dmM2JneXcyYiJ9LCJ0aHJlZURTZWN1cmVFbmFibGVkIjp0cnVlLCJwYXlwYWxFbmFibGVkIjp0cnVlLCJwYXlwYWwiOnsiZGlzcGxheU5hbWUiOiJBY21lIFdpZGdldHMsIEx0ZC4gKFNhbmRib3gpIiwiY2xpZW50SWQiOm51bGwsInByaXZhY3lVcmwiOiJodHRwOi8vZXhhbXBsZS5jb20vcHAiLCJ1c2VyQWdyZWVtZW50VXJsIjoiaHR0cDovL2V4YW1wbGUuY29tL3RvcyIsImJhc2VVcmwiOiJodHRwczovL2Fzc2V0cy5icmFpbnRyZWVnYXRld2F5LmNvbSIsImFzc2V0c1VybCI6Imh0dHBzOi8vY2hlY2tvdXQucGF5cGFsLmNvbSIsImRpcmVjdEJhc2VVcmwiOm51bGwsImFsbG93SHR0cCI6dHJ1ZSwiZW52aXJvbm1lbnROb05ldHdvcmsiOnRydWUsImVudmlyb25tZW50Ijoib2ZmbGluZSIsInVudmV0dGVkTWVyY2hhbnQiOmZhbHNlLCJicmFpbnRyZWVDbGllbnRJZCI6Im1hc3RlcmNsaWVudDMiLCJiaWxsaW5nQWdyZWVtZW50c0VuYWJsZWQiOnRydWUsIm1lcmNoYW50QWNjb3VudElkIjoiYWNtZXdpZGdldHNsdGRzYW5kYm94IiwiY3VycmVuY3lJc29Db2RlIjoiVVNEIn0sIm1lcmNoYW50SWQiOiIzNDhwazljZ2YzYmd5dzJiIiwidmVubW8iOiJvZmYifQ==")
//.amount("CHF1.0")
//.requestThreeDSecureVerification(true)
.clientToken(braintreePaymentTokenModel.getToken())
.requestThreeDSecureVerification(true)
.amount(amountStringForBraintree)
.disableAndroidPay()
//.amount("1.00")
.requestThreeDSecureVerification(true)
.disableVenmo();

View File

@@ -0,0 +1,14 @@
package ch.pizzapp.android.model;
public class PaymentTokenModel {
private String token;
public String getToken() {
return token != null ? token : "";
}
public void setToken(String token) {
this.token = token;
}
}

View File

@@ -7,7 +7,7 @@ buildscript {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.android.tools.build:gradle:3.3.1'
classpath 'io.fabric.tools:gradle:1.+'
// NOTE: Do not place your application dependencies here; they belong