Magicodes.WeiChatを使用することで、WeChatユーザーの情報を簡単に取得できます。OAuth 2.0を利用する前に、以下の手順を実行する必要があります:
1)開発者センターで【网页授权获取用户基本信息】を設定し、ポップアップした画面にルートドメイン(例:weichat.chinacloudsites.cn)を入力します。
2)メニューまたはリンクを設定します(「WeChatOAuth」機能を使用する場合は、この手順は省略可能です。ここでは原理の説明のみ行い、具体的な手順についてはステップ3を参照してください)。Magicodes.WeiChatはWeiChatController内で処理を行い、パス設定がより簡潔で簡単になります。例:http://weichat.chinacloudsites.cn/WeiChat/OAuth?redirectUrl=http://weichat.chinacloudsites.cn/WeChat/Test。ここでのredirectUrlはリダイレクト先のページアドレスです。Magicodes.WeiChatはWeChat OAuthリンクを自動生成し、エラー発生の可能性を大幅に削減します。生成されたリンクの例は以下の通りです:https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx941100f605a8c3bd&redirect_uri=http%3A%2F%2Fweichat.chinacloudsites.cn%2FWeChat%2FTest&response_type=code&scope=snsapi_userinfo&state=weichat#wechat_redirect
3)ターゲットページでWeChatユーザー情報を取得できます。取得コードは以下の通りです:
// GET: WeChat/Test
[AllowAnonymous]
public ActionResult Index(string code)
{
if (string.IsNullOrEmpty(code))
{
return Content("承認が拒否されました!");
}
// codeを使ってaccess_tokenを取得
var result = OAuthApi.GetAccessToken(WeixinHelper.appId, WeixinHelper.appSecret, code);
if (result.errcode != ReturnCode.成功)
{
return Content("エラー:" + result.errmsg);
}
// フォローしている場合、詳細情報を取得
var userInfo = OAuthApi.GetUserInfo(result.access_token, result.openid);
return View(userInfo);
}
上記のプロセスは比較的複雑であるため、Magicodes.WeiChatはフィルタを提供し、より簡単にユーザー情報を取得できます。以下のコード例をご参照ください:
[AllowAnonymous]
public class SampleController : Controller
{
// GET: WeChat/Test
[AllowAnonymous]
[WeChatOAuth]
public ActionResult Index()
{
return View(WeiChatApplicationContext.Current.WeiChatUser);
}
}
次に、Indexビューのコードは以下の通りです:
@model WeChatUser
@{
ViewBag.Title = "Index";
Layout = "~/Areas/WeChat/Views/Shared/_Layout.cshtml";
}
<h2>
以下にWeChatユーザー情報を表示します
:</h2>
```
```
<h2>
ニックネーム:
@Model.NickName</h2>
```
```
<h2>
都市:
@Model.City</h2>
```
表示結果は以下の通りです:
**注意:Actionに「WeChatOAuth」属性を追加する必要があります。その後、コード内でWeiChatApplicationContext.Current.WeiChatUserを使用してWeChatユーザー情報にアクセスできます。**
WeChatユーザー情報の内容は以下の通りです:
public class WeChatUser
{
///
/// ユーザーの識別子(現在の公式アカウントに対して一意)
///
[Key]
[Display(Name = "OpenId")]
public string OpenId { get; set; }
///
/// ユーザーがこの公式アカウントを購読しているかどうかの識別子
///
[Display(Name = "購読状態")]
public bool Subscribe { get; set; }
///
/// ユーザーのニックネーム
///
[Display(Name = "ニックネーム")]
public string NickName { get; set; }
///
/// ユーザーの性別(1:男性、2:女性、0:不明)
///
[Display(Name = "性別")]
public int Sex { get; set; }
///
/// ユーザーが所在する都市
///
[Display(Name = "都市")]
public string City { get; set; }
///
/// ユーザーが所在する国
///
[Display(Name = "国")]
public string Country { get; set; }
///
/// ユーザーが所在する州
///
[Display(Name = "州")]
public string Province { get; set; }
///
/// ユーザーの言語(簡体字中国語はzh_CN)
///
[Display(Name = "言語")]
public string Language { get; set; }
///
/// ユーザーのアバター(最後の数値は正方形アバターサイズを表します(0、46、64、96、132から選択可能、0は640*640の正方形アバターを意味します)。ユーザーがアバターを持たない場合はこの項目は空です。ユーザーがアバターを変更すると、既存のアバターURLは無効になります。
///
[Display(Name = "アバター")]
public string HeadImgUrl { get; set; }
///
/// ユーザーのフォロー時間(タイムスタンプ形式)。ユーザーが複数回フォローした場合は、最後のフォロー時間が使用されます。
///
[Display(Name = "フォロー時間")]
public DateTime SubscribeTime { get; set; }
///
/// ユーザーが公式アカウントをWeChatオープンプラットフォームアカウントにバインドした場合のみ表示されるフィールド。詳細は「ユーザー個人情報の取得(UnionIDメカニズム)」を参照してください。
///
public string UnionId { get; set; }
///
/// 公式アカウント運営者によるユーザーへのメモ。公式アカウント運営者はWeChatパブリックプラットフォームのユーザー管理画面でユーザーにメモを追加できます。
///
[Display(Name = "メモ")]
public string Remark { get; set; }
///
/// ユーザーが所属するグループID
///
public int GroupId { get; set; }
}