更新: リクエスト本文でパラメーターを JSON 文字列として渡す必要があると思っていましたが、実際には URL (エンドポイント文字列) にパラメーターを配置する必要があるため、現在は機能しています。
私はヴァランスが初めてです。D2L ユーザーを作成する Salesforce Apex コード (他の人が作成) があります。コードは正常に動作しています。
userName パラメータを使用して既存の D2L ユーザの情報を取得する Apex メソッドを追加したいと考えています。既存のメソッドをコピーし、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 + '" }');