Skip to content

Commit

Permalink
Update PaymentController and related classes to take ApiRequest.Optio…
Browse files Browse the repository at this point in the history
…ns (#1244)

* Update PaymentController and related classes to take ApiRequest.Options

Instead of passing a publishable key, pass `ApiRequest.Options` so that
a user-specified Connected account (see `Stripe#setAccount()`) is
included in requests.

MOBILE3DS2-451
  • Loading branch information
mshafrir-stripe authored Jul 25, 2019
1 parent 63e094b commit 649312c
Show file tree
Hide file tree
Showing 8 changed files with 176 additions and 157 deletions.
5 changes: 2 additions & 3 deletions stripe/src/main/java/com/stripe/android/ApiRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,9 @@ static ApiRequest createDelete(@NonNull String url,

@NonNull
static ApiRequest createAnalyticsRequest(@NonNull Map<String, ?> params,
@NonNull String apiKey,
@NonNull ApiRequest.Options requestOptions,
@Nullable AppInfo appInfo) {
return new ApiRequest(Method.GET, ANALYTICS_HOST, params,
ApiRequest.Options.create(apiKey), appInfo);
return new ApiRequest(Method.GET, ANALYTICS_HOST, params, requestOptions, appInfo);
}

@NonNull
Expand Down
156 changes: 77 additions & 79 deletions stripe/src/main/java/com/stripe/android/PaymentController.java

Large diffs are not rendered by default.

25 changes: 17 additions & 8 deletions stripe/src/main/java/com/stripe/android/Stripe.java
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,8 @@ static AppInfo getAppInfo() {
public void confirmSetupIntent(@NonNull Activity activity,
@NonNull ConfirmSetupIntentParams confirmSetupIntentParams,
@NonNull String publishableKey) {
mPaymentController.startConfirmAndAuth(this, activity,
confirmSetupIntentParams, publishableKey);
mPaymentController.startConfirmAndAuth(activity, confirmSetupIntentParams,
ApiRequest.Options.create(publishableKey, mStripeAccount));
}

/**
Expand All @@ -167,8 +167,8 @@ public void confirmSetupIntent(@NonNull Activity activity,
public void confirmPayment(@NonNull Activity activity,
@NonNull ConfirmPaymentIntentParams confirmPaymentIntentParams,
@NonNull String publishableKey) {
mPaymentController.startConfirmAndAuth(this, activity,
confirmPaymentIntentParams, publishableKey);
mPaymentController.startConfirmAndAuth(activity, confirmPaymentIntentParams,
ApiRequest.Options.create(publishableKey, mStripeAccount));
}

/**
Expand All @@ -190,7 +190,8 @@ public void confirmPayment(@NonNull Activity activity,
public void authenticatePayment(@NonNull Activity activity,
@NonNull String clientSecret,
@NonNull String publishableKey) {
mPaymentController.startAuth(this, activity, clientSecret, publishableKey);
mPaymentController.startAuth(activity, clientSecret,
ApiRequest.Options.create(publishableKey, mStripeAccount));
}

/**
Expand All @@ -210,7 +211,8 @@ public void authenticatePayment(@NonNull Activity activity,
public void authenticateSetup(@NonNull Activity activity,
@NonNull String clientSecret,
@NonNull String publishableKey) {
mPaymentController.startAuth(this, activity, clientSecret, publishableKey);
mPaymentController.startAuth(activity, clientSecret,
ApiRequest.Options.create(publishableKey, mStripeAccount));
}

/**
Expand All @@ -232,7 +234,10 @@ public boolean onPaymentResult(int requestCode, @Nullable Intent data,
@NonNull ApiResultCallback<PaymentIntentResult> callback) {
if (data != null &&
mPaymentController.shouldHandlePaymentResult(requestCode, data)) {
mPaymentController.handlePaymentResult(this, data, publishableKey, callback);
mPaymentController.handlePaymentResult(
data,
ApiRequest.Options.create(publishableKey, mStripeAccount),
callback);
return true;
}

Expand All @@ -257,7 +262,11 @@ public boolean onSetupResult(int requestCode, @Nullable Intent data,
@NonNull ApiResultCallback<SetupIntentResult> callback) {
if (data != null &&
mPaymentController.shouldHandleSetupResult(requestCode, data)) {
mPaymentController.handleSetupResult(this, data, publishableKey, callback);
mPaymentController.handleSetupResult(
data,
ApiRequest.Options.create(publishableKey, mStripeAccount),
callback
);
return true;
}

Expand Down
44 changes: 25 additions & 19 deletions stripe/src/main/java/com/stripe/android/StripeApiHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -703,37 +703,39 @@ void updateIssuingCardPin(
@VisibleForTesting
Stripe3ds2AuthResult start3ds2Auth(@NonNull Stripe3ds2AuthParams authParams,
@NonNull String stripeIntentId,
@NonNull String publishableKey)
@NonNull ApiRequest.Options requestOptions)
throws InvalidRequestException, APIConnectionException, APIException, CardException,
AuthenticationException, JSONException {
fireAnalyticsRequest(
mAnalyticsDataFactory.createAuthParams(
AnalyticsDataFactory.EventName.AUTH_3DS2_START,
stripeIntentId, publishableKey),
publishableKey
stripeIntentId, requestOptions.apiKey),
requestOptions.apiKey
);

final StripeResponse response = fireStripeApiRequest(
ApiRequest.createPost(
getApiUrl("3ds2/authenticate"),
authParams.toParamMap(),
ApiRequest.Options.create(publishableKey), mAppInfo)
requestOptions,
mAppInfo
)
);
convertErrorsToExceptionsAndThrowIfNecessary(response);
return Stripe3ds2AuthResult.fromJson(new JSONObject(response.getResponseBody()));
}

void start3ds2Auth(@NonNull Stripe3ds2AuthParams authParams,
@NonNull String stripeIntentId,
@NonNull String publishableKey,
@NonNull ApiRequest.Options requestOptions,
@NonNull ApiResultCallback<Stripe3ds2AuthResult> callback) {
new Start3ds2AuthTask(this, authParams, stripeIntentId, publishableKey, callback)
new Start3ds2AuthTask(this, authParams, stripeIntentId, requestOptions, callback)
.execute();
}

@VisibleForTesting
boolean complete3ds2Auth(@NonNull String sourceId,
@NonNull String publishableKey)
@NonNull ApiRequest.Options requestOptions)
throws InvalidRequestException, APIConnectionException, APIException, CardException,
AuthenticationException {
final Map<String, String> params = new HashMap<>();
Expand All @@ -743,16 +745,16 @@ boolean complete3ds2Auth(@NonNull String sourceId,
ApiRequest.createPost(
getApiUrl("3ds2/challenge_complete"),
params,
ApiRequest.Options.create(publishableKey), mAppInfo)
requestOptions, mAppInfo)
);
convertErrorsToExceptionsAndThrowIfNecessary(response);
return response.isOk();
}

void complete3ds2Auth(@NonNull String sourceId,
@NonNull String publishableKey,
@NonNull ApiRequest.Options requestOptions,
@NonNull ApiResultCallback<Boolean> callback) {
new Complete3ds2AuthTask(this, sourceId, publishableKey, callback)
new Complete3ds2AuthTask(this, sourceId, requestOptions, callback)
.execute();
}

Expand Down Expand Up @@ -1116,7 +1118,11 @@ void fireAnalyticsRequest(
@NonNull Map<String, Object> loggingMap,
@NonNull String publishableKey) {
makeFireAndForgetRequest(
ApiRequest.createAnalyticsRequest(loggingMap, publishableKey, mAppInfo));
ApiRequest.createAnalyticsRequest(
loggingMap,
ApiRequest.Options.create(publishableKey),
mAppInfo)
);
}

@NonNull
Expand All @@ -1130,46 +1136,46 @@ private static final class Start3ds2AuthTask extends ApiOperation<Stripe3ds2Auth
@NonNull private final StripeApiHandler mApiHandler;
@NonNull private final Stripe3ds2AuthParams mParams;
@NonNull private final String mStripeIntentId;
@NonNull private final String mPublishableKey;
@NonNull private final ApiRequest.Options mRequestOptions;

private Start3ds2AuthTask(@NonNull StripeApiHandler apiHandler,
@NonNull Stripe3ds2AuthParams params,
@NonNull String stripeIntentId,
@NonNull String publishableKey,
@NonNull ApiRequest.Options requestOptions,
@NonNull ApiResultCallback<Stripe3ds2AuthResult> callback) {
super(callback);
mApiHandler = apiHandler;
mParams = params;
mStripeIntentId = stripeIntentId;
mPublishableKey = publishableKey;
mRequestOptions = requestOptions;
}

@NonNull
@Override
Stripe3ds2AuthResult getResult() throws StripeException, JSONException {
return mApiHandler.start3ds2Auth(mParams, mStripeIntentId, mPublishableKey);
return mApiHandler.start3ds2Auth(mParams, mStripeIntentId, mRequestOptions);
}
}

private static final class Complete3ds2AuthTask extends ApiOperation<Boolean> {
@NonNull private final StripeApiHandler mApiHandler;
@NonNull private final String mSourceId;
@NonNull private final String mPublishableKey;
@NonNull private final ApiRequest.Options mRequestOptions;

private Complete3ds2AuthTask(@NonNull StripeApiHandler apiHandler,
@NonNull String sourceId,
@NonNull String publishableKey,
@NonNull ApiRequest.Options requestOptions,
@NonNull ApiResultCallback<Boolean> callback) {
super(callback);
mApiHandler = apiHandler;
mSourceId = sourceId;
mPublishableKey = publishableKey;
mRequestOptions = requestOptions;
}

@NonNull
@Override
Boolean getResult() throws StripeException {
return mApiHandler.complete3ds2Auth(mSourceId, mPublishableKey);
return mApiHandler.complete3ds2Auth(mSourceId, mRequestOptions);
}
}
}
Loading

0 comments on commit 649312c

Please sign in to comment.