【WPF】—腾讯微博授权后如何获取验证码 高分求教@

zjybushiren88888 2012-04-11 07:04:43

/// <summary>
/// 使用默认的API地址同步获取未授权的Request Token.
/// 如果获取成功, 对象实例的Token与TokenSecret属性值将改为request_token与request_secret
/// </summary>
/// <param name="callback">返回地址</param>
/// <returns>是否获取request token成功</returns>
public bool GetRequestToken(string callback)
{
return this.GetRequestToken("https://open.t.qq.com/cgi-bin/request_token", callback);
}

/// <summary>
/// 同步获取未授权的Request Token.
/// 如果获取成功, 对象实例的Token与TokenSecret属性值将改为request_token与request_secret
/// </summary>
/// <param name="requestUrl">API请求地址</param>
/// <param name="callback">返回地址</param>
/// <returns>是否获取request token成功</returns>
public bool GetRequestToken(string requestUrl, string callback)
{
this.Token = string.Empty;
this.TokenSecret = string.Empty;

NameValueCollection responseData;
Parameters parameters = new Parameters();
parameters.Add("oauth_callback", string.IsNullOrEmpty(callback) ? "null" : callback);
var r = this.GetOAuthToken(requestUrl, parameters, out responseData);

return r;
}

/// <summary>
/// 获取授权Token
/// </summary>
/// <param name="requestUrl">API请求地址</param>
/// <param name="parameters"></param>
/// <param name="responseData"></param>
/// <returns></returns>
private bool GetOAuthToken(string requestUrl, Parameters parameters, out NameValueCollection responseData)
{
this.LastError = null;
responseData = null;
parameters.Add("oauth_consumer_key", this.AppKey);
parameters.Add("oauth_signature_method", "HMAC-SHA1");
parameters.Add("oauth_timestamp", Util.GenerateTimestamp());
parameters.Add("oauth_nonce", Util.GenerateRndNonce());
parameters.Add("oauth_version", "1.0");
parameters.Add("oauth_signature", this.GenerateSignature("GET", requestUrl, parameters));
string url = string.Concat(requestUrl, "?", parameters.BuildQueryString(true));

SyncHttpRequest request = new SyncHttpRequest(url, this.Charset);
try
{
string response = request.Get();
if (!string.IsNullOrEmpty(response))
{
responseData = HttpUtility.ParseQueryString(response, this.Charset);
this.Token = responseData["oauth_token"];
this.TokenSecret = responseData["oauth_token_secret"];
return !string.IsNullOrEmpty(this.Token) && !string.IsNullOrEmpty(this.TokenSecret);
}
}
catch (Exception ex)
{
this.LastError = ex;
}
return false;
}

/// <summary>
/// 使用默认的API地址同步获取授权的Access Token,调用此方法时必须设置Token与TokenSecret属性的值为request_token与request_secret
/// 如果获取成功, 对象实例的Token与TokenSecret属性值将改为access_token与access_secret
/// </summary>
/// <param name="verifier">请求授权request token时返回的验证码</param>
/// <param name="name">微博帐户名</param>
/// <returns>是否获取Access Token成功</returns>
public bool GetAccessToken(string verifier, out string name)
{
return this.GetAccessToken("https://open.t.qq.com/cgi-bin/access_token", verifier, out name);
}
/// <summary>
/// 同步获取授权的Access Token,调用此方法时必须设置Token与TokenSecret属性的值为request_token与request_secret
/// 如果获取成功, 对象实例的Token与TokenSecret属性值将改为access_token与access_secret
/// </summary>
/// <param name="requestUrl">API请求地址</param>
/// <param name="verifier">请求授权request token时返回的验证码</param>
/// <param name="name">微博帐户名</param>
/// <returns>是否获取Access Token成功</returns>
public bool GetAccessToken(string requestUrl, string verifier, out string name)
{
NameValueCollection responseData;
Parameters parameters = new Parameters();
parameters.Add("oauth_token", this.Token);
parameters.Add("oauth_verifier", verifier);
var r = this.GetOAuthToken(requestUrl, parameters, out responseData);
name = responseData == null ? null : responseData["name"];
return r;
}

///
///之后操作API没有问题


这里的 verifier(请求授权request token时返回的验证码)无法获得 即如何把用户程序内输入的账号密码请求后返回verifier验证码 腾讯微博的API/SDK没有提供 暂时没有研究出来
不想用WPF内嵌或者弹出网页 那样不妥 新浪微博提供的比较完全 可以解决 即 userId & passwd 求前辈不吝赐教 多谢各位了
...全文
721 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ci昵称Void 2014-04-11
  • 打赏
  • 举报
回复
引用 17 楼 lai444132348 的回复:
呜呜,楼主过了两年了,解决了么,遇到同样问题。 授权码!!!
整整两年,4.11
Ci昵称Void 2014-04-11
  • 打赏
  • 举报
回复
呜呜,楼主过了两年了,解决了么,遇到同样问题。 授权码!!!
boboyang24 2013-01-31
  • 打赏
  • 举报
回复
楼主问题解决了吗?我现在也遇到和你之前一样的问题。求解决。。。。
linfssay 2013-01-10
  • 打赏
  • 举报
回复
楼主,你好,请问这个问题解决了吗? 不吝赐教
taijianyu 2012-11-15
  • 打赏
  • 举报
回复
楼主解决没? 加我,我也在研究这个问题qq:529071918,多谢!
anzhiqiang_touzi 2012-04-12
  • 打赏
  • 举报
回复
没做过
zjybushiren88888 2012-04-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
腾讯提供的sdk里面不是没这个问题吗
[/Quote]

他的官方SDK是弹网页获取的验证码丫
lcq874398291 2012-04-12
  • 打赏
  • 举报
回复
腾讯提供的sdk里面不是没这个问题吗
zjybushiren88888 2012-04-12
  • 打赏
  • 举报
回复
在线等
zjybushiren88888 2012-04-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
这种SDK可以x掉了
[/Quote]
官方提供的SDK真心可以X掉了 抄袭的还这么...
zjybushiren88888 2012-04-12
  • 打赏
  • 举报
回复
var requester = new HttpGet(APIUri.Authorize);
requester.Params.Add(Constants.OAuthToken, requestToken);
requester.Params.Add("userId", UrlEncode(userName));requester.Params.Add("passwd", UrlEncode(password));requester.Params.Add(Constants.OAuthCallback, "xml");
以上新浪微博没有问题


腾讯微博的账户信息 未知参数和加密方式诶 不会这么坑爹吧 求教
nonocast 2012-04-12
  • 打赏
  • 举报
回复
这种SDK可以x掉了
zjybushiren88888 2012-04-12
  • 打赏
  • 举报
回复
这是新浪微博的验证码获取方式

/// <summary>
/// Authorizes the un-authorized request token with a SINA passport(user name and password).
/// </summary>
/// <remarks>
/// See http://open.weibo.com/wiki/Oauth/authorize
/// </remarks>
/// <param name="requestToken">The un-authorized request token previously obtained.</param>
/// <param name="userName">The user name of sina passport.</param>
/// <param name="password">The password of sina passport.</param>
/// <returns>The authorization code(aka oauth_verifier).</returns>
public static string Authorize(string requestToken, string userName, string password)
{
ValidateArgument(requestToken, "requestToken");
ValidateArgument(userName, "userName");
ValidateArgument(password, "password");

var requester = new HttpGet(APIUri.Authorize);
requester.Params.Add(Constants.OAuthToken, requestToken);
requester.Params.Add("userId", UrlEncode(userName));
requester.Params.Add("passwd", UrlEncode(password));
requester.Params.Add(Constants.OAuthCallback, "xml");

try
{
var response = requester.Request();
var match = Regex.Match(response, Constants.RetrieveAuthorizationCodePattern, RegexOptions.CultureInvariant);
if (match.Success)
return match.Groups[1].Value;
else
throw new AMicroblogException(LocalErrorCode.CredentialInvalid, "Invalid user name or password.");
}
catch
{
throw new AMicroblogException(LocalErrorCode.CredentialInvalid, "Invalid user name or password.");
}
}


public static string UrlEncode(string input)
{
StringBuilder newBytes = new StringBuilder();
var urf8Bytes = Encoding.UTF8.GetBytes(input);
foreach (var item in urf8Bytes)
{
if (IsReverseChar((char)item))
{
newBytes.Append('%');
newBytes.Append(ByteToHex(item));

}
else
newBytes.Append((char)item);
}

return newBytes.ToString();
}





腾讯微博的请前辈们指教下 -,#
zjybushiren88888 2012-04-12
  • 打赏
  • 举报
回复
up...
zjybushiren88888 2012-04-11
  • 打赏
  • 举报
回复
新浪没有问题 我想问的是腾讯微博
如何把用户WPF程序内账号密码发送请求后返回verifier验证码
机器人 2012-04-11
  • 打赏
  • 举报
回复
新浪微博的是在Response Body里以<oauth_verifier>(.+?)</oauth_verifier>格式返回的。

自己用正则截取一下
zjybushiren88888 2012-04-11
  • 打赏
  • 举报
回复
没人回答么=.-
zjybushiren88888 2012-04-11
  • 打赏
  • 举报
回复
多谢各位前辈不吝赐教

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧