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


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 相关文章推荐
IE6/7/8中Option元素未设value时Select将获取空字符串
Apr 07 Javascript
node.js中的fs.fstatSync方法使用说明
Dec 15 Javascript
jQuery检查事件是否触发的方法
Jun 26 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
Oct 30 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
May 12 Javascript
jquery拖动改变div大小
Jul 04 jQuery
vue项目中导入swiper插件的方法
Jan 30 Javascript
node和vue实现商城用户地址模块
Dec 05 Javascript
JavaScript从原型到原型链深入理解
Jun 03 Javascript
15分钟学会vue项目改造成SSR(小白教程)
Dec 17 Javascript
JavaScript实现烟花绽放动画效果
Aug 04 Javascript
vue实现井字棋游戏
Sep 29 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
第十五节--Zend引擎的发展
2006/11/16 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
2014/11/28 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
分享PHP函数实现数字与文字分页代码
2015/07/28 PHP
php简单生成随机数的方法
2015/07/30 PHP
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
jQuery将多条数据插入模态框的示例代码
2014/09/25 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
推荐几个不错的console调试技巧实现
2019/12/20 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
[00:44]TI7不朽珍藏III——军团指挥官不朽展示
2017/07/15 DOTA
初步探究Python程序的执行原理
2015/04/11 Python
安装python3的时候就是输入python3死活没有反应的解决方法
2018/01/24 Python
Python内置模块logging用法实例分析
2018/02/12 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
使用APScheduler3.0.1 实现定时任务的方法
2019/07/22 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
欧尚俄罗斯网上超市:Auchan俄罗斯
2018/05/03 全球购物
安全大检查实施方案
2014/02/22 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
2014年办公室人员工作总结
2014/12/09 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书
创业计划书之面包店
2019/09/12 职场文书
自己搭建resnet18网络并加载torchvision自带权重的操作
2021/05/13 Python
nginx服务器的下载安装与使用详解
2021/08/02 Servers