qq登语音登不上去 显示:param code is wrongwroks or lost

您当前位置: >
> QQ第三方登陆及同步内容到腾讯微博,腾讯空间,朋友网
QQ第三方登陆及同步内容到腾讯微博,腾讯空间,朋友网
来源:程序员人生&& 发布时间: 08:55:59 阅读次数:6463次
1、开发前准备工作
1 进入进行登陆,然后点击网站接入(根据需求,如果需要移动利用接入点击移动利用接入)。以下例子为网站接入。
2 创建利用页面中,将鼠标放在”验证”按钮上,会弹出1个小窗口,将要复制的内容复制下来放在你网站的首页对应位置,然后点击”开始验证”按钮
1 将该代码放入你网站登陆页面
&a href='/oauth2.0/authorize?client_id=YOUR_APPID&response_type=code&scope=all&status=LEO&redirect_uri=YOUR_REDIRECT_URI'&
&img border=&0&alt=&QQ登录& src=&/qzone/vas/opensns/res/img/Connect_logo_1.png&&&/img&
按钮图片下载官方地址:
http://wiki./%E7%BD%91%E7%AB%99%E5%89%8D%E7%AB%AF%E9%A1%B5%E9%9D%A2%E8%A7%84%E8%8C%83#1..E4.BD.BF.E7.94.A8.E8.85.BE.E8.AE.AF.E6.8F.90.E4.BE.9B.E7.9A.84.E6.A0.87.E5.87.86.E2.80.9CQQ.E7.99.BB.E5.BD.95.E2.80.9D.E6.A0.87.E8.AF.86
注意修改a标签中href里面client_id后面的值改成你利用的appid,status的值可以改成你想设置的值,可以用于验证是不是来你利用的要求。redirect_uri是你的回调地址,该回调地址用于成功登陆后的操作。Scope的值还可以是其他值,scope不填时默许为get_user_info。具体请参考官方:http://wiki./api%E5%88%97%E8%A1%A8
2 进入到你网址的QQ登陆页面,点击QQ登陆图标,如果出现回调地址不合法的提示,请参考官方进行回调地址修改,官方地址以下:
http://wiki./%E5%9B%9E%E8%B0%83%E5%9C%B0%E5%9D%80%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E5%8F%8A%E4%BF%AE%E6%94%B9%E6%96%B9%E6%B3%95
1切顺畅出现以下页面:
3 获得_token和openid方法我写在回调action中,具体代码以下:
package com.wingo.action.
import java.io.IOE
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import org.apache.struts2.ServletActionC
import org.slf4j.L
import org.slf4j.LoggerF
import com.monU
import com.wingo.util.ConfigU
public class TencentLoginAction {
&& &private static Logger log = LoggerFactory.getLogger(TencentLoginAction.class);
&& &HttpServletRequest request = ServletActionContext.getRequest();
&& &HttpServletResponse response = ServletActionContext.getResponse();
&& &public String execute(){
&& &&& &String code = request.getParameter(&code&);
&& &&& &request.setAttribute(&code&, code);
&& &&& &/* 获得_token
&& &&& & * 成功后返回信息格式_token=BA03E5Bxxxxxx950&expires_in=7776000&refresh_token=8972279xxxxxxF8752F
&& &&& & * 1般_token有效期是3个月
&& &&& & */
&& &&& &String parames = &grant_type=authorization_code&client_id=&+ConfigUtil.CLIENT_ID+&&client_secret=&+ConfigUtil.CLIENT_SECRET+&&code=&+code+&&redirect_uri=&+ConfigUtil.REDIRECT_URI;
&& &&& &String _result = CommonUtil.httpsRequest(ConfigUtil.TOKEN_URL, &GET&, parames);
&& &&& &if(_result.contains(&callback&)){
&& &&& &/*当返回的_token是callback( {&error&:100019,&error_description&:&code to
token error&} )类似的数据;
&& &&& &* 表示获得_token失败,需要返回点击QQ登陆页面让用户重新登陆授权
&& &&& &*/
&& &&& &&& &try {
&& &&& &&& &&& &response.sendRedirect(&登陆页面&);
&& &&& &&& &} catch (IOException e) {
&& &&& &&& &&& &e.printStackTrace();
&& &&& &&& &}
&& &&& &}else {
&& &&& &&& &String _token = _result.split(&&&)[0];
&& &&& &&& &request.setAttribute(&_token&, _token);
&& &&& &&& &/* 获得openid
&& &&& &&& & * 成功后返回信息格式:callback( {&client_id&:&10xxxxx18&,&openid&:&DDxxxxxxxxxxx587&} );
&& &&& &&& & */
&& &&& &&& &String open_id = CommonUtil.httpsRequest(ConfigUtil.OPENID_URL, &GET&, _token);
&& &&& &&& &request.setAttribute(&openid&, open_id);
&& &&& &&& &
&& &&& &&& &if(open_id.contains(&error&)){
&& &&& &&& &&& &/*当返回的open_id是callback( {&error&:100007,&error_description&:&param
token is wrong or lost &} );类似的数据;
&& &&& &&& &&& & * 表示获得open_id失败,需要返回点击QQ登陆页面让用户重新登陆授权
&& &&& &&& &&& & */
&& &&& &&& &&& &try {
&& &&& &&& &&& &&& &response.sendRedirect(&登陆页面&);
&& &&& &&& &&& &} catch (IOException e) {
&& &&& &&& &&& &&& &e.printStackTrace();
&& &&& &&& &&& &}&& &
&& &&& &&& &}else {
&& &&& &&& &&& &String openId = open_id.substring(open_id.indexOf(&openid&)+9, open_id.lastIndexOf(&&&));
&& &&& &&& &&& &request.setAttribute(&myOpenId&, openId);
&& &&& &&& &&& &//TODO 我们可以将_token与openid1起存入
&& &&& &&& &&& &
&& &&& &&& &&& &/*发布1条不带图片的腾讯微博
&& &&& &&& &&& & *(注意:微博内容140个汉子,即420字节。若在此处@好友,需要填写好友的微博账号而非昵称)
&& &&& &&& &&& & * 默许返回json格式
&& &&& &&& &&& & * 如:{&data&:{&id&:&386&,&time&:},&errcode&:0,&msg&:&ok&,&ret&:0,&seqid&:5818942}
&& &&& &&& &&& & * 其中ret为0表示成功
&& &&& &&& &&& & */
&& &&& &&& &&& &parames = _token+&&oauth_consumer_key=&+ConfigUtil.CLIENT_ID+&&openid=&+openId+&&content=LEO测试发布1条不带图片的腾讯微博&;
&& &&& &&& &&& &String reslut = CommonUtil.httpsRequest(ConfigUtil.ADD_T_URL, &POST&, parames);
&& &&& &&& &&& &request.setAttribute(&reslut&, reslut);
&& &&& &&& &}
&& &&& &return &test&;
上面相干的工具类代码以下:
package com.wingo.
import java.io.BufferedR
import java.io.InputS
import java.io.InputStreamR
import java.io.OutputS
import java.io.UnsupportedEncodingE
import java.net.ConnectE
import java.net.URL;
import javax.net.ssl.HttpsURLC
import javax.net.ssl.SSLC
import javax.net.ssl.SSLSocketF
import javax.net.ssl.TrustM
import org.slf4j.L
import org.slf4j.LoggerF
CommonUtil工具类
&* 通用工具类
&* @author 李欣桦
&* @date 下午9:10:30
public class CommonUtil {
&& &private static Logger log = LoggerFactory.getLogger(CommonUtil.class);
&& & * 发送https要求
&& & * @param requestUrl 要求地址
&& & * @param requestMethod 要求方式(GET、POST)
&& & * @param outputStr 提交的数据
&& & * @return 返回微佩响应的信息
&& &public static String httpsRequest(String requestUrl, String requestMethod, String outputStr) {
&& &&& &try {
&& &&& &&& &// 创建SSLContext对象,并使用我们指定的信任管理器初始化
&& &&& &&& &TrustManager[] tm = { new MyX509TrustManager() };
&& &&& &&& &SSLContext sslContext = SSLContext.getInstance(&SSL&, &SunJSSE&);
&& &&& &&& &sslContext.init(null, tm, new java.security.SecureRandom());
&& &&& &&& &// 从上述SSLContext对象中得到SSLSocketFactory对象
&& &&& &&& &SSLSocketFactory ssf = sslContext.getSocketFactory();
&& &&& &&& &URL url = new URL(requestUrl);
&& &&& &&& &HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
&& &&& &&& &conn.setSSLSocketFactory(ssf);
&& &&& &&& &conn.setDoOutput(true);
&& &&& &&& &conn.setDoInput(true);
&& &&& &&& &conn.setUseCaches(false);
&& &&& &&& &// 设置要求方式(GET/POST)
&& &&& &&& &conn.setRequestMethod(requestMethod);
&& &&& &&& &conn.setRequestProperty(&content-type&, &application/x-www-form-urlencoded&);
&& &&& &&& &// 当outputStr不为null时向输出流写数据
&& &&& &&& &if (null != outputStr) {
&& &&& &&& &&& &OutputStream outputStream = conn.getOutputStream();
&& &&& &&& &&& &// 注意编码格式
&& &&& &&& &&& &outputStream.write(outputStr.getBytes(&UTF⑻&));
&& &&& &&& &&& &outputStream.close();
&& &&& &&& &}
&& &&& &&& &// 从输入流读取返回内容
&& &&& &&& &InputStream inputStream = conn.getInputStream();
&& &&& &&& &InputStreamReader inputStreamReader = new InputStreamReader(inputStream, &utf⑻&);
&& &&& &&& &BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
&& &&& &&& &String str =
&& &&& &&& &StringBuffer buffer = new StringBuffer();
&& &&& &&& &while ((str = bufferedReader.readLine()) != null) {
&& &&& &&& &&& &buffer.append(str);
&& &&& &&& &}
&& &&& &&& &// 释放资源
&& &&& &&& &bufferedReader.close();
&& &&& &&& &inputStreamReader.close();
&& &&& &&& &inputStream.close();
&& &&& &&& &inputStream =
&& &&& &&& &conn.disconnect();
&& &&& &&& &return buffer.toString();
&& &&& &} catch (ConnectException ce) {
&& &&& &&& &log.error(&连接超时:{}&, ce);
&& &&& &} catch (Exception e) {
&& &&& &&& &log.error(&https要求异常:{}&, e);
&& &public static String urlEncodeUTF8(String source){
&& &&& &String result =
&& &&& &try {
&& &&& &&& &result = java.net.URLEncoder.encode(source,&utf⑻&);
&& &&& &} catch (UnsupportedEncodingException e) {
&& &&& &&& &e.printStackTrace();
ConfigUtil工具类:
package com.wingo.
public class ConfigUtil {
&& &//利用appid
&& &public static final String CLIENT_ID= &101XXXXXX18&;
&& &//利用appsecret
&& &public static final String CLIENT_SECRET = &21aXXXXXXXXXXXX86&;
&& &//授权成功后的回调地址
&& &public static final String REDIRECT_URI = &http://loginXXXXXXXXte.action&;
&& &//获得token的url(GET)获得到_token后有效期3个月
&& &public static final String TOKEN_URL = &/oauth2.0/token&;
&& &//获得openid的url(GET)
&& &public static final String OPENID_URL = &/oauth2.0/me&;
&& &//发布1条不带图片的腾讯微博(POST)
&& &public static final String ADD_T_URL = &/t/add_t&;
package com.wingo.
import java.security.cert.CertificateE
import java.security.cert.X509C
import javax.net.ssl.X509TrustM
MyX509TrustManager工具类:
&* 信任管理器
&* @author 李欣桦
&* @date 下午9:15:08
public class MyX509TrustManager implements X509TrustManager {
&& &// 检查客户端证书
&& &public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
&& &// 检查端证书
&& &public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
&& &// 返回受信任的X509证书数组
&& &public X509Certificate[] getAcceptedIssuers() {
上面回调方法中获得_token,openid 时也能够根据自己的需要传其他参数。
官方地址:http://wiki./%E4%BD%BF%E7%94%A8authorization_code%E8%8E%B7%E5%8F%96_token
除发布腾讯微博,还可以利用其他api获得你想要的功能。api列表官方地址:http://wiki./api%E5%88%97%E8%A1%A8。具体使用方法可以参考上面回调地址中发布腾讯微博的代码。
4& 利用腾讯开发平台组件可以分享内容到QQ空间和朋友网(在弹出页面,用户也能够选择是不是分享到腾讯微博)。该组件不需要用户授权也可以使用,当没有腾讯用户是登录状态时(相对腾讯网),弹出的分享界面会让分享用户先登录。官方网址:/intro/share
例子以下:
&script type=&text/javascript&&
(function(){
url:location.href,
showcount:'1',/*是不是显示分享总数,显示:'1',不显示:'0' ,分享总数是以上面的url值统计的总数*/
desc:'我的分享理由',/*默许分享理由(可选),140汉字之内*/
summary:'这是我的摘要',/*分享摘要(可选)*/
title:'这是我的标题',/*分享标题(可选)*/
site:'分享来源:LEO测试',/*分享来源 如:腾讯网(可选)*/
pics:'http://img4./it/u=,&fm=23&gp=0.jpg', /*分享图片的路径(可选)*/
style:'202',/*分享按钮的样式,下面的宽高亦为分享按钮的宽高*/
width:105,
var s = [];
for(var i in p){
s.push(i + '=' + encodeURIComponent(p[i]||''));
document.write(['&a version=&1.0& class=&qzOpenerDiv& href=&http://sns./cgi-bin/qzshare/cgi_qzshare_onekey?',s.join('&'),'& target=&_blank&&分享&/a&'].join(''));
&script type=&text/javascript& src=&&%=basePath%&/common/js/⑴.7.js&&&/script&
&script src=&/qzone/app/qzlike/qzopensl.js#jsdate=& charset=&utf⑻&&&/script&
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
------分隔线----------------------------
------分隔线----------------------------
积分:4232查看: 22776|回复: 5
QQ登录提示param client_id is wrong or lost (100001)!
本帖最后由 l 于
14:20 编辑
QQ登录提示param client_id is wrong or lost (100001)!怎么是什么问题呢?
已经提示登录成功:
但是最后调转却是这样的:
有没有谁知道是什么问题呀?
本帖子中包含更多资源
才可以下载或查看,没有帐号?
这个只能问腾讯了复制代码
好的,谢谢!
是网络的问题
可以看一下模板和qq接口文件\api\oauth\qq对吗,如果是5.0的要用5.0最新的接口文件,如果是4.0的也要用最新的接口文件。需要注意的是如果出现error_code=10001错误,是因为appid填写的不对,看看 是不是有空格或者别的对比一下。
Powered by}

我要回帖

更多关于 something went wrong 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信