正在查看: Plus 12 v10.13.1.1 应用的 StripeApiHandler.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: Plus 12 v10.13.1.1 应用的 StripeApiHandler.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package com.stripe.android.net;
import com.stripe.android.exception.APIConnectionException;
import com.stripe.android.exception.APIException;
import com.stripe.android.exception.AuthenticationException;
import com.stripe.android.exception.CardException;
import com.stripe.android.exception.InvalidRequestException;
import com.stripe.android.exception.PermissionException;
import com.stripe.android.exception.RateLimitException;
import com.stripe.android.model.Token;
import com.stripe.android.net.ErrorParser;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSocketFactory;
import org.json.JSONObject;
import org.telegram.messenger.BuildConfig;
public class StripeApiHandler {
public static final SSLSocketFactory SSL_SOCKET_FACTORY = new StripeSSLSocketFactory();
public static Token createToken(Map<String, Object> map, RequestOptions requestOptions) throws AuthenticationException, InvalidRequestException, APIConnectionException, CardException, APIException {
return requestToken("POST", getApiUrl(), map, requestOptions);
}
public static String createQuery(Map<String, Object> map) throws UnsupportedEncodingException, InvalidRequestException {
StringBuilder sb = new StringBuilder();
for (Parameter parameter : flattenParams(map)) {
if (sb.length() > 0) {
sb.append("&");
}
sb.append(urlEncodePair(parameter.key, parameter.value));
}
return sb.toString();
}
public static Map<String, String> getHeaders(RequestOptions requestOptions) {
HashMap hashMap = new HashMap();
String apiVersion = requestOptions.getApiVersion();
hashMap.put("Accept-Charset", "UTF-8");
hashMap.put("Accept", "application/json");
hashMap.put("User-Agent", String.format("Stripe/v1 JavaBindings/%s", "3.5.0"));
hashMap.put("Authorization", String.format("Bearer %s", requestOptions.getPublishableApiKey()));
String[] strArr = {"os.name", "os.version", "os.arch", "java.version", "java.vendor", "java.vm.version", "java.vm.vendor"};
HashMap hashMap2 = new HashMap();
for (int i = 0; i < 7; i++) {
String str = strArr[i];
hashMap2.put(str, System.getProperty(str));
}
hashMap2.put("bindings.version", "3.5.0");
hashMap2.put("lang", "Java");
hashMap2.put("publisher", "Stripe");
hashMap.put("X-Stripe-Client-User-Agent", new JSONObject(hashMap2).toString());
if (apiVersion != null) {
hashMap.put("Stripe-Version", apiVersion);
}
if (requestOptions.getIdempotencyKey() != null) {
hashMap.put("Idempotency-Key", requestOptions.getIdempotencyKey());
}
return hashMap;
}
public static String getApiUrl() {
return String.format("%s/v1/%s", "https://api.stripe.com", "tokens");
}
public static String formatURL(String str, String str2) {
if (str2 == null || str2.isEmpty()) {
return str;
}
return String.format("%s%s%s", str, str.contains("?") ? "&" : "?", str2);
}
public static HttpURLConnection createGetConnection(String str, String str2, RequestOptions requestOptions) throws IOException {
HttpURLConnection createStripeConnection = createStripeConnection(formatURL(str, str2), requestOptions);
createStripeConnection.setRequestMethod("GET");
return createStripeConnection;
}
public static HttpURLConnection createPostConnection(String str, String str2, RequestOptions requestOptions) throws IOException {
OutputStream outputStream;
HttpURLConnection createStripeConnection = createStripeConnection(str, requestOptions);
createStripeConnection.setDoOutput(true);
createStripeConnection.setRequestMethod("POST");
createStripeConnection.setRequestProperty("Content-Type", String.format("application/x-www-form-urlencoded;charset=%s", "UTF-8"));
try {
outputStream = createStripeConnection.getOutputStream();
} catch (Throwable th) {
th = th;
outputStream = null;
}
try {
outputStream.write(str2.getBytes("UTF-8"));
outputStream.close();
return createStripeConnection;
} catch (Throwable th2) {
th = th2;
if (outputStream != null) {
outputStream.close();
}
throw th;
}
}
public static HttpURLConnection createStripeConnection(String str, RequestOptions requestOptions) throws IOException {
HttpURLConnection httpURLConnection = (HttpURLConnection) new URL(str).openConnection();
httpURLConnection.setConnectTimeout(30000);
httpURLConnection.setReadTimeout(80000);
httpURLConnection.setUseCaches(false);
for (Map.Entry<String, String> entry : getHeaders(requestOptions).entrySet()) {
httpURLConnection.setRequestProperty(entry.getKey(), entry.getValue());
}
if (httpURLConnection instanceof HttpsURLConnection) {
((HttpsURLConnection) httpURLConnection).setSSLSocketFactory(SSL_SOCKET_FACTORY);
}
return httpURLConnection;
}
public static com.stripe.android.model.Token requestToken(java.lang.String r7, java.lang.String r8, java.util.Map<java.lang.String, java.lang.Object> r9, com.stripe.android.net.RequestOptions r10) throws com.stripe.android.exception.AuthenticationException, com.stripe.android.exception.InvalidRequestException, com.stripe.android.exception.APIConnectionException, com.stripe.android.exception.CardException, com.stripe.android.exception.APIException {
throw new UnsupportedOperationException("Method not decompiled: com.stripe.android.net.StripeApiHandler.requestToken(java.lang.String, java.lang.String, java.util.Map, com.stripe.android.net.RequestOptions):com.stripe.android.model.Token");
}
public static StripeResponse getStripeResponse(String str, String str2, Map<String, Object> map, RequestOptions requestOptions) throws InvalidRequestException, APIConnectionException, APIException {
try {
return makeURLConnectionRequest(str, str2, createQuery(map), requestOptions);
} catch (UnsupportedEncodingException e) {
throw new InvalidRequestException("Unable to encode parameters to UTF-8. Please contact [email protected] for assistance.", null, null, 0, e);
}
}
public static List<Parameter> flattenParams(Map<String, Object> map) throws InvalidRequestException {
return flattenParamsMap(map, null);
}
public static List<Parameter> flattenParamsList(List<Object> list, String str) throws InvalidRequestException {
LinkedList linkedList = new LinkedList();
Iterator<Object> it = list.iterator();
String format = String.format("%s[]", str);
if (list.isEmpty()) {
linkedList.add(new Parameter(str, BuildConfig.APP_CENTER_HASH));
} else {
while (it.hasNext()) {
linkedList.addAll(flattenParamsValue(it.next(), format));
}
}
return linkedList;
}
public static List<Parameter> flattenParamsMap(Map<String, Object> map, String str) throws InvalidRequestException {
LinkedList linkedList = new LinkedList();
if (map == null) {
return linkedList;
}
for (Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
if (str != null) {
key = String.format("%s[%s]", str, key);
}
linkedList.addAll(flattenParamsValue(value, key));
}
return linkedList;
}
public static List<Parameter> flattenParamsValue(Object obj, String str) throws InvalidRequestException {
if (obj instanceof Map) {
return flattenParamsMap((Map) obj, str);
}
if (obj instanceof List) {
return flattenParamsList((List) obj, str);
}
if (BuildConfig.APP_CENTER_HASH.equals(obj)) {
throw new InvalidRequestException("You cannot set '" + str + "' to an empty string. We interpret empty strings as null in requests. You may set '" + str + "' to null to delete the property.", str, null, 0, null);
}
if (obj == null) {
LinkedList linkedList = new LinkedList();
linkedList.add(new Parameter(str, BuildConfig.APP_CENTER_HASH));
return linkedList;
}
LinkedList linkedList2 = new LinkedList();
linkedList2.add(new Parameter(str, obj.toString()));
return linkedList2;
}
public static void handleAPIError(String str, int i, String str2) throws InvalidRequestException, AuthenticationException, CardException, APIException {
ErrorParser.StripeError parseError = ErrorParser.parseError(str);
if (i != 429) {
switch (i) {
case 400:
throw new InvalidRequestException(parseError.message, parseError.param, str2, Integer.valueOf(i), null);
case 401:
throw new AuthenticationException(parseError.message, str2, Integer.valueOf(i));
case 402:
throw new CardException(parseError.message, str2, parseError.code, parseError.param, parseError.decline_code, parseError.charge, Integer.valueOf(i), null);
case 403:
throw new PermissionException(parseError.message, str2, Integer.valueOf(i));
case 404:
throw new InvalidRequestException(parseError.message, parseError.param, str2, Integer.valueOf(i), null);
default:
throw new APIException(parseError.message, str2, Integer.valueOf(i), null);
}
}
throw new RateLimitException(parseError.message, parseError.param, str2, Integer.valueOf(i), null);
}
public static String urlEncodePair(String str, String str2) throws UnsupportedEncodingException {
return String.format("%s=%s", urlEncode(str), urlEncode(str2));
}
public static String urlEncode(String str) throws UnsupportedEncodingException {
if (str == null) {
return null;
}
return URLEncoder.encode(str, "UTF-8");
}
public static com.stripe.android.net.StripeResponse makeURLConnectionRequest(java.lang.String r6, java.lang.String r7, java.lang.String r8, com.stripe.android.net.RequestOptions r9) throws com.stripe.android.exception.APIConnectionException {
throw new UnsupportedOperationException("Method not decompiled: com.stripe.android.net.StripeApiHandler.makeURLConnectionRequest(java.lang.String, java.lang.String, java.lang.String, com.stripe.android.net.RequestOptions):com.stripe.android.net.StripeResponse");
}
public static String getResponseBody(InputStream inputStream) throws IOException {
String next = new Scanner(inputStream, "UTF-8").useDelimiter("\\A").next();
inputStream.close();
return next;
}
public static final class Parameter {
public final String key;
public final String value;
public Parameter(String str, String str2) {
this.key = str;
this.value = str2;
}
}
}