微信接入之获取用户头像的方法步骤
前段时间写了关于微信支付接入,顺便就把获取用户昵称,头像的方式也归纳下,这个其实挺简单的,具体的方法看官方文档即可。这里只提几个重点。
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怎么做
- 甘肃优化关键词排名推广怎么做论坛营销
- 沙雅SEO网站推广:提升您的在线可见性
- 四川SEO优化如何提升销售额和销售量
- 聂荣网站排名优化:提升网站可见性的全方位指
- 涞水SEO:提升地方企业在线可见性的策略
- 辽宁百度seo排名怎样做网站排名
- 临湘哪有关键词排名优化:提升网站可见度的关
- 黑龙江百度网站优化有没有优惠
- 凉城优化关键词排名推广:提升您的网络可见性
- 萝北整站优化:提升您网站流量和排名的全面指