ReactGeetestSensebotModule.java 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package com.rnlib.geetest.sensebot;
  2. import com.facebook.react.bridge.Promise;
  3. import com.facebook.react.bridge.ReactApplicationContext;
  4. import com.facebook.react.bridge.ReactContextBaseJavaModule;
  5. import com.facebook.react.bridge.ReactMethod;
  6. import com.facebook.react.bridge.WritableMap;
  7. import com.facebook.react.bridge.WritableNativeMap;
  8. import com.facebook.react.modules.core.DeviceEventManagerModule;
  9. import com.geetest.sdk.Bind.GT3GeetestBindListener;
  10. import com.geetest.sdk.Bind.GT3GeetestUtilsBind;
  11. import org.json.JSONObject;
  12. public class ReactGeetestSensebotModule extends ReactContextBaseJavaModule {
  13. private final ReactApplicationContext mReactContext;
  14. private static final String ReactGSEventName = "RNGeetestSensebotEvent";
  15. private static final String urlPlaceHolder = "";
  16. private GT3GeetestUtilsBind gt3GeetestUtils;
  17. public ReactGeetestSensebotModule(ReactApplicationContext reactContext) {
  18. super(reactContext);
  19. mReactContext = reactContext;
  20. }
  21. @Override
  22. public String getName() {
  23. return "GeetestSensebot";
  24. }
  25. @ReactMethod
  26. public void initCaptchaMgr(Integer maskColor, Boolean isDebug, Promise promise) {
  27. gt3GeetestUtils = new GT3GeetestUtilsBind(mReactContext.getCurrentActivity());
  28. gt3GeetestUtils.setTimeout(5000);
  29. gt3GeetestUtils.getISonto();
  30. gt3GeetestUtils.setDialogTouch(true);
  31. promise.resolve(true);
  32. }
  33. @ReactMethod
  34. public void captcha(final Integer success, final String gt, final String challenge, String api2, Promise promise) {
  35. if (gt3GeetestUtils == null) {
  36. promise.resolve(false);
  37. return;
  38. }
  39. // api1 result pass to captcha
  40. JSONObject captchaParams = new JSONObject();
  41. try {
  42. captchaParams.put("success", success.intValue());
  43. captchaParams.put("gt", gt);
  44. captchaParams.put("challenge", challenge);
  45. } catch (Exception ignored) {
  46. }
  47. gt3GeetestUtils.gtSetApi1Json(captchaParams);
  48. // start captcha
  49. mReactContext.runOnUiQueueThread(new Runnable() {
  50. @Override
  51. public void run() {
  52. gt3GeetestUtils.getGeetest(mReactContext.getCurrentActivity(), urlPlaceHolder, urlPlaceHolder, null, new GT3GeetestBindListener() {
  53. // 行为验证结果
  54. @Override
  55. public void gt3GetDialogResult(boolean status, String resultString) {
  56. if (status) {
  57. JSONObject resultJson;
  58. try {
  59. resultJson = new JSONObject(resultString);
  60. } catch (Exception e) {
  61. resultJson = new JSONObject();
  62. }
  63. WritableMap eventBody = new WritableNativeMap();
  64. eventBody.putInt("type", ReactGSEventType.GS_CAPTCHA.getValue());
  65. WritableMap eventPayload = new WritableNativeMap();
  66. eventPayload.putString("code", "1");
  67. eventPayload.putString("message", "Success");
  68. WritableMap eventResult = new WritableNativeMap();
  69. try {
  70. eventResult.putString("geetest_challenge", resultJson.getString("geetest_challenge"));
  71. eventResult.putString("geetest_validate", resultJson.getString("geetest_validate"));
  72. eventResult.putString("geetest_seccode", resultJson.getString("geetest_seccode"));
  73. } catch (Exception ignored) {
  74. }
  75. eventPayload.putMap("result", eventResult);
  76. eventBody.putMap("payload", eventPayload);
  77. sendEvent(eventBody);
  78. gt3GeetestUtils.gt3TestFinish();
  79. }
  80. }
  81. // 没有进行行为验证就关闭了验证码
  82. @Override
  83. public void gt3CloseDialog(int i) {
  84. WritableMap eventBody = new WritableNativeMap();
  85. eventBody.putInt("type", ReactGSEventType.GS_CAPTCHA.getValue());
  86. eventBody.putString("errCode", "close view");
  87. eventBody.putString("errMsg", "user close captcha view.");
  88. sendEvent(eventBody);
  89. }
  90. // 自定义 api2
  91. @Override
  92. public boolean gt3SetIsCustom() {
  93. return true;
  94. }
  95. // 框架出错
  96. @Override
  97. public void gt3DialogOnError(String errCode) {
  98. WritableMap eventBody = new WritableNativeMap();
  99. eventBody.putInt("type", ReactGSEventType.GS_ERROR.getValue());
  100. eventBody.putString("errCode", errCode);
  101. eventBody.putString("errMsg", errCode);
  102. sendEvent(eventBody);
  103. }
  104. });
  105. }
  106. });
  107. promise.resolve(true);
  108. }
  109. @ReactMethod
  110. public void stopCaptcha(Promise promise) {
  111. if (gt3GeetestUtils != null) {
  112. mReactContext.runOnUiQueueThread(new Runnable() {
  113. @Override
  114. public void run() {
  115. gt3GeetestUtils.cancelUtils();
  116. gt3GeetestUtils.gt3TestClose();
  117. gt3GeetestUtils = null;
  118. }
  119. });
  120. }
  121. promise.resolve(true);
  122. }
  123. private void sendEvent(WritableMap mBody) {
  124. mReactContext
  125. .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
  126. .emit(ReactGSEventName, mBody);
  127. }
  128. }