首页 > 解决方案 > 使用 java 使用 Twilio API 进行电话验证

问题描述

在项目中实现身份验证并使用 Twilio API 进行电话验证,但遇到了一个错误,我后来使用下面添加的代码进行了一个简单的测试。使用我从他们网站的官方twilio 文档中获得的示例代码进行了基本测试,并且出现了我无法弄清楚的这个错误。

这是示例代码。

import com.twilio.Twilio;
import com.twilio.rest.verify.v2.service.Verification;

public class Login {
    public final static String ACCOUNT_SID = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    public final static String AUTH_TOKEN = "auth_token";

    public static void main(String[] args) {
        Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
        Verification verification = Verification.creator(
                "VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
                "+237677777777",
                "sms")
                .create();

        System.out.println(verification.getStatus());
    }
}

这是错误

/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java -javaagent:/snap/intellij
Exception in thread "main" com.twilio.exception.ApiException: Cannot deserialize instance of `java.util.LinkedHashMap<java.lang.Object,java.lang.Object>` out of START_ARRAY token
 at [Source: (ByteArrayInputStream); line: 1, column: 100] (through reference chain: com.twilio.rest.verify.v2.service.Verification["send_code_attempts"])
    at com.twilio.rest.verify.v2.service.Verification.fromJson(Verification.java:167)
    at com.twilio.rest.verify.v2.service.VerificationCreator.create(VerificationCreator.java:201)
    at com.twilio.rest.verify.v2.service.VerificationCreator.create(VerificationCreator.java:23)
    at com.twilio.base.Creator.create(Creator.java:45)
    at Login.main(Login.java:14)
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.LinkedHashMap<java.lang.Object,java.lang.Object>` out of START_ARRAY token
 at [Source: (ByteArrayInputStream); line: 1, column: 100] (through reference chain: com.twilio.rest.verify.v2.service.Verification["send_code_attempts"])
    at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
    at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1442)
    at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1216)
    at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1126)
    at com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromEmpty(StdDeserializer.java:639)
    at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:360)
    at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:29)
    at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:530)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:528)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:417)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1287)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:326)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4202)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3242)
    at com.twilio.rest.verify.v2.service.Verification.fromJson(Verification.java:165)
    ... 4 more

Process finished with exit code 1

请任何帮助将不胜感激,我是 Twilio 的新手。

标签: javatwiliotwilio-api

解决方案


Halo 发现了这个 bug。同时,虽然 Twilio 处理,如果您遇到相同的问题,您可以使用这种方式获取验证码 :)
我使用 java Process 类curl 发布

这是代码。

void method(String var) throws IOException {

  String command ="curl -X POST https://verify.twilio.com/v2/Services/" + SERVICE_ID + "/Verifications --data-urlencode To=" + phoneNumber +
                        " --data-urlencode Channel=sms -u " + ACCOUNT_SID + ":" + AUTH_TOKEN;

  Process process = Runtime.getRuntime().exec(command);
  process.getInputStream();
// some code
}

推荐阅读