2014-09-29 35 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(端点字符串),所以它现在工作