[OAuth]ウィーチャットOAuthを使用してOpenIDを取得する

1792 ワード

1.ターゲットurlをredirectUrlとして、oAuthUrlを生成する
string oAuthUrl = string.Format(
    "https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope={2}&state={3}#wechat_redirect",
    APPID, 
    HttpUtility.UrlEncode(redirectUrl), 
    SCOPE, 
    transmitData == null ? "" : HttpUtility.UrlEncode(transmitData)
);

注:(1)任意のUrlとして使用できるわけではないredirectUrlこのUrlのドメイン名は、WeChatパブリックプラットフォーム管理ページで構成する必要がある:OAuth 2.0ページ権限、修正、権限コールバックページドメイン名.(2)WeChatのoAuthUrlWeChatブラウザでのみ使用できる.(3)SCOPE = "snsapi_base"ユーザ確認ボックスをポップアップせずにユーザ情報を取得することを示す.(4)transmitData過去のパラメータを渡すことを示すredirectUrlで使用可能Request["state"]で入手可能.
2.ターゲットurlページOpenID取得
(1)クエリーパラメータから取得oAuthCode = Request["code"].(2)以下のように取得AccessToken.
string getAccessTokenUrl = string.Format(
    "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code",
    APPID, 
    APPSECRET, 
    oAuthCode
);

(3)このgetAccessTokenUrlが返すjson文字列を解析し,OpenIDを取得する.
public sealed class AccessToken
{
    public string access_token { get; set; }

    public long expires_in { get; set; }

    public string refresh_token { get; set; }

    public string openid { get; set; }

    public string scope { get; set; }
}

注:(1)ターゲットurlでは、oAuthCode一度しか使用できません.そうしないと期限切れになります.「redirect_uri 」と表示されます.(2)ユーザーがアクセスoAuthUrlAPPIDAPPSECRETという公衆番号に対応するOpenIDを入手できます.したがって、これoAuthUrlをユーザーにクリックさせることもできるし、直接リダイレクトすることもできます.