控制器端
此项目使用的是.Net FrameWork4.5、MVC5
微信登录界面
public ActionResult WX()
{
return View();
}
绑定微信时调用的方法
//wx.aaa.cn是你这个微信公众号对应的网址
public ActionResult WXBind()
{
string appid = "你的appId";
return Redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + Url.Encode("http://wx.aaa.cn/控制器/WxRegisterAndLogin") + "&response_type=code&scope=snsapi_userinfo&state=state#wechat_redirect");
}
判断是否有code如果数据库里有对应的用户则直接用这个用户账号登录,如果没有则调用对应的微信登录。
//传入的是openid和返回路径
public async Task<ActionResult> WxRegisterAndLogin(string code, string ReturnUrl = "")
{
string url = ReturnUrl;
string appid = ConfigurationManager.AppSettings["配置文件里的微信appid名"];
string secret = ConfigurationManager.AppSettings["配置文件里的微信secret名 "];
var client = new System.Net.WebClient();
client.Encoding = System.Text.Encoding.UTF8;
string url2 = GetAccessTokenUrl(appid, secret, code);
var data = client.DownloadString(url2);
var obj = JsonConvert.DeserializeObject<Dictionary<string, string>>(data);
string accessToken;
if (!obj.TryGetValue("access_token", out accessToken))
{
#if DEBUG
// httpContext.Response.Write("构造网页授权获取access_token的URL时出错");
// httpContext.Response.End();
#endif
}
var openid = obj["openid"];
string openId2 = openid;
if (openId2 == null|| openId2=="")
{
//没有获取到微信的openId
}
else
{
//根据openID去数据库里查询,是否有这个openid对应的用户
UserEntity userEntity = CommonApp.GetUserByWeChat(openId2);
//如果返回的用户实体不为空,则说明此openid绑定了用户,则直接登录
if (userEntity != null)
{
//如果用户不等于空则直接登录
//做登录相关操作,之后跳转到首页
//跳转到某个特定的页面
url = "../Home/Index";
}
else
{
//由于code会传入前端,所以需进行加密。
string dec=DESEncrypt.Encrypt(openId2);
//此路径为登录界面。可输入密码和账户。进行登录
url = "../login/wx?code="+ dec;
}
}
return Redirect(url);
}
返回请求Code的路径
public string GetAccessTokenUrl(string appId, string secret, string code, string grantType = "authorization_code")
{
object[] args = new object[] { appId, secret, code, grantType };
string requestUri = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type={3}", args);
return requestUri;
}
微信登录
WX前端点击登录时触发这个函数
//传入的的值是用户名,密码,openId,客户端IP,地址
public ActionResult WXCheckLogin(string username, string password, string code, string IP, string Address)
{
//对Code进行解密
code = DESEncrypt.Decrypt(code);
try
{
//根据用户输入的用户名和密码查询数据库返回用户实体
用户实体 userEntity = new UserApp().CheckLogin(username, password);
//判断用户输入的账号是否已绑定微信
if (userEntity.微信openId字段== null || userEntity.微信openId字段== "")
{
string sql = " Update 表 set 微信openId字段='" + code.Trim() + "' where 用户Id='" + userEntity.用户Id + "'";
//执行sql修改对应用户的openid
DBHelper.ExecuteNonQuery(sql);
}
else
{
//提示输入的用户名和密码已绑定微信
}
if (userEntity != null)
{
//登录相关操作。
}
}
catch (Exception ex)
{
//登录失败。
}
}
微信开发时需要将项目的端口设置为127.0.0.1
修改hosts
【hosts文件路径:C:\Windows\System32\drivers\etc】
hosts文件后面添加
127.0.0.1 微信对应的网址
例如
127.0.0.1 wx.aaa.cn
下载微信调试工具
微信开发者工具下载路径
在输入栏内输入【http://wx.aaa.cn/控制器名/WXBind】就可以进行微信绑定测试了