帖子
帖子
用户
博客
课程
显示全部楼层
2
帖子
0
勋章
20
Y币

令牌获取方式问题(@GetExchange不行,httpClient.execute 可以)

[复制链接]
发表于 2024-2-7 12:34:59
为什么用这种方式获取令牌,一直返回签名不正确?(最总请求前,Get url 都没有问题, 二种方式都一样)@GetExchange("/open-auth/selfAppAuth/base/v1/getAccessToken")
OpenApiAccessTokenResponse getToken(@RequestParam String signature, @RequestParam String appKey, @RequestParam String timestamp);

BIP348167
2
帖子
0
勋章
20
Y币
最佳答案
问题原因找到了。签名里带有%, @GetExchange 底层对Get参数,都进行了 编码。所以%在字符集UTF-8编码后变成了 %25 用友后台应该不做解码处理。所以造成了签名 解码时有问题。报签名错误。 而Demo里对参数都没进行编码处理。所以都正常。 解决方法针对这个请求暂时设置对参数不进行编码。 factoryEx.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);
268
帖子
3
勋章
903
Y币
这个和怎么访问没关系,签名不正确,说明生成的signature有问题,参考示例代码试下吧,如果确实有问题,可以提工单,附上授权key,密钥等信息核实下。这是java示例代码,请参考:https://community.yonyou.com/for ... ;searchLogId=539397
2
帖子
0
勋章
20
Y币
YonJiao · 2024-2-7 12:59这个和怎么访问没关系,签名不正确,说明生成的signature有问题,参考示例代码试下吧,如果确实有问题,可以提工单,附上授权key,密钥等信息核实下。这是java示例代码,请参考:https://community.yonyou.com/forum. ...

我也知道合怎么访问没问题。
现在是这样的  签名生成都同一个函数。
@GetExchange 跟踪最后提交前, url  跟   
httpClient.execute  一样。 意思就是 参数什么的都没区别,除了2次生成密码不同外(肯定不同)。 就一个httpGet 请求而已. 你们自己可以搞一个测试一下。
其它请求都没问题。 就这个令牌返回一直报签名错误。很奇怪
268
帖子
3
勋章
903
Y币
BIP348167 · 2024-2-7 13:07我也知道合怎么访问没问题。
现在是这样的  签名生成都同一个函数。
@GetExchange 跟踪最后提交前, url  跟   

对,正如您所说,就是一个get请求,所以只要是http的get请求方式,并且参数传值没问题,就能访问通。至于您客户端使用的哪种方式封装的请求,这个要您自己排查,另外,可以生产相同的签名,只要传个相同的时间戳,appkey,密钥是相同的,签名就一样。你自己打断点试下吧,确定是服务端问题,提工单即可,感谢您的理解与支持
2
帖子
0
勋章
20
Y币
YonJiao · 2024-2-7 13:16对,正如您所说,就是一个get请求,所以只要是http的get请求方式,并且参数传值没问题,就能访问通。至于您客户端使用的哪种方式封装的请求,这个要您自己排查,另外,可以生产相同的签名,只要传个相同的时间戳, ...

找到问题了, 因为签名里有%, GetExchange 底层标准化处理对于Get参数会根据字符集进行编码处理, 导致%变成UTF-8编码后的结果%25。  你们Demo里都没有对参数进行编码处理。 你们后台解码时,也没去解码处理。所以你们Demo的方式都是正常返回。 我用别的就报签名错误了。
2
帖子
0
勋章
20
Y币
问题原因找到了。签名里带有%,   
@GetExchange 底层对Get参数,都进行了 编码。所以%在字符集UTF-8编码后变成了 %25
用友后台应该不做解码处理。所以造成了签名 解码时有问题。报签名错误。
而Demo里对参数都没进行编码处理。所以都正常。
解决方法针对这个请求暂时设置对参数不进行编码。
factoryEx.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);
您需要登录后才可以回帖 登录

本版积分规则