微信内のwebviewで微信ユーザの基本情報を取得(open_id)
前提:
高度なインタフェースを開いた微信の公衆番号(サービス番号が優れている)
微信のoauth
(他の方法は通用しません:urlパラメータが危険すぎて、sessionは保存できません、event=viewタイプのイベントはkey(url)などを動的に変更できません...)
プロセス:
認証役割ドメインの適用、snsapi_base
http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
1.カスタムメニューリンクアドレスの設定
類似:https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx*********&redirect_uri=http%3A%2F%2Fwx.edaysoft.cn%2Fhome%2Ftest&response_type=code&scope=snsapi_base&state=yunnying#wechat_redirect
2. redirect_uri codeとstateの取得
3.HttpWebRequest openidとtokenの取得
4.終了.あるいは他の深く入りたいもの
注意事項:1.redirect_uriは任意で、微盟や点呼客のような微信託管プラットフォームとは異なり、自分でhostすればいい.
2.微信公衆プラットフォーム内の開発者センターにおけるウェブサービスのウェブページ授権ユーザーの基本情報を取得する授権コールバックページドメイン名を設定し、エラーを報告しないようにする:redirect_uriパラメータエラー
高度なインタフェースを開いた微信の公衆番号(サービス番号が優れている)
微信のoauth
(他の方法は通用しません:urlパラメータが危険すぎて、sessionは保存できません、event=viewタイプのイベントはkey(url)などを動的に変更できません...)
プロセス:
認証役割ドメインの適用、snsapi_base
http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
1.カスタムメニューリンクアドレスの設定
類似:https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx*********&redirect_uri=http%3A%2F%2Fwx.edaysoft.cn%2Fhome%2Ftest&response_type=code&scope=snsapi_base&state=yunnying#wechat_redirect
2. redirect_uri codeとstateの取得
3.HttpWebRequest openidとtokenの取得
4.終了.あるいは他の深く入りたいもの
//redirect_uri
public ActionResult Test()
{
string code = Request.QueryString["code"];
string state = Request.QueryString["state"];
string msg = "";
if (string.IsNullOrEmpty(code))
{
msg = " ";
}
string url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + "wx********************"
+ "&secret=" + "SSSSSSSSSSSSSSSSSSSSSSSS"
+ "&code=" + code
+ "&grant_type=authorization_code";
HttpWebResponse response = this.GetRestfulResponse(url);
if (response.StatusCode == HttpStatusCode.OK)
{
using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
string responseString = sr.ReadToEnd();
wxopenidjsonobject obj = JsonConvert.DeserializeObject(responseString);
msg = obj.openid;
}
}
if (string.IsNullOrWhiteSpace(msg))
{
msg = "sth wrong.";
}
ViewBag.from = msg;
return View();
}
private HttpWebResponse GetRestfulResponse(string url, int timeout = 600000)
{
HttpWebRequest request = WebRequest.CreateHttp(url);
request.ContentType = "application/json;charset=utf-8";
request.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.Default);
request.Method = "GET";
request.ContentLength = 0;
request.Timeout = timeout;
return request.GetResponse() as HttpWebResponse;
}
public class wxopenidjsonobject
{
public string access_token { get; set; }
public int expires_in { get; set; }
public string refresh_token { get; set; }
public string openid { get; set; }
public string scope { get; set; }
}
注意事項:1.redirect_uriは任意で、微盟や点呼客のような微信託管プラットフォームとは異なり、自分でhostすればいい.
2.微信公衆プラットフォーム内の開発者センターにおけるウェブサービスのウェブページ授権ユーザーの基本情報を取得する授権コールバックページドメイン名を設定し、エラーを報告しないようにする:redirect_uriパラメータエラー