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


Posted in Javascript onSeptember 23, 2019

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

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);

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

Javascript 相关文章推荐
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
Dec 27 Javascript
070823更新的一个[消息提示框]组件 兼容ie7
Aug 29 Javascript
Jquery 点击按钮显示和隐藏层的代码
Jul 25 Javascript
JQuery写动态树示例代码
Jul 31 Javascript
js转义字符介绍
Nov 05 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
May 27 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
Dec 26 Javascript
javascript框架设计之框架分类及主要功能
Jun 23 Javascript
jQuery unbind 删除绑定事件详解
May 24 Javascript
BootStrap selectpicker后台动态绑定数据的方法
Jul 28 Javascript
Node.js引入UIBootstrap的方法示例
May 11 Javascript
给原生html中添加水印遮罩层的实现示例
Apr 02 Javascript
从零搭一个自用的前端脚手架的方法步骤
Sep 23 #Javascript
layui 实现加载动画以及非真实加载进度的方法
Sep 23 #Javascript
layui加载数据显示loading加载完成loading消失的实例代码
Sep 23 #Javascript
ES10的13个新特性示例(小结)
Sep 23 #Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
Sep 23 #Javascript
vue多页面项目中路由使用history模式的方法
Sep 23 #Javascript
JS随机密码生成算法
Sep 23 #Javascript
You might like
为什么夜间收到的中波电台比白天多
2021/03/01 无线电
德劲1103的维修打理经验
2021/03/02 无线电
模拟xcopy的函数
2006/10/09 PHP
php下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
PHP nl2br函数 将换行字符转成 <br>
2009/08/21 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
php内核解析:PHP中的哈希表
2014/01/30 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
2016/01/09 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
2016/03/18 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
Javascript中return的使用与闭包详解
2017/01/11 Javascript
在Vue中使用echarts的实例代码(3种图)
2017/07/10 Javascript
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
python操作gmail实例
2015/01/14 Python
Python中的random()方法的使用介绍
2015/05/15 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
python mysql 字段与关键字冲突的解决方式
2020/03/02 Python
python相对企业语言优势在哪
2020/06/12 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
2020/12/03 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
市场营销调查计划书
2014/05/02 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
怎样评估创业计划书是否有可行性?
2019/08/07 职场文书
使用Springboot实现健身房管理系统
2021/07/01 Java/Android
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android