腾讯开放平台——client id is illegal(100008)!错误解决

今天心血来潮想借腾讯的开放平台熟悉oauth。结果就摆弄了起来,腾讯的文档还是写得很详细的,比我上一次看的已经好很多了。而且还提供了sdk,可以快速调用腾讯的开放平台,既然是学习来的,也就没图快,决定从零开始,手写代码。

一切都是按文档来的,可没想到第一步取access token就受挫了:

代码如下

  1. function get_access_token() {
  2. var req_url =  https://graph.qq.com/oauth2.0/authorize;
  3.  
  4. var req_data = {
  5. response_type: token,//授权类型,此值固定为“token”
  6. client_id: 201981, //申请QQ登录成功后,分配给应用的appid。
  7. redirect_uri: http://www.goodje.com/labs/login/qq_login.php, //成功授权后的回调地址,建议设置为网站首页或网站的用户中心。
  8. /*
  9. 请求用户授权时向用户显示的可进行授权的列表。
  10. 可填写的值是【QQ登录】API文档中列出的接口,以及一些动作型的授权(目前仅有:do_like),如果要填写多个接口名称,请用逗号隔开。
  11. 例如:scope=get_user_info,list_album,upload_pic,do_like
  12. 不传则默认请求对接口get_user_info进行授权。
  13. 建议控制授权项的数量,只传入必要的接口名称,因为授权项越多,用户越可能拒绝进行任何授权。
  14. */
  15. scope: get_user_info,
  16. state: comeonbb//client端的状态值。用于第三方应用防止CSRF攻击,成功授权后回调时会原样带回。
  17. //’display’: ‘mobile’//用于展示的样式。不传则默认展示为为PC下的样式。如果传入“mobile”,则展示为mobile端下的样式
  18. }
  19. window.open(req_url + ? + buildHttpData(req_data));
  20. }

buildHttpData是我自定义的函数,用于把一个js对象转化为格式化的url参数。返回值为 {时间戳}&name1=value1&name2=value2&…

然后拼接req_url 后为: https://graph.qq.com/oauth2.0/authorize?1320327350000&response_type=token&client_id=201981&redirect_uri=http%3A%2F%2Fwww.goodje.com%2Flabs%2Flogin%2Fqq_login.php&scope=get_user_info&state=comeonbb

结果,就有了刚才那种情况了

后来分析了半天,网上也完全找不到解决办法,对比了文档上url的格式,发现除了多了时间戳外一点区别都没有,我想了下可能是参数必须是name=value的形式,服务端才能认识吧,因为url中有这么一段:?1320327350000&

而时间戳主要是之前为了防止ajax请求时读到缓存,所以才自动加上的,以前是从来都没有问题的,去掉了时间戳后,还不行,急了,仔细一看url,参数部分最前头还有个&,去了之后,好了,擦。。。

正确的获取access token url为:https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=201981&redirect_uri=http%3A%2F%2Fwww.goodje.com%2Flabs%2Flogin%2Fqq_login.php&state=comeonbb

而如果把时间戳或者任意一段字符串(只要是url中允许存在的字符,而且不是name=value的形式)放到url末尾,也会有问题

如:https://graph.qq.com/oauth2.0/authorize?response_type=token&client_id=201981&redirect_uri=http%3A%2F%2Fwww.goodje.com%2Flabs%2Flogin%2Fqq_login.php&scope=get_user_info&state=comeonbb&1320327350000

会报lost which in paraml(1000028)!错误

看了下响应头,server: tnginx

tnginx, 腾讯二次开发并优化过的nginx。难道优化的时候去掉了啥东西么,我记得nginx不会这样的呀,理论上这是腾讯的一个bug,不说了,反正是很坑爹的。


你可能感兴趣的:(php)