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


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 相关文章推荐
jquery获取复选框被选中的值
Apr 10 Javascript
javascript的创建多行字符串的7种方法
Apr 29 Javascript
js使用正则实现ReplaceAll全部替换的方法
Jul 18 Javascript
jquery性能优化高级技巧
Aug 24 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
Sep 01 Javascript
很棒的js选项卡切换效果
Jul 15 Javascript
jquery滚动条插件(可以自定义)
Dec 11 Javascript
用node和express连接mysql实现登录注册的实现代码
Jul 05 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
Aug 19 Javascript
微信小程序 行的删除和增加操作实现详解
Sep 29 Javascript
vue中添加与删除关键字搜索功能
Oct 12 Javascript
javascript条件式访问属性和箭头函数介绍
Nov 17 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
PHP4与PHP3中一个不兼容问题的解决方法
2006/10/09 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
分享一个Laravel好用的Cache宏
2015/03/02 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
PHP的mysqli_set_charset()函数讲解
2019/01/23 PHP
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
2013/01/17 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
2016/12/19 Javascript
JavaScript中的call和apply的用途以及区别
2017/01/11 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
Vue 源码分析之 Observer实现过程
2018/03/29 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
Python目录和文件处理总结详解
2019/09/02 Python
Python3 JSON编码解码方法详解
2019/09/06 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
python模块如何查看
2020/06/16 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
纽约香氛品牌:NEST Fragrance
2018/10/15 全球购物
大学生活自我评价
2014/04/09 职场文书
学雷锋月活动总结
2014/04/25 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
个人收入证明范本
2015/06/12 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS