【问题标题】:ReCaptcha V2 response error 12008 in AndroidAndroid 中的 ReCaptcha V2 响应错误 12008
【发布时间】:2020-12-14 14:37:45
【问题描述】:

以下是我在我的 Android 应用中实现的 ReCaptcha V2。 当我运行它时,它返回:Error message: unknown status code: 12008

这意味着:

public static final int RECAPTCHA_INVALID_KEYTYPE 无法启动 reCAPTCHA 服务,因为站点密钥的类型无效。

请注册新的站点密钥,密钥类型设置为“reCAPTCHA” Android”通过 //g.co/recaptcha/androidsignup。

常数值:12008

我的站点密钥在我的 ReCaptcha 管理门户上可用,那么我需要做什么才能使其“有效”?

我实现的代码示例确实包含以下有关服务器 url 的 cmets:

//it is google recaptcha siteverify server
//you can place your server url

这是要求还是建议?

public void onCaptchaClick(View view) {
    SafetyNet.getClient(this).verifyWithRecaptcha(SITE_KEY)
            .addOnSuccessListener(this, new OnSuccessListener<SafetyNetApi.RecaptchaTokenResponse>() {
                @Override
                public void onSuccess(SafetyNetApi.RecaptchaTokenResponse response) {
                    if (!response.getTokenResult().isEmpty()) {
                        handleSiteVerify(response.getTokenResult());
                    }
                }
            })
            .addOnFailureListener(this, new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    if (e instanceof ApiException) {
                        ApiException apiException = (ApiException) e;
                        Log.d(TAG, "Error message: " +
                                CommonStatusCodes.getStatusCodeString(apiException.getStatusCode()));
                    } else {
                        Log.d(TAG, "Unknown type of error: " + e.getMessage());
                    }
                }
            });

}


protected  void handleSiteVerify(final String responseToken){
    //it is google recaptcha siteverify server
    //you can place your server url
    String url = "https://www.google.com/recaptcha/api/siteverify";
    StringRequest request = new StringRequest(Request.Method.POST, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONObject jsonObject = new JSONObject(response);
                        if(jsonObject.getBoolean("success")){
                            Toast.makeText(getApplicationContext(),String.valueOf(jsonObject.getBoolean("success")),Toast.LENGTH_LONG).show();
                        }
                        else{
                            Toast.makeText(getApplicationContext(),String.valueOf(jsonObject.getString("error-codes")),Toast.LENGTH_LONG).show();
                        }
                    } catch (Exception ex) {
                        Log.d(TAG, "JSON exception: " + ex.getMessage());

                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d(TAG, "Error message: " + error.getMessage());
                }
            }) {
        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<>();
            params.put("secret", SECRET_KEY);
            params.put("response", responseToken);
            return params;
        }
    };
    request.setRetryPolicy(new DefaultRetryPolicy(
            50000,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    queue.add(request);
}

【问题讨论】:

    标签: android post server response recaptcha


    【解决方案1】:

    此错误表示您没有使用正确的键。

    您是否创建了 Android 应用密钥或网站密钥?当我尝试使用该应用的网络密钥时出现此错误,您需要一个 Android 应用密钥。

    【讨论】:

    • 这正是我的问题。谢谢。与我的错误无关,令人困惑的是,Android 站点密钥上方的文本声明:“在您的站点为用户提供的 HTML 代码中使用此站点密钥。”
    • 这肯定是从仅网络版的原始网站复制粘贴而来的。另外,请记住将响应密钥发送到服务器并通过 PHP 进行验证,否则您将在面板中收到警告,并且您的验证不会 100% 安全。
    猜你喜欢
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-30
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    相关资源
    最近更新 更多