背景
由于官方文档已经对如何使用API接口做出了很明确的说明,所以这里我只是记录我在开发过程中一些步骤中遇到的问题和注意的事项,详细步骤请参考官方文档:http://wiki.connect.qq.com/
应用部署和常见问题解决
如果在本机tomcat或其他服务器下部署请配置本地host文件:127.0.0.1 您的回调域名直接部署运行,
将sdk4j_demo目录中的web目录直接放在tomcat服务器的webapp目录即可,配置conf/server.xml文件中的host的context
<Context docBase=”web” path=”/” privileged=”true” antiResourceLocking=”false”></Context>
并将webapp目录下的Root 文件夹暂时移除。
其他服务器请参照服务器自身部署方法。**请将服务器的端口号配置至80端口**。
二、注册开发者账户
如果已经注册,则不会有该步骤,没有的话根据相应的需求进行注册
三、创建应用
首先可以根据官方案例进行编写自己的项目,http://qzonestyle.gtimg.cn/qzone/vas/opensns/res/doc/qqConnect_Server_SDK_java_v2.0.zip(或者可访问:http://wiki.connect.qq.com/sdk下载)
项目代码完成之后,可以继续下边的内容:
上图是一个域名的解析,例如:www.abc.com是我的域名,111.23.23.244是我的主机,图中有三条记录
进行解析,即www.dubboadmin.abc.com;第三条是将二级域名security进行
解析,即www.security.abc.com;;
此时可以看出,dubboadmin和security都是二级域名,一个是通过A记录一个是通过隐形URL的类型,这是因为,在默认的域名解析中,如果通过A记录来绑定域名的话,默认的是绑定到IP的80端口,即111.23.23.244:80,但是一个IP绑定主机上的端口还有很多,一个IP主机机器上可以运行多个项目,这样的话我们就通过隐形URL的方式来将不同的二级域名绑定到不同的端口上,即是将dubboadmin绑定到http://www.abc.com:8012端口上.
这个是我使用的该域名下绑定的8011端口,打开网页时的界面,这里边明显的是一个framenset将doucument中的内容进行包裹,在最外层的html下的head中并没有需要添加的meta信息,而真正的我们的网页信息,是document包裹内的东西,游览前只是根据非80端口的服务器网页内容做了一次封装显示在网页中,而qq在验证网站的时候,找的是该网页head中的meta信息,因此会验证失败。这一点也在官方Demo的ReadMe.txt文件中明确指出了使用80端口。
所以,如果你在开发的过程中也是出现使用IP非80端口绑定的域名遇到了验证失败这个问题,请使用80端口进行测试。
如果你的项目代码中完成了以上部分的话,可以将项目部署到真实的域名下,然后进行验证。
3、项目的配置文件
如果上述过程OK,则在官方demo中还有一个名为:qqconnectconfig.properties的配置文件,这个是需要配置的:
app_ID = 34234123 #自己申请的id
app_KEY = ecfd12341234qewrqwer69db492e1ca #自己申请的key
scope=get_user_info,add_topic,add_one_blog,add_album,upload_pic,list_album,
add_share,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,
get_other_info,get_fanslist,get_idollist,add_idol,del_ido,get_tenpay_addr
#下边还有很多,因为是不需要修改的,所以不具体列出
这里提示:别忘了引用qq登录的jar包
官方Demo中介绍的是该文件要放在src目录下,这是在传统的通过MyEclipse中创建的静态Web项目的做法,如果使用的是spring框架的话,把该文件放在src目录下的话会出现bean加载失败的问题,则需要将该文件放在resource目录下,这样的话,在进行项目启动的时候就可以加载到。
另外,如果将该文件放在了正确的位置,还是出现bean未加载的问题的话,如果出现下边的错误:
Caused by: org.springframework.beans.factory.BeanCreationException:
Could not autowire field:
private com.qq.connect.oauth.Oauth
org.demo.security.controller.LoginController.qqOauth;
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type [com.qq.connect.oauth.Oauth] found for dependency:
expected at least 1 bean which qualifies as autowire candidate for this dependency.
Dependency annotations: {@javax.inject.Inject()}
我的解决方法是手动配置该Oauth,在spring配置文件的相应位置放入
在使用的位置添加:
并将案例中response.sendRedirect(new Oauth().getAuthorizeURL(request));的代码对应的改为response.sendRedirect(qqOauth.getAuthorizeURL(request));(可以将Demo中的代码和最下边我提供的代码进行比较,可以发现修改的地方,就是在Oauth类实例化的时候进行手动的装配bean)
其他问题
1、官方对应错误返回码文档说明如下:http://wiki.connect.qq.com/公共返回码说明
2、如果使用IDEA maven项目的开发方式的话,那么怎么引用qq的依赖jar哪?过程如下:在WEB-INF 目录下创建一个lib目录,将该jar放进去,然后再对应的POM文件中加入:
<dependency>
<groupId>javabuilder</groupId>
<artifactId>javabuilder</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/webapp/WEBINF/lib/Sdk4J.jar</systemPath>
</dependency>
systemPath为自己对应的位置,即可完成对jar的依赖,另外别忘了将在Sdk4J.jar上右键将改jar加入到classpath中。
3、javax.NET.ssl.SSLKeyException
javax.net.ssl.SSLKeyException:
[Security:090477]Certificate chain received from ebanktest.95559.com.cn – 124.74.249.16
was not trusted causing SSL handshake failure
请将jdk的版本设置为sun jdk而不是openjdk
—————————————————分割线——————————————————-另附我在项目中是使用的Controller:
登录连接:
版权声明