更新:我以为我必须在请求正文中将参数作为 JSON 字符串传递,但实际上我需要将它们放在 URL(端点字符串)上,所以它现在可以工作了。
我是新来的瓦伦斯。我有一些创建 D2L 用户的 Salesforce Apex 代码(由其他人编写)。代码工作正常。
我想添加一个 Apex 方法来使用 userName 参数检索现有 D2L 用户的信息。我复制了现有方法,更改为 GET,将查询参数设置为 userName,并保持其他所有内容相同。
当我调用我的方法时,我收到 403 Invalid Token 错误。
我需要为 GET 使用不同的授权参数吗?例如,我还需要包含时间戳吗?
这是 Salesforce Apex 代码的一部分:
public static final String USERS = '/d2l/api/lp/1.0/users/';
String TIMESTAMP_PARAM_VALUE = String.valueOf(Datetime.now().getTime()).substring(0,10);
String method = GETMETHOD;
String action = USERS;
String signData = method + '&' + action + '&' + TIMESTAMP_PARAM_VALUE;
String userSignature = sign(signData,USER_KEY);
String appSignature = sign(signData,APP_KEY);
String SIGNED_USER_PARAM_VALUE = userSignature;
String SIGNED_APP_PARAM_VALUE = appSignature;
String endPoint = DOMAIN + action + '?' +
APP_ID_PARAM + '=' + APP_ID + '&' +
USER_ID_PARAM + '=' + USER_ID + '&' +
SIGNED_USER_PARAM + '=' + SIGNED_USER_PARAM_VALUE + '&' +
SIGNED_APP_PARAM + '=' + SIGNED_APP_PARAM_VALUE + '&' +
TIMESTAMP_PARAM + '=' + TIMESTAMP_PARAM_VALUE;
HttpRequest req = new HttpRequest();
req.setMethod(method);
req.setTimeout(30000);
req.setEndpoint(endPoint);
req.setBody('{ "orgDefinedId"' + ':' + '"' + person.Id + '" }');