请注意,如果开发者有在多个公众号,或在公众号、移动应用之间统一用户账号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。
public class WeChatLogin : Controller { /// <summary> /// 获取用户UnionID(用户统一标识) /// </summary> /// <param name="state">自定义参数</param> /// <param name="code">通过用户授权后得到的code</param> /// <returns></returns> public async Task<Response> GetWeChatUnionID(string state, string code) { string appId = "YourAppId"; string appSecret = "YourAppSecret"; string requestUrl = $"https://api.weixin.qq.com/sns/oauth2/access_token?appid={appId}&secret={appSecret}&code={code}&grant_type=authorization_code"; // 堆代码 duidaima.com using (var httpClient = new HttpClient()) { var httpRequest = new HttpRequestMessage(HttpMethod.Get, requestUrl); using (var response = await httpClient.SendAsync(httpRequest)) { if (response.IsSuccessStatusCode) { var responseString = await response.Content.ReadAsStringAsync(); var responseData = JsonConvert.DeserializeObject<WeChatTokenResponse>(responseString); return new Response { Code = 1, Message = responseData.UnionId }; } else { var errorResponseString = await response.Content.ReadAsStringAsync(); var errorData = JsonConvert.DeserializeObject<ErrorResponse>(errorResponseString); return new Response { Code = 0, Message = $"Failed to get access token: {errorData.ErrMsg}" }; } } } } } public class WeChatTokenResponse { [JsonProperty("access_token")] public string AccessToken { get; set; } [JsonProperty("expires_in")] public int ExpiresIn { get; set; } [JsonProperty("refresh_token")] public string RefreshToken { get; set; } [JsonProperty("openid")] public string OpenId { get; set; } [JsonProperty("scope")] public string Scope { get; set; } [JsonProperty("is_snapshotuser")] public int IsSnapshotUser { get; set; } [JsonProperty("unionid")] public string UnionId { get; set; } } public class ErrorResponse { [JsonProperty("errcode")] public int ErrCode { get; set; } [JsonProperty("errmsg")] public string ErrMsg { get; set; } }