极光短信验证码验证问题


(火车飞侠) #1

我用java sdk调用验证码验证的时候报如下错误:

2019-04-09 22:06:09,346 - cn.jiguang.common.connection.NativeHttpClient -0 [main] WARN - Got error response - responseCode:403, responseContent:{“is_valid”:false,“error”:{“code”:50026,“message”:“wrong msg_id”}}
2019-04-09 22:06:09,348 - cn.jiguang.common.connection.NativeHttpClient -2 [main] ERROR - Request is forbidden! Maybe your appkey is listed in blacklist or your params is invalid.

我传的msg_id是发送验证码返回的,为什么会报这个错呢?验证码发送是可以的,手机也能收到验证码,我是试用用户,还没有充值,只是测试一下,是因为这个原因么?不充值不能用验证验证码api?


#2

根据这个报错看是 MessageID有误,你提供下你所调的 API,和所传的参数


(火车飞侠) #4

image

采用的是后端java调用sdk的方式,参考的是github上的例子
msgid 为729330760063 code为452068


#5

你用的 Java SDK 是哪一个版本的
是用的官方的这个吗

另外你是怎么传值的,是否存在值的类型不符合要求


(火车飞侠) #6

image
是1.2.8版本,就是你发的这个版本,参数传的都是字符串类型


(火车飞侠) #7

怎么解决啊,我这等着用呢:sob:


#8

我使用 crul 请求是可以的,我查询你的参数的数字本身没有问题,看下你 MessageID 和 code 是怎么赋值的

你服务端请求后有打印你完整的请求信息吧?就在你报错之前,应该会打印调用的 API 地址和所传参数,发出来看看


(火车飞侠) #9

您好,我用的你们官方提供的java sdk调用的,下面是我调用的方式,您看下有什么问题,包的版本是jsms-client-1.2.8
这是发送验证码,采用的是自己定义验证码的方式

public static String sendTemplateSMS(String mobile,String code)  {
    String msgId = "";

    SMSClient client = new SMSClient(masterSecret, appkey);
    SMSPayload payload = SMSPayload.newBuilder()
            .setMobileNumber(mobile)
            .setTempId(1)
            .addTempPara("code", code)
            .build();
    try {
        SendSMSResult res = client.sendTemplateSMS(payload);
        msgId = res.getMessageId();
        log.info(res.toString());

    } catch (APIRequestException e) {
        log.error("Error response from JPush server. Should review and fix it. ", e);
        log.info("HTTP Status: " + e.getStatus());
        log.info("Error Message: " + e.getMessage());
    } catch (APIConnectionException e) {
        log.error("Connection error. Should retry later. ", e);
    }
    return msgId;
}

这是验证验证码的调用方法

public static String sendValidSMSCode(String msgId,String code) {
    SMSClient client = new SMSClient(masterSecret, appkey);
    try {
        ValidSMSResult res = client.sendValidSMSCode(msgId, code);
        System.out.println(res.toString());
        log.info(res.toString());
        return res.toString();
    } catch (APIConnectionException e) {
        e.printStackTrace();
        System.out.println(e.getMessage());
        log.error("Connection error. Should retry later. ", e);
        return  e.toString();
    } catch (APIRequestException e) {
        e.printStackTrace();
        System.out.println(e.getStatus() + " errorCode: " + e.getErrorCode() + " " + e.getErrorMessage());
        log.error("Error response from JPush server. Should review and fix it. ", e);
        log.info("HTTP Status: " + e.getStatus());
        log.info("Error Message: " + e.getMessage());
        return e.getStatus() + " errorCode: " + e.getErrorCode() + " " + e.getErrorMessage();
    }
}

#10

采用的是自己定义验证码的方式???

自定义验证码?自定义的验证码不能调验证码的 API 去验证,只有极光自动生成的验证码才可以,因为我们生成的你们服务端是不知道是哪个 code 的,所以需要调我们的 API来验证。

但你自己自定义的验证码,你是知道是什么值的,你自己服务端和客户端传过来的值直接对比即可


(火车飞侠) #11

哦,好的,多谢