我正在尝试弄清楚如何使用 Delphi 10 Seattle 和 Indy 向 Plivo 或 Twilio 发送 POST 请求以发送 SMS 消息。当我使用此代码进行 Twilio 工作时,我收到一条未经授权的消息作为返回(请注意,我已编辑了我的用户名和身份验证代码):
procedure TSendTextForm.TwilioSendSms(FromNumber, ToNumber, Sms: string; Var Response: TStrings);
var
apiurl, apiversion, accountsid, authtoken,
url: string;
aParams, aResponse: TStringStream;
mHTTP : TidHttp;
begin
mHTTP := TIdHTTP.Create(nil);
apiurl := 'api.twilio.com';
apiversion := '2010-04-01';
accountsid := 'AC2f7cda1e6a4e74376***************:2b521b60208af4c*****************';
url := Format('https://%s/%s/Accounts/%s/SMS/Messages/', [apiurl, apiversion, accountsid]);
aParams := TStringStream.Create ;
try
aParams.WriteString('&From=' + FromNumber);
aParams.WriteString('&To=' + ToNumber);
aParams.WriteString('&Body=' + Sms);
aResponse := TStringStream.Create;
try
mHTTP.Post(url, aParams, aResponse);
finally
Response.Text := aResponse.DataString;
end;
finally
aParams.Free;
end;
end;
我有类似的 Plivo 代码。两家公司都没有任何德尔福支持。谁能告诉我上面我缺少什么?非常感谢。
麦克风
最佳答案
这里是 Twilio 传道者。
除了上面 @mjn 提出的基本身份验证建议之外,我相信您的示例中还有另外两个问题会给您带来问题:
首先,在上面的代码示例中,您的 URL 将是错误的,因为 accountsid
变量将您的 sid 和 auth token 连接在一起。
accountsid := 'AC2f7cda1e6a4e74376***************:2b521b60208af4c*****************';
虽然您确实想要这样做以便使用基本身份验证,但您不希望将身份验证 token 作为 URL 的一部分。当您创建 url
属性时,您只需将 SID 作为参数放入 URL 中,如下所示:
/Accounts/ACXXXXXXX/
其次,我还建议不要使用 /SMS
资源,因为它已被弃用。而是使用 /Messages
这是较新且具有更多功能的:
/Accounts/ACXXXXXXX/Messages
关于delphi - 使用 Delphi 的 Twilio 或 Plivo SMS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34706128/