最近做微信支付,要获取用户的openid,调用接口后返回的是json格式的数据,我想在c#后台把数据逐一取出,网上查了查,找到以下方法:
1.首先调用接口,要有一个post数据到指定url并返回数据的函数:
protected string PostXmlToUrl(string url, string postData) { string returnmsg = ""; using (System.Net.WebClient wc = new System.Net.WebClient()) { returnmsg = wc.UploadString(url, "POST", postData); } return returnmsg; }
post的数据格式可以是
url的参数格式(a=1&b=2&c=3....)
xml格式(<xml>....</xml>)
返回的数据格式由接口确定。
2.方法调用:
string post_data = "appid=" + appId + "&secret=" + secret + "&code=" + code + "&grant_type=authorization_code"; string requestData = PostXmlToUrl("https://api.weixin.qq.com/sns/oauth2/access_token", post_data);
微信这个接口返回的数据是json格式的,所以得到的requestData就是一段json字符串:
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }
返回的数据里面有我需要的openid,接下来利用结构体把openid取出。先定义结构体:
public struct authorization { public string access_token { get; set; } //属性的名字,必须与json格式字符串中的"key"值一样。 public string expires_in { get; set; } public string refresh_token { get; set; } public string openid { get; set; } public string scope { get; set; } }
利用序列化数据的类JavaScriptSerializer将json数据转化为对象类型:
JavaScriptSerializer js = new JavaScriptSerializer(); //实例化一个能够序列化数据的类 authorization auth = js.Deserialize<authorization>(requestData); //将json数据转化为对象类型并赋值给auth
这样一转化,对象auth里面的4个属性就会得到相应的值,如此,我就获取到了接口返回来的openid,就可以在需要的地方使用它了:
wxobPay.openid = auth.openid;