两种都用到,前者用于app,后者用于非app.
微信插件代码如下:
public static WeXinAccessTokenResponseEntity GetAccessTokenByCode(string code)
{
//获取的格式为https://api.weixin.qq.com/sns/oa ... =authorization_code
//appid为申请的应用号,secret是应用密钥,code是在调用登陆后获取的参数,grant_type固定为authorization_code
string accessTokenParameterUrl = string.Format("{0}?appid={1}&secret={2}&code={3}&grant_type=authorization_code", accessTokenUrl, appid, secret, code);
HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(accessTokenParameterUrl);
myHttpWebRequest.Method = "GET";
//获取结果
HttpWebResponse result = (HttpWebResponse)myHttpWebRequest.GetResponse();
string resultStr = "";
if (result.StatusCode == HttpStatusCode.OK)
{
using (StreamReader reader = new StreamReader(result.GetResponseStream()))
{
resultStr = reader.ReadToEnd();
//返回的是json格式,这里直接做序列化即可
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Deserialize<WeXinAccessTokenResponseEntity>(resultStr);
}
}
else
{
return new WeXinAccessTokenResponseEntity() { errcode = -1, errmsg = "HTTP错误状态" + result.StatusCode };
}
}
public static WeXinUserInfoResponseEntity GetUserInfoByOpenid(string accessToken, string openid)
{
//获取的格式为https://api.weixin.qq.com/sns/us ... N&openid=OPENID
//access_token是前面获取的调用凭证,openid是用户标识
string parameterUrl = string.Format("{0}?access_token={1}&openid={2}&lang=zh-CN", userinfoUrl, accessToken, openid);
HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(parameterUrl);
myHttpWebRequest.Method = "GET";
//获取结果
HttpWebResponse result = (HttpWebResponse)myHttpWebRequest.GetResponse();
string resultStr = "";
if (result.StatusCode == HttpStatusCode.OK)
{
using (StreamReader reader = new StreamReader(result.GetResponseStream()))
{
resultStr = reader.ReadToEnd();
//返回的是json格式,这里直接做序列化即可
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Deserialize<WeXinUserInfoResponseEntity>(resultStr);
}
}
else
{
return new WeXinUserInfoResponseEntity() { errcode = -1, errmsg = "HTTP错误状态" + result.StatusCode };
}
}
weiXin1.registerApp(appid, (oo, aa) =>
{
if (aa.isError)
{
Toast(aa.error);
}
else
{
weiXin1.loginWithWeixin(LoginWeiXinScope, LoginWeiXinState, (ooo, aaa) =>
{
if (aaa.isError)
{
Toast(aaa.error);
}
else
{
//如果没有错误,会返回一个code,code在args参数中
string code = aaa.args.ToString();
//根据code去获取access_token
WeXinAccessTokenResponseEntity accessTokenEntity = GetAccessTokenByCode(code);
if (accessTokenEntity.errcode == 0)
{
//根据获取到的access token获取用户信息
var userEntity = GetUserInfoByOpenid(accessTokenEntity.access_token, accessTokenEntity.openid);
//这里要判断一下结果是否有错误
if (userEntity.errcode == 0)
{
string unionid = userEntity.unionid;
string avatar = userEntity.headimgurl;
string province = userEntity.province;
string city = userEntity.city;
string nickname = userEntity.nickname;
}
}
}
}
}
微信api代码如下:
private void WeiXinApi_Afterlogin(object sender, WeiXinApiLoginEventArgs e)
{
WeiXinApiMiniLoginInfo weiXinApiMiniLogin = e.MiniLoginInfo;
if (weiXinApiMiniLogin.errcode == 0)
{
WeiXinApiMiniEncryptUserInfo apiMiniEncryptUserInfo = weiXinApiMiniLogin.GetMiniEncryptUserInfo(miniAppId, secret);
if (apiMiniEncryptUserInfo != null)
{
string unionid = apiMiniEncryptUserInfo.unionId;
string avatar = apiMiniEncryptUserInfo.avatarUrl;
string province = apiMiniEncryptUserInfo.province;
string city = apiMiniEncryptUserInfo.city;
string nickname = apiMiniEncryptUserInfo.nickName;
}
} |