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


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 相关文章推荐
JAVASCRIPT HashTable
Jan 22 Javascript
js 数值转换为3位逗号分隔的示例代码
Feb 19 Javascript
angularjs学习笔记之完整的项目结构
Sep 26 Javascript
javascript瀑布流式图片懒加载实例
Jun 28 Javascript
js数组操作方法总结(必看篇)
Nov 22 Javascript
前端 Vue.js 和 MVVM 详细介绍
Dec 29 Javascript
js 转义字符及URI编码详解
Feb 28 Javascript
angular.js指令中的controller、compile与link函数的不同之处
May 10 Javascript
AngularJS service之select下拉菜单效果
Jul 28 Javascript
JS打印彩色菱形的实例代码
Aug 15 Javascript
利用JS如何获取form表单数据
Dec 19 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
Jul 20 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
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
PHP 错误处理机制
2015/07/06 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
在js(jquery)中获得文本框焦点和失去焦点的方法
2012/12/04 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
2015/03/28 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
2016/11/03 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
vue+node+webpack环境搭建教程
2017/11/05 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
重学JS之显示强制类型转换详解
2019/06/30 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
Vue实现简单的跑马灯
2020/05/25 Javascript
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
python数据结构之链表详解
2017/09/12 Python
python微信跳一跳系列之自动计算跳一跳距离
2018/02/26 Python
python3利用tcp实现文件夹远程传输
2018/07/28 Python
Python通过paramiko远程下载Linux服务器上的文件实例
2018/12/27 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
HTML5 video视频字幕的使用和制作方法
2018/05/03 HTML / CSS
护理工作感言
2014/01/16 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
五年级学生评语大全
2014/12/26 职场文书
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python