我想从Twilio发送SMS,因为它们已经为Java,.Net,Node等构建了库,以便在掌握这些技术的情况下可以使用它们。
但是我想在Salesforce Apex中做同样的事情,并试图弄清楚如何构建Http参数来进行授权。
我尝试使用Twilio文档中给出的cURL示例进行映射,但找不到Auth令牌的标题键。
下面是我当前的代码,正在寻找如何设置身份验证参数。
req.setEndpoint(baseURL + '/2010-04-01/Accounts/account_sid/Messages.json');
req.setMethod('POST');
req.setHeader('to', EncodingUtil.urlEncode('+to_number', 'UTF-8'));
req.setHeader('from', EncodingUtil.urlEncode('+from_number', 'UTF-8'));
Http ht = new Http();
HttpResponse res = ht.send(req);
更新后的请求:
Blob headerValue = Blob.valueOf('my-twilio-account-sid:my-twilio-auth-token');
String authorizationHeader = 'BASIC ' + EncodingUtil.base64Encode(headerValue);
req.setHeader('Authorization', authorizationHeader);
req.setHeader('Content-Type', 'application/x-www-form-urlencoded');
String body = EncodingUtil.urlEncode('From=+from_number&To=+to_number&Body=Sample text from twilio', 'UTF-8');
req.setBody(body);
Http ht = new Http();
HttpResponse res = ht.send(req);
回复说
错误请求:需要“发件人”电话号码。
答案 0 :(得分:1)
电话号码不在标题中。
对于标题,您将需要
Content-Type: "application/x-www-form-urlencoded"
然后您将需要另一个标头进行授权
Authorization: auth-string
其中auth-string
是字符串Basic
后跟空格的组合,后跟空格,后跟twilio-account-sid:twilio-auth-token
的base64编码(用冒号加入的Twilio凭据替换),因此标头将看起来像
Authorization: "Basic ABCiDEdmFGHmIJKjLMN2OPQwR2S3TUVzABliCDE3FGc1HIo2JKL2MjNwOPcxQRSwTUc1Vzc0XmYhZAB3CDElFGH1Jw=="
POST请求的body
应该包含密钥,值对To
,From
和Body
,类似于
"From=" + twilio-phone-number + "&To=" + to-number + "&Body=" + message-body
(替换为电话号码和消息的字符串值)。