微信接入之获取用户头像的方法步骤
前段时间写了关于微信支付接入,顺便就把获取用户昵称,头像的方式也归纳下,这个其实挺简单的,具体的方法看官方文档即可。这里只提几个重点。
scope参数
看过微信文档的话,微信的规定是,对于scope参数,如果需要获取用户信息的话,scope参数为snsapi_userinfo。我接下来,使用过一次userinfo,实际上用snsapi_base也可以获得用户信息,一模一样的返回值,对于获取头像和昵称完全没有任何问题
获取头像
获取头像其实有一点麻烦的就是跨域问题。要解决这个跨域问题,可以采用设置一个代理服务器,或者通过配置相关服务器(ngix,apache)来解决。这个网上方法很多,我这里说的是不通过配置服务器的方法。
在我们的项目中,我并不想使用配置一个web服务器或者代理,因为我们是游戏服务器,我们是自己实现的,并没有使用什么web服务器框架,那么这种情况下,我们解决跨域的问题就是由我们的服务器后端直接对跨域资源发起请求,在获得对应的资源后,再返回前端。OK,这就是具体方法
具体实现时,其实很简单,获取到头像的url后,直接发起一个http请求并获取返回即可。
注意http请求方式为“GET”
需要提的一点是,对response的返回,要直接使用stream.Read,如果使用streamReader,以文本方式读取字节流读出来的数据是无法转成图片的。(我查阅过MSDN关于这两个接口的说明,只是读取时一个是文本形式,一个是字节流形式,其他并没有过多的说有什么区别)。
然后记得将字节流以Base64方式转换,交由我们的前端处理
request = HttpWebRequest.Create(url); request.Method = "GET"; response = request.GetResponse(); stream = response.GetResponseStream(); var buffer = new byte[4096]; var num = stream.Read(buffer, 0, 4096); var head = Convert.ToBase64String(buffer, 0, num); stream.Dispose(); response.Close();
上面的代码有一个问题,我后来才注意到,就是当图片比较大的时候,比如头像地址的参数是64以上,或是/0(此时返回640640大小的图片),这个时候,stream可能一次不能读取完所有的数据,所以修改代码为
var request = HttpWebRequest.Create(url); request.Method = "GET"; var response = request.GetResponse(); var stream = response.GetResponseStream(); var buffer = new byte[response.ContentLength]; var num = stream.Read(buffer, 0, (int)response.ContentLength); var total = num; while(num > 0) { num = stream.Read(buffer, total, (int)(response.ContentLength - total)); total += num; } head = Convert.ToBase64String(buffer, 0, total);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 甘肃哪有关键词排名优化购买方式有哪些
- 甘肃SEO如何做网站优化
- 河南seo关键词优化怎么做电话营销
- 北京SEO优化如何做QQ群营销
- 来宾百度关键词排名:提升您网站曝光率的关键
- 卢龙关键词优化:提升您网站排名的策略与技巧
- 山东网站优化的注意事项有哪些
- 四川整站优化怎样提升在搜索引擎中的排名
- 疏附整站优化:提升网站性能与用户体验的全新
- 海南seo主要做什么工作售后服务要做到哪些
- 荣昌百度网站优化:提升您网站的搜索引擎排名
- 河北seo网站排名关键词优化如何做SEO
- 江西优化关键词排名推广售后保障一般有哪些
- 古浪SEO优化:提升你的网站可见性
- 西藏网站排名优化怎么把网站排名在百度首页
- 如何提升阳东百度快照排名:详尽指南