imToken v2.9.3版本的 MD5 值为:42af1a08a3f01f69d2f3782d81007b3c
以下内容为反编译后的 UPPayAssistEx.java 源代码,内容仅作参考
package com.unionpay;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.location.Location;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.nfc.NfcAdapter;
import android.nfc.NfcManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Base64;
import com.google.android.gms.common.internal.ImagesContract;
import com.unionpay.tsmservice.mi.data.Constant;
import com.unionpay.utils.UPUtils;
import io.sentry.protocol.App;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Locale;
import java.util.TimeZone;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Marker;
public class UPPayAssistEx {
private static String A = "";
private static String B = "";
private static String C = "";
private static String D = "";
private static boolean E = false;
private static int F = 10;
private static Context G = null;
private static String H = "";
private static String I = null;
private static String J = null;
private static String K = "";
private static String L = "";
private static boolean M = false;
private static String N = "";
private static int O = 0;
private static boolean P = false;
public static final int PLUGIN_NOT_FOUND = -1;
public static final int PLUGIN_VALID = 0;
private static com.unionpay.a.d Q = null;
private static Handler R = null;
private static String S = "[{\"type\":\"app\",\"sort\":100,\"package_info\":[{\"schema\":\"com.unionpay\",\"version\":\"^[5-9]{1}+(.[0-9]{1})+(.[0-9]{1,3})?$\",\"sign\":\"536C79B93ACFBEA950AE365D8CE1AEF91FEA9535\",\"sort\":101}],\"need_install\":false,\"install_msg\":\"请先安装银联在线支付服务,安装完成后重新发起付款\",\"url\":\"https://mobile.unionpay.com/getclient?platform=android&type=securepayplugin\",\"download_app\":\"UPPayPluginEx.apk\",\"download_title\":\"银联在线支付服务\",\"download_desp\":\"正在下载银联在线支付服务…\",\"md5\":\"D75BB2802E61738A9A03BF014F927D9A\"},{\"type\":\"jar\",\"sort\":200}]";
private static String T = "[{\"type\":\"app\",\"sort\":100,\"package_info\":[{\"schema\":\"com.unionpay.tsmservice\",\"version\":\"^[1-9].*|^0[2-9].*|^01\\.[1-9].*|^01\\.0[1-9].*|^01\\.00\\.[2-9].*|^01\\.00\\.1[012789].*|^01\\.00\\.0[8-9].*\",\"sign\":\"536C79B93ACFBEA950AE365D8CE1AEF91FEA9535\",\"sort\":102},{\"schema\":\"com.unionpay.tsmservice.mi\",\"version\":\"^[1-9].*|^0[2-9].*|^01\\.[1-9].*|^01\\.0[1-9].*|^01\\.00\\.[1-9].*|^01\\.00\\.0[8-9].*\",\"sign\":\"536C79B93ACFBEA950AE365D8CE1AEF91FEA9535\",\"sort\":103}],\"need_install\":false,\"install_msg\":\"请先安装银联在线支付服务,安装完成后重新发起付款\",\"url\":\"https://mobile.unionpay.com/getclient?platform=android&type=securepayplugin\",\"download_app\":\"UPPayPluginEx.apk\",\"download_title\":\"银联在线支付服务\",\"download_desp\":\"正在下载银联在线支付服务…\",\"md5\":\"D75BB2802E61738A9A03BF014F927D9A\"}]";
private static JSONArray U = null;
private static final Handler.Callback V = new a();
public static final String VERSION = "3.4.9";
private static String f1627a = "SpId";
private static String b = "paydata";
private static String c = "SysProvide";
private static String d = "UseTestMode";
private static String e = "SecurityChipType";
private static String f = "uppayuri";
private static String g = "resultIntentAction";
private static String h = "reqOriginalId";
private static String i = "wapurl";
private static String j = "dlgstyle";
private static String k = "com.unionpay.uppay";
private static String l = "com.unionpay.uppay.PayActivity";
private static String m = "ex_mode";
private static String n = "server";
private static String o = "source";
private static String p = "samsung_out";
private static String q = "se_type";
private static String r = "se_title_logo";
private static String s = "se_loading_logo";
private static String t = "se_title_bg_color";
private static String u = "se_cancel_bg_color";
private static String v = "02";
private static String w;
private static String x;
private static String y;
private static String z;
private static int a(Activity activity, String str, String str2) {
try {
String[] strArr = {"30820267308201d0a00302010202044", "ecb7d98300d06092a8", "64886f70d01010505003078310b30090603550", "406130238363111300f060355040813085", "368616e676", "861693111300f060355040713085368616e67686169311730", "15060355040a130e4368696e6120556e696f6e50617931173015060355040b130e4", "368696e612055", "6e696f6e5061793111300f06035504031308556e696f6e5061", "79301e170d3131313132323130343634385a170d333631313135313034", "3634385a3078310b300906035504061302383631", "11300f060355040813085368616e67686169311130", "0f060355040713085368616e676861693117", "3015060355040a130e4368696e6120556e696", "f6e50617931173015060355040b130e4368696e6120556e696", "f6e5061793111300f06035504031308556e696f6e50617930819f300d060", "92a864886f70d010101050003818d0030818902818100c42e6236d5054ffccaa", "a430ecd929d562", "b1ff56cef0e21c87260c63ce3ca868bf5974c14", "d9255940da7b6cd07483f4b4243fd1825b2705", "08eb9b5c67474d027fa03ce35109b11604083ab6bb4df2c46240f879f", "8cc1d6ed5e1b2cc00489215aec3fc2eac008e767b0215981cb5e", "e94ddc285669ec06b8a405dd4341eac4ea7030203010001300d06092a864886f70d010105050003818", "1001a3e74c601e3beb1b7ae4f9ab2872a0aaf1dbc2cba89c7528cd", "54aa526e7a37d8ba2311a1d3d2ab79b3fbeaf3ebb9e7da9e7cdd9be1ae5a53595f47", "b1fdf62b0f540fca5458b063af9354925a6c3505a18ff164b6b195f6e517eaee1fb783", "64c2f89fdffa16729c9779f99562bc189d2ce4722ba0faedb11aa22d0d9db228fda"};
PackageManager packageManager = activity.getPackageManager();
packageManager.getActivityInfo(activity.getComponentName(), 128);
packageManager.getApplicationInfo("com.unionpay.uppay", 8192);
PackageInfo packageInfo = packageManager.getPackageInfo("com.unionpay.uppay", 4160);
String charsString = packageInfo.signatures[0].toCharsString();
String str3 = "";
for (int i2 = 0; i2 < 27; i2++) {
str3 = str3 + strArr[i2];
}
if (!(charsString != null && charsString.equals(str3) && packageInfo.versionCode >= 31)) {
return -1;
}
Bundle bundle = new Bundle();
bundle.putInt(h, 1);
bundle.putString(f, str);
bundle.putString(g, str2);
Intent intent = new Intent();
intent.putExtras(bundle);
intent.setClassName(k, l);
activity.startActivity(intent);
return 0;
} catch (PackageManager.NameNotFoundException unused) {
return -1;
}
}
private static int a(Context context, UPQuerySEPayInfoCallback uPQuerySEPayInfoCallback, boolean z2) {
return com.unionpay.utils.b.d(context, "com.unionpay.tsmservice.mi") ? new com.unionpay.b.e(context, uPQuerySEPayInfoCallback, z2).a() : new com.unionpay.b.b(context, uPQuerySEPayInfoCallback, z2).a();
}
private static int a(Context context, String str, String str2, String str3, String str4, String str5, String str6) {
G = context;
H = str3;
I = str;
J = str2;
K = str4;
C = str6;
B = str5;
D = TextUtils.isEmpty(str6) ? "0" : "1";
w = null;
x = null;
y = null;
if (!TextUtils.isEmpty(str6)) {
A = str6;
} else if (TextUtils.isEmpty(UPUtils.a(context, "se_type"))) {
if (a(G, (UPQuerySEPayInfoCallback) new b(), false) == 0) {
return 0;
}
}
m();
return 0;
}
public static String a(Context context, boolean z2) {
int i2;
NfcAdapter defaultAdapter;
String str;
JSONObject jSONObject = new JSONObject();
try {
try {
try {
i2 = Integer.parseInt(K);
} catch (NumberFormatException unused) {
i2 = 0;
}
if (!z2) {
jSONObject.put("tn", UPUtils.forWap(i2, com.unionpay.utils.b.a(H)));
}
jSONObject.put("imei", com.unionpay.utils.e.b(context));
jSONObject.put("locale", Locale.getDefault().toString().startsWith("zh") ? "zh_CN" : "en_US");
jSONObject.put("terminal_version", VERSION);
jSONObject.put("terminal_resolution", (context.getResources().getDisplayMetrics().widthPixels + Marker.ANY_MARKER + context.getResources().getDisplayMetrics().heightPixels).trim());
jSONObject.put("os_name", "android");
jSONObject.put("os_version", Build.VERSION.RELEASE.trim());
String trim = Build.MODEL.trim();
if (trim != null) {
trim.replace(" ", "");
}
jSONObject.put("device_model", trim);
jSONObject.put(Constant.KEY_MAC, com.unionpay.utils.e.a(context));
try {
jSONObject.put("time_zone", TimeZone.getDefault().getDisplayName(false, 0));
} catch (Exception e2) {
e2.printStackTrace();
}
try {
NetworkInfo activeNetworkInfo = ((ConnectivityManager) context.getSystemService("connectivity")).getActiveNetworkInfo();
if (activeNetworkInfo == null || !activeNetworkInfo.isAvailable()) {
str = "disConnect";
} else if (activeNetworkInfo.getType() != 0) {
str = activeNetworkInfo.getType() == 1 ? "wifi" : "other";
} else if (activeNetworkInfo.getState() == NetworkInfo.State.CONNECTED) {
str = "mobile:" + activeNetworkInfo.getExtraInfo();
} else {
str = "mobile";
}
jSONObject.put("network_mode", str);
} catch (Exception e3) {
e3.printStackTrace();
}
try {
jSONObject.put("imsi", com.unionpay.utils.e.c(context));
} catch (Exception e4) {
e4.printStackTrace();
}
try {
jSONObject.put("baseband_version", e(com.unionpay.utils.e.a()));
} catch (Exception e5) {
e5.printStackTrace();
}
try {
jSONObject.put("root", new File("/system/bin/su").exists() ? "1" : "0");
} catch (Exception e6) {
e6.printStackTrace();
}
try {
StringBuffer stringBuffer = new StringBuffer(com.unionpay.tsmservice.data.Constant.DEFAULT_CVN2);
if (Build.VERSION.SDK_INT >= 10 && (defaultAdapter = ((NfcManager) context.getSystemService("nfc")).getDefaultAdapter()) != null) {
if (defaultAdapter.isEnabled()) {
stringBuffer.setCharAt(0, '1');
} else {
stringBuffer.setCharAt(0, '2');
}
if (Build.VERSION.SDK_INT >= 19 && context.getPackageManager().hasSystemFeature("android.hardware.nfc.hce")) {
stringBuffer.setCharAt(1, '1');
}
}
jSONObject.put("support_map", stringBuffer.toString());
} catch (Exception e7) {
e7.printStackTrace();
}
jSONObject.put("country", e(Locale.getDefault().getCountry()));
String packageName = ((Activity) context).getPackageName();
if (packageName == null) {
packageName = "";
}
jSONObject.put("package", e(packageName));
Location d2 = com.unionpay.utils.e.d(context);
jSONObject.put("latitude", e(d2 != null ? Double.valueOf(d2.getLatitude()).toString() : ""));
Location d3 = com.unionpay.utils.e.d(context);
jSONObject.put("longitude", e(d3 != null ? Double.valueOf(d3.getLongitude()).toString() : ""));
jSONObject.put("tel", e(com.unionpay.utils.e.e(context)));
if (z2) {
try {
Class.forName("com.unionpay.uppay.PayActivity");
jSONObject.put("has_sdk", "1");
} catch (ClassNotFoundException unused2) {
jSONObject.put("has_sdk", "0");
}
}
jSONObject.put("seType", com.unionpay.utils.b.b(A));
jSONObject.put("isLimitSe", D);
} catch (Exception unused3) {
}
} catch (PatternSyntaxException e8) {
e8.printStackTrace();
} catch (JSONException e9) {
e9.printStackTrace();
}
String jSONObject2 = jSONObject.toString();
com.unionpay.utils.j.b("uppay", "init: " + jSONObject2);
return jSONObject2;
}
public static void a(Context context, JSONArray jSONArray, int i2) {
String str;
while (jSONArray != null && i2 < jSONArray.length()) {
Object a2 = com.unionpay.utils.i.a(jSONArray, i2);
if (a2 == null) {
return;
}
JSONObject jSONObject = (JSONObject) a2;
String a3 = com.unionpay.utils.i.a(jSONObject, "type");
int i3 = 0;
if (App.TYPE.equals(a3)) {
JSONArray b2 = com.unionpay.utils.i.b(jSONObject, "package_info");
String a4 = com.unionpay.utils.i.a(jSONObject, "app_server");
JSONArray b3 = b(b2, "sort");
if (b3.length() > 0) {
int length = b3.length();
int i4 = 0;
while (true) {
if (i4 >= length) {
break;
}
Object a5 = com.unionpay.utils.i.a(b3, i4);
if (a5 != null) {
JSONObject jSONObject2 = (JSONObject) a5;
String a6 = com.unionpay.utils.i.a(jSONObject2, "schema");
String a7 = com.unionpay.utils.i.a(jSONObject2, "sign");
String a8 = com.unionpay.utils.i.a(jSONObject2, "version");
if (com.unionpay.utils.b.a(context, a6) && a7.equalsIgnoreCase(com.unionpay.utils.b.b(context, a6)) && com.unionpay.utils.b.c(context, a6).matches(a8)) {
try {
Bundle bundle = new Bundle();
a(H, bundle, K);
bundle.putString(f1627a, I);
bundle.putString(c, J);
bundle.putString(b, H);
bundle.putString(o, B);
bundle.putString(q, C);
if (!TextUtils.isEmpty(C)) {
bundle.putString(r, w);
bundle.putString(s, x);
bundle.putString(t, y);
bundle.putString(u, z);
}
bundle.putBoolean(j, E);
bundle.putString(n, a4);
bundle.putString(e, null);
bundle.putInt(h, 0);
Intent intent = new Intent();
intent.putExtras(bundle);
intent.setClassName(a6, l);
if (G instanceof Activity) {
((Activity) G).startActivityForResult(intent, F);
} else {
intent.addFlags(268435456);
G.startActivity(intent);
}
i3 = 1;
} catch (Exception unused) {
continue;
}
}
}
i4++;
}
}
if (i3 != 0) {
return;
}
} else {
if (!"wap".equals(a3)) {
if ("jar".equals(a3)) {
a(com.unionpay.utils.i.a(jSONObject, "app_server"));
return;
}
return;
}
if (!p.equals(B)) {
try {
str = (String) jSONObject.get(ImagesContract.URL);
} catch (Exception unused2) {
str = "";
}
Bundle bundle2 = new Bundle();
a(H, bundle2, K);
bundle2.putString(f1627a, I);
bundle2.putString(c, J);
bundle2.putString("magic_data", "949A1CC");
try {
i3 = Integer.parseInt(K);
} catch (NumberFormatException unused3) {
}
bundle2.putString(b, UPUtils.forWap(i3, com.unionpay.utils.b.a(H)));
bundle2.putString(i, str);
Intent intent2 = new Intent();
intent2.putExtras(bundle2);
intent2.setClass(G, UPPayWapActivity.class);
((Activity) G).startActivityForResult(intent2, 100);
return;
}
}
jSONArray = U;
i2 = O + 1;
O = i2;
}
}
public static void a(String str) {
Bundle bundle = new Bundle();
a(H, bundle, K);
bundle.putString(f1627a, I);
bundle.putString(c, J);
bundle.putString(b, H);
bundle.putString(o, B);
bundle.putString(q, C);
if (!TextUtils.isEmpty(C)) {
bundle.putString(r, w);
bundle.putString(s, x);
bundle.putString(t, y);
bundle.putString(u, z);
}
bundle.putString(n, str);
bundle.putBoolean(j, E);
bundle.putInt(h, 2);
try {
Class<?> cls = Class.forName("com.unionpay.uppay.PayActivity");
Intent intent = new Intent();
intent.putExtras(bundle);
intent.setClass(G, cls);
if (G instanceof Activity) {
((Activity) G).startActivityForResult(intent, F);
} else {
intent.addFlags(268435456);
G.startActivity(intent);
}
} catch (ClassNotFoundException unused) {
}
}
private static void a(String str, Bundle bundle, String str2) {
if (str == null || str.trim().length() <= 0) {
return;
}
if (str.trim().charAt(0) != '<') {
bundle.putString(m, str2);
} else if (str2 == null || !str2.trim().equalsIgnoreCase("00")) {
bundle.putBoolean(d, true);
} else {
bundle.putBoolean(d, false);
}
}
public static JSONArray b(JSONArray jSONArray, String str) {
ArrayList arrayList = new ArrayList();
for (int i2 = 0; i2 < jSONArray.length(); i2++) {
arrayList.add(jSONArray.optJSONObject(i2));
}
Collections.sort(arrayList, new d(str));
JSONArray jSONArray2 = new JSONArray();
for (int i3 = 0; i3 < arrayList.size(); i3++) {
jSONArray2.put((JSONObject) arrayList.get(i3));
}
return jSONArray2;
}
public static boolean checkWalletInstalled(Context context) {
return com.unionpay.utils.b.a(context, "com.unionpay") && "536C79B93ACFBEA950AE365D8CE1AEF91FEA9535".equalsIgnoreCase(com.unionpay.utils.b.b(context, "com.unionpay"));
}
public static void d(String str) {
try {
JSONObject jSONObject = new JSONObject(str);
w = jSONObject.getString("titleLogo");
x = jSONObject.getString("loadingLogo");
y = jSONObject.getString("backGroundColor");
z = jSONObject.getString("textColor");
} catch (JSONException unused) {
}
}
private static String e(String str) {
return str != null ? Pattern.compile("[\":,\\[\\]{}]").matcher(str).replaceAll("").trim() : "";
}
public static int getSEPayInfo(Context context, UPQuerySEPayInfoCallback uPQuerySEPayInfoCallback) {
return a(context, uPQuerySEPayInfoCallback, true);
}
public static boolean i() {
P = true;
return true;
}
public static int m() {
int i2;
int i3;
if (G == null) {
return 1;
}
if (TextUtils.isEmpty(B) && TextUtils.isEmpty(C)) {
E = false;
} else {
E = true;
if (v.equalsIgnoreCase(C)) {
B = p;
}
}
O = 0;
P = false;
System.loadLibrary("entryexpro");
String a2 = UPUtils.a(G, "configs" + C);
String a3 = UPUtils.a(G, "mode" + C);
String a4 = UPUtils.a(G, "or" + C);
if (!TextUtils.isEmpty(a2) && !TextUtils.isEmpty(a3) && !TextUtils.isEmpty(a4)) {
try {
JSONObject jSONObject = new JSONObject(a2);
String a5 = com.unionpay.utils.i.a(jSONObject, "sign");
try {
i3 = Integer.parseInt(a3);
} catch (NumberFormatException unused) {
i3 = 0;
}
String str = new String(Base64.decode(jSONObject.getString("configs"), 2));
String str2 = "";
String str3 = jSONObject.has("sePayConf") ? new String(Base64.decode(jSONObject.getString("sePayConf"), 2)) : "";
if (!TextUtils.isEmpty(str3)) {
str2 = str3;
}
com.unionpay.utils.j.a("uppay", str);
String a6 = com.unionpay.utils.b.a(UPUtils.a(str + str2 + a4));
String forConfig = UPUtils.forConfig(i3, a5);
if (!TextUtils.isEmpty(forConfig) && forConfig.equals(a6)) {
if (TextUtils.isEmpty(C)) {
S = str;
} else {
T = str;
}
if (!TextUtils.isEmpty(A)) {
String a7 = UPUtils.a(G, "se_configs" + A);
if (!TextUtils.isEmpty(a7)) {
d(a7);
}
}
}
} catch (Exception unused2) {
}
}
try {
U = b(TextUtils.isEmpty(C) ? new JSONArray(S) : new JSONArray(T), "sort");
} catch (JSONException unused3) {
}
Context context = G;
try {
i2 = Integer.parseInt(K);
} catch (NumberFormatException unused4) {
i2 = 0;
}
String forUrl = UPUtils.forUrl(i2);
com.unionpay.utils.j.b("uppay", "url: " + forUrl);
Q = new com.unionpay.a.d(forUrl);
String a8 = a(context, false);
com.unionpay.utils.j.b("uppay", "postdata: " + a8);
Q.a(a8);
R = new Handler(V);
new c().start();
return 0;
}
public static int startPay(Context context, String str, String str2, String str3, String str4) {
return a(context, str, str2, str3, str4, "", "");
}
public static void startPayByJAR(Context context, Class cls, String str, String str2, String str3, String str4) {
startPay(context, str, str2, str3, str4);
}
public static int startPayFromBrowser(Activity activity, String str, String str2) {
return a(activity, str, str2);
}
public static int startSEPay(Context context, String str, String str2, String str3, String str4, String str5) {
return a(context, str, str2, str3, str4, "", str5);
}
public static void startSamsungPay(Context context, Class cls, String str, String str2, String str3, String str4) {
a(context, str, str2, str3, str4, p, v);
}
}