微信接入之获取用户头像的方法步骤

 更新时间:2019年09月23日 09:45:38   作者:duotemplar  
这篇文章主要介绍了微信接入之获取用户头像的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前段时间写了关于微信支付接入,顺便就把获取用户昵称,头像的方式也归纳下,这个其实挺简单的,具体的方法看官方文档即可。这里只提几个重点。

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(此时返回640*640大小的图片),这个时候,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);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • js移动端事件基础及常用事件库详解

    js移动端事件基础及常用事件库详解

    这篇文章主要为大家详细介绍了js移动端事件基础及常用事件库,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • javascript 常见功能汇总

    javascript 常见功能汇总

    本文给大家汇总介绍了集中常见的功能,十分的实用,有需要的小伙伴可以参考下。
    2015-06-06
  • Javascript实现Array和String互转换的方法

    Javascript实现Array和String互转换的方法

    这篇文章主要介绍了Javascript实现Array和String互转换的方法,涉及JavaScript中toString方法与split方法的使用技巧,需要的朋友可以参考下
    2015-12-12
  • php is_numberic函数造成的SQL注入漏洞

    php is_numberic函数造成的SQL注入漏洞

    这篇文章主要介绍了php is_numberic函数造成的SQL注入漏洞和解决办法,需要的朋友可以参考下
    2014-03-03
  • 两个table之间相互移动数据

    两个table之间相互移动数据

    两个table之间相互移动数据的实现代码。
    2009-05-05
  • javascript简单实现命名空间效果

    javascript简单实现命名空间效果

    这篇文章主要介绍了javascript简单的实现命名空间效果的方法。需要的朋友可以过来参考下,希望对大家有所帮助
    2014-03-03
  • js Promise并发控制数量的方法

    js Promise并发控制数量的方法

    在业务开发过程中,我们经常会遇到多个异步任务并发执行的情况,待所有异步任务结束之后再执行我们的业务逻辑,那么js Promise并发控制数量是多少,本文就来介绍一下
    2021-08-08
  • Bootstrap 按钮下拉菜单的实现示例

    Bootstrap 按钮下拉菜单的实现示例

    本文主要介绍了Bootstrap 按钮下拉菜单的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • JavaScript实现垂直向上无缝滚动特效代码

    JavaScript实现垂直向上无缝滚动特效代码

    下面小编就为大家带来一篇JavaScript实现垂直向上无缝滚动特效代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • javascript 冒号 使用说明

    javascript 冒号 使用说明

    虽然之前写过不少的javascirpt的脚本,但是对冒号:却不甚了了,感觉即陌生又熟悉,没办法老毛病又犯了,不把问题搞清楚那个(:)
    2009-06-06

最新评论