wyb
2021-05-11 49ce087bd2a34a150597e1cc1da157af242c0b6d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Pcb.Common
{
   public class WeiXinOAuth
    {
        /// <summary>
        /// 获取微信Code
        /// </summary>
        /// <param name="appId">微信AppId</param>
        /// <param name="appSecret">微信AppSecret</param>
        /// <param name="redirectUrl">返回的登录地址,要进行Server.Un编码</param>
        /// <param name="isWap">true=微信内部登录 false=pc网页登录</param>
        public string GetWeiXinCode(string appId, string appSecret, string redirectUrl, bool isWap)
        {
            var r = new Random();
            //微信登录授权
            //string url = "https://open.weixin.qq.com/connect/qrconnect?appid=" + appId + "&redirect_uri=" + redirectUrl +"&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect";
            //微信OpenId授权
            //string url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appId + "&redirect_uri=" + redirectUrl +"&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect";
            //微信用户信息授权
            var url = "";
            if (isWap)
            {
                url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appId + "&redirect_uri=" +
                      redirectUrl + "&response_type=code&scope=snsapi_userinfo&state=STATE1811&connect_redirect=1#wechat_redirect";
            }
            else
            {
                url = "https://open.weixin.qq.com/connect/qrconnect?appid=" + appId + "&redirect_uri=" + redirectUrl +
                      "&response_type=code&scope=snsapi_login&state=STATE1811#wechat_redirect";
            }
            return url;
        }
        /// <summary>
        /// 通过code获取access_token
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="appSecret"></param>
        /// <param name="code"></param>
        /// <returns></returns>
        public WeiXinAccessTokenResult GetWeiXinAccessToken(string appId, string appSecret, string code)
        {
            string url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appId + "&secret=" + appSecret +
              "&code=" + code + "&grant_type=authorization_code";
            string jsonStr =new CaptureHelper().GetHtml(url,60*1000, Encoding.UTF8);
          
            var result = new WeiXinAccessTokenResult();
            if (jsonStr.Contains("errcode"))
            {
                var errorResult = JsonHelper.DeserializeObject<WeiXinHelper.WeiXinErrorMsg>(jsonStr);
                result.ErrorResult = errorResult;
                result.Result = false;
            }
            else
            {
                var model = JsonHelper.DeserializeObject<WeiXinAccessTokenModel>(jsonStr);
                result.SuccessResult = model;
                result.Result = true;
            }
            return result;
        }
        /// <summary>
        /// 拉取用户信息
        /// </summary>
        /// <param name="accessToken"></param>
        /// <param name="openId"></param>
        /// <returns></returns>
        public WeiXinHelper.WeiXinUserInfoResult GetWeiXinUserInfo(string accessToken, string openId)
        {
            string url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openId + "⟨=zh_CN";
            string jsonStr = new CaptureHelper().GetHtml(url, Encoding.UTF8);
         
            var result = new WeiXinHelper.WeiXinUserInfoResult();
            if (jsonStr.Contains("errcode"))
            {
                var errorResult = JsonHelper.DeserializeObject<WeiXinHelper.WeiXinErrorMsg>(jsonStr);
                result.ErrorMsg = errorResult;
                result.Result = false;
            }
            else
            {
                var userInfo = JsonHelper.DeserializeObject<WeiXinHelper.WeiXinUserInfo>(jsonStr);
                result.UserInfo = userInfo;
                result.Result = true;
            }
            return result;
        }
 
        /// <summary>
        /// 通过code获取access_token 请求成功的实体
        /// </summary>
        public class WeiXinAccessTokenModel
        {
            /// <summary>
            /// 接口调用凭证
            /// </summary>
            public string access_token { get; set; }
            /// <summary>
            /// access_token接口调用凭证超时时间,单位(秒)
            /// </summary>
            public int expires_in { get; set; }
            /// <summary>
            /// 用户刷新access_token
            /// </summary>
            public string refresh_token { get; set; }
            /// <summary>
            /// 授权用户唯一标识
            /// </summary>
            public string openid { get; set; }
            /// <summary>
            /// 用户授权的作用域,使用逗号(,)分隔
            /// </summary>
            public string scope { get; set; }
        }
 
        public class WeiXinAccessTokenResult
        {
            public WeiXinAccessTokenModel SuccessResult { get; set; }
            public bool Result { get; set; }
 
            public WeiXinHelper.WeiXinErrorMsg ErrorResult { get; set; }
        }
    }
}