2014-09-29 80 views
0

更新:我認爲我必須將參數作爲JSON字符串傳遞到請求正文中,但實際上我需要將它們放在URL(端點字符串)上,因此它現在正在工作。403 GET用戶信息上的令牌錯誤無效

我是新來的瓦朗斯。我有一些創建D2L用戶的Salesforce Apex代碼(由其他人編寫)。代碼工作正常。

我想添加一個Apex方法來檢索使用userName參數的現有D2L用戶的信息。我複製了現有的方法,更改爲GET,將查詢參數設置爲userName,並保持其他所有內容相同。

當我調用我的方法時,出現403無效令牌錯誤。

我是否需要爲GET使用不同的授權參數?例如,我是否還需要包含時間戳?

這裏是Salesforce的頂點部分代碼:

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 + '" }'); 
+1

我已經回覆了您在ValenceUsers論壇上發佈的帖子:https://groups.google.com/forum/#!topic/valenceusers/BcZHCQ4-hOI – 2014-09-30 15:12:59

+0

謝謝,那讓我走上了正確的軌道,我想出了我做錯了什麼。我想我需要傳遞一個JSON字符串,但我當然需要傳遞常規URL參數。 – 2014-10-01 16:18:26

回答

0

我想我必須傳遞的參數作爲請求體JSON字符串,但實際上我需要把它們放在URL(端點字符串),所以它現在工作