正确的数据无法传递到Twilio

问题描述

我正在尝试使用Go的Http包对Twilio进行API调用,看来正确的数据没有到达Twilio。

请求

func startVerification() (string,error) {
    url := fmt.Sprintf("https://verify.twilio.com/v2/Services/%s/Verifications",internal.Config.TwilioServiceSID)
    xx := "Locale=es&To=+1234567890&Channel=sms"
    payload := strings.NewReader(xx)

    log.Println(fmt.Sprintf("Payload = %v",xx))
    client := &http.Client{}
    req,err := http.NewRequest("POST",url,payload)

    if err != nil {
        return "",fmt.Errorf("error occured while creating request %v",err)
    }
    req.SetBasicAuth(internal.Config.TwilioSD,internal.Config.TwilioAuthToken)
    req.Header.Add("Content-Type","application/x-www-form-urlencoded")

    res,err := client.Do(req)
    if err != nil {
        return "",fmt.Errorf("error occured while doing %v",err)
    }
    defer res.Body.Close()
    body,err := IoUtil.ReadAll(res.Body)
    if err != nil {
        return "",fmt.Errorf("error occured while reading %v",err)
    }
    return string(body),nil
}

但是Twilio抱怨的是:

{ “代码”:60200, “ message”:“无效的参数To:1234567890”, “ more_info”:“ https://www.twilio.com/docs/errors/60200”, “状态”:400}

但是,如果我从邮递员发送了请求,则该请求有效。

我怀疑数字中的“ +”号会被删除,但是我不确定Go是个新手,也不了解它的细微差别。

请注意,+1234567890只是我用于此问题的虚拟数字。

解决方法

您可能要为此使用url.Values

params := url.Values{}
params.Add("Locale","es")
params.Add("To","+1234567890")
params.Add("Channel","sms")
payload := strings.NewReader(params.Encode())

https://play.golang.org/p/qAF3qlLIYPP