Android连接到MySQL并执行基本的添加和删除查询操作
准备工作 导入 jar 包 下载 mysql-connector-java 包(吃过亏的表示推荐 5.x.x 版本,8.x.x 版本会出现挺多问题的):mysql-connector-java 下载地
顺晟科技
2021-06-16 10:39:51
217
本文实例讲述了C#实现的微信网页授权操作逻辑封装。分享给大家供大家参考,具体如下:一、微信网页授权登录前提:1.已经获取的接口权限,如果是测试账号就已经有权限了2.配置接口的授权域名更多说明可以参考方倍工作室:http://www .cn博客。com/txw 1958/p/weixin 71-oauth 20。超文本标记语言或者官网API:http://MP。微信。QQ。com/wiki/17/c0f 37d 5704 f 0 b 64713 D5 d2c 37b 468d 75。超文本标记语言步骤:1.用户同意授权,获取代码2。根据密码获取access_token及当前操作用户的openid、unionid3 .根据信息获取用户基本信息(如果需要的话)注:如果想在网站使用扫一扫,授权登录,可以讲_oauth .GetCodeUrl()授权地址生成二维码来使用C#封装微信网页授权登录使用实例:
string appid=' wx 145 B4 A8 FD 07 b 24 e 8 ';
string app secret=' Fe 6951 dcb 99772411 c 42 f 724 b 1336065 ';
字符串重定向_url='配置域名下的回调地址;
OAuthManage _ oauth=null
///摘要
///控制器构造函数
////摘要
公共用户控制器()
{
_oauth=new OAuthManage(appid,appsecrect,redirect _ URL);
}
///摘要
///授权登录
////摘要
///返回/返回
公共操作结果身份验证登录()
{
ViewBag.url=_ oauth .GetCodeUrl();
返回视图();
}
///摘要
///回调处理
////摘要
///返回/返回
public ActionResult OAuthHandle()
{
字符串结果=' ';
//注册事件处理
_oauth .OnError=(e)=
{
字符串消息=
异常inner=e;
while (inner!=null)
{
消息=内部。消息;
内心=内心内部异常
}
结果=msg
登录操作. write(msg);
};
_oauth .OnGetTokenSuccess=(令牌)=
{
结果=' br/';
结果=令牌tojsonString();
};
_oauth .OnGetUserInfoSuccess=(用户)=
{
结果=' br/';
结果=用户tojsonString();
};
//第二步
_oauth .GetAccess _ Token();
//第三步
_oauth .GetUserInfo();
//显示结果
ViewBag.msg=结果
返回视图();
}
封装代码类定义:
命名空间WXPackage
{
///摘要
///网页授权逻辑处理,
///处理三步操作,处理成功,返回用户基本信息
////摘要
公共类OAuthManage
{
#地区基本信息定义
///摘要
///公众号的标识
////摘要
私有字符串应用编号
///摘要
///公众号的密钥
////摘要
私有字符串秘密;
///摘要
///回调全球资源定位器(统一资源定位符)地址
////摘要
私有字符串重定向uri)
///摘要
///获取微信用户基本信息使用snsapi_userinfo模式
///如果使用静默授权,无法获取用户基本信息但可以获取到信息
////摘要
私有字符串范围;
public OAuthManage(string appid,string appsecret,string redirect_uri,bool IsUserInfo=true)
{
this.appid=appid
this.secret=appsecret
this.redirect_uri=重定向_ uri
this.scope=IsUserInfo?SNS API _用户信息' : ' SNS API _ base
}
#endregion
#地区请求过程信息
///摘要
///步获取到的密码值
////摘要
公共字符串代码{获取设置;}
///摘要
///第二步获取到的access_token及相关数据
////摘要
公共OAuth访问_令牌令牌数据=空;
#endregion
#地区事件定义
///摘要
///当处理出现异常时,触发
////摘要
公共操作异常OnError=空;
///摘要
///当获取访问令牌成功是触发
////摘要
public action oauth access _ Token OnGetokenSuccesss=null;
///摘要
///当获取用户信息成功时触发
////摘要
public actionoauthuuseongetuserinfosuccesss=null;
#endregion
#地区第二步,回调处理
///摘要
///第二步,通过密码换取网页授权access_token
////摘要
public void GetAccess_Token()
{
尝试
{
//1.处理跳转
这个代码=请求帮助者.getStrIng(' code ');
if (string .IsNullOrEmpty(此。代码))
引发新的异常('获取密码参数失败或用户禁止授权获取基本信息');
//1.发送获取access_token请求
string URL=GetACCESS _ TokenURL();
字符串结果=NetHelper .get(URL);
//2.解析相应结果
标记数据=JsonConvert .反序列化对象授权访问令牌(结果);
if(令牌数据==null)
引发新的异常('反序列化结果失败,返回内容为:' result);
//3.获取成功
如果(OnGetokenSuccess!=null)
OnGetTokenSuccess(令牌数据);
}
捕获(异常ex)
{
错误('第二步,通过密码换取网页授权access_token异常,ex);
}
}
///摘要
///刷新当前access_token
////摘要
公共oauth访问_令牌刷新访问_令牌()
{
尝试
{
//1.发送请求
string URL=GetReferesh _ TokenURL();
字符串结果=NetHelper .get(URL);
//2.解析结果
oauth access _ Token Token=JSonConvert .反序列化对象授权访问令牌(结果);
if (token==null)
引发新的异常('反序列化结果失败,返回内容:' result);
返回令牌;
}
捕获(异常ex)
{
错误('刷新当前access_token失败,ex);
返回空
}
}
#endregion
#地区第三步,获取用户基本信息
///摘要
///第三步,获取基本信息
////摘要
public void GetUserInfo()
{
尝试
{
//1.发送得到请求
string URL=GetUserInfoURL();
字符串结果=NetHelper .get(URL);
//2.解析结果
OAuthUser user=JsonConvert .反序列化对象用户(结果);
if (user==null)
引发新的异常('反序列化结果失败,返回内容:' result);
//3.获取成功
if (OnGetUserInfoSuccess!=null)
OnGetUserInfoSuccess(用户);
}
捕获(异常ex)
{
错误('第三步、获取用户基本信息异常,ex);
}
}
#endregion
#地区静态方法
///摘要
///验证授权凭证是否有效
////摘要
///param name=' access _ token ' access _ token/param
///param name='openid '用户针对当前公众号的openid/param
///返回/返回
公共静态bool CheckWebAccess _ Token(字符串Access _ Token,字符串openid)
{
尝试
{
字符串url=字符串。格式(' https://API。微信。QQ。com/SNS/auth?access_token={0}openid={1} ',
access_token,
OpenID);
字符串结果=NetHelper .get(URL);
作业对象对象=作业对象.解析(结果);
int errcode=(int)obj[' errcode '];
return errcode==0;
}
捕获(异常ex)
{
引发新的异常(',' ex .消息);
}
}
#endregion
#地区获取请求连接
///摘要
///获取密码的全球资源定位器(统一资源定位符)地址
////摘要
///返回/返回
公共字符串GetCodeUrl()
{
字符串url=字符串. format(' https://open。微信。QQ。com/connect/oauth 2/authorize?appid={ 0 } redirect _ uri={ 1 } response _ type=code scope={ 2 } STATE=STATE #微信_重定向',
this.appid,
安全帮助.UrlEncode(this.redirect_uri),
这个。范围);
返回全球资源定位器(Uniform Resource Locator)
}
///摘要
///获取access_token的全球资源定位器(统一资源定位符)地址
////摘要
///返回/返回
私有字符串GetAccess_TokenUrl()
{
字符串url=字符串. format(' https://API。微信。QQ。com/SNS/oauth 2/access _ token?appid={ 0 } secret={ 1 } code={ 2 } grant _ type=authorization _ code ',
this.appid,
这个秘密,
这个。代码);
返回全球资源定位器(Uniform Resource Locator)
}
///摘要
///获取刷新AccessToke的地址
////摘要
///返回/返回
私有字符串GetReferesh_TokenUrl()
{
字符串url=字符串. format(' https://API。微信。QQ。com/SNS/oauth 2/refresh _ token?appid={ 0 } grant _ type=refresh _ token refresh _ token={ 1 } ',
this.appid,
这个令牌数据.刷新_令牌
);
返回全球资源定位器(Uniform Resource Locator)
}
///摘要
///获取用户基本信息地址
////摘要
///返回/返回
私有字符串GetUserInfoUrl()
{
字符串url=字符串。格式(' https://API。微信。QQ。com/SNS/用户信息?access _ token={ 0 } OpenID={ 1 } lang=zh _ CN ',
这个令牌数据.访问_令牌,
这个令牌数据。open id);
返回全球资源定位器(Uniform Resource Locator)
}
#endregion
私有无效错误(字符串消息,内部异常)
{
如果(这个.OnError!=null)
{
这个OnError(新异常(消息,内部));
}
}
}
///摘要
///授权之后获取用户基本信息
////摘要
公共类OAuthUser
{
公共字符串openid { get设置;}
公共字符串昵称{获取设置;}
public int sex { get设置;}
公共字符串省份{获取设置;}
公共字符串城市{ get设置;}
公共字符串{ get设置;}
public string headimgurl { get设置;}
///摘要
///用户特权信息,json数组
////摘要
public JArray特权{获取设置;}
public string unionid { get设置;}
}
///摘要
///获取访问_令牌或者刷新返回的数据对象
////摘要
公共类OAuthAccess _令牌
{
公共字符串access _ token { get设置;}
public int expires _ in { get设置;}
公共字符串refresh _ token { get设置;}
///摘要
///用户针对当前公众号的标识
///关注后会产生,返回公众号下页面也会产生
////摘要
公共字符串openid { get设置;}
公共字符串范围{获取设置;}
///摘要
///当前用户的unionid,只有在用户将公众号绑定到微信开放平台帐号后
////摘要
public string unionid { get设置;}
}
}
28
2021-08
28
2021-08
28
2021-08
28
2021-08
16
2021-06
16
2021-06