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


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 相关文章推荐
事件模型在各浏览器中存在差异
Oct 20 Javascript
jquery鼠标停止移动事件
Dec 21 Javascript
jQuery 复合选择器应用的几个例子
Sep 11 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
Aug 24 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
May 26 Javascript
jQuery获取radio选中项的值实例
Jun 18 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
Mar 28 Javascript
three.js实现3D视野缩放效果
Nov 16 Javascript
select标签设置默认选中的选项方法
Mar 02 Javascript
前端防止用户重复提交js实现代码示例
Sep 07 Javascript
新版小程序登录授权的方法
Dec 12 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
Aug 27 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
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
2013/04/22 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
2014/06/03 Javascript
理运用命名空间让js不产生冲突避免全局变量的泛滥
2014/06/15 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
JavaScript indexOf()原理及使用方法详解
2020/07/09 Javascript
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
python安装oracle扩展及数据库连接方法
2017/02/21 Python
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
python机器学习理论与实战(一)K近邻法
2021/01/28 Python
Python三种遍历文件目录的方法实例代码
2018/01/19 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
用django设置session过期时间的方法解析
2019/08/05 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
致长跑运动员广播稿
2014/01/31 职场文书
低碳环保标语
2014/06/12 职场文书
国际经济与贸易专业求职信
2014/07/10 职场文书
股东合作协议书
2014/09/12 职场文书
党的群众路线教育实践活动个人整改方案
2014/09/21 职场文书
师德承诺书
2015/01/20 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书
结婚纪念日感言
2015/08/01 职场文书
Vue图片裁剪组件实例代码
2021/07/02 Vue.js
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS