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


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脚本性能优化注意事项
Nov 18 Javascript
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
May 10 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
Jan 28 Javascript
Jquery简单实现GridView行高亮的方法
Jun 15 Javascript
jQuery实现的自定义滚动条实例详解
Sep 20 Javascript
Bootstrap table两种分页示例
Dec 23 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
Feb 19 Javascript
使用Bootstrap + Vue.js实现添加删除数据示例
Feb 27 Javascript
Node中使用ES6语法的基础教程
Jan 05 Javascript
微信小程序实现拍照画布指定区域生成图片
Jul 18 Javascript
vue 开发之路由配置方法详解
Dec 02 Javascript
es6函数之箭头函数用法实例详解
Apr 25 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
简单的PHP图片上传程序
2008/03/27 PHP
PHP下用rmdir实现删除目录的三种方法小结
2008/04/20 PHP
php判断用户是否关注微信公众号
2016/07/22 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
php实时倒计时功能实现方法详解
2017/02/27 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
javascript Window及document对象详细整理
2011/01/12 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
jquery移动节点实例
2015/01/14 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
概述VUE2.0不可忽视的很多变化
2016/09/25 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
移动端界面的适配
2017/01/11 Javascript
webpack打包单页面如何引用的js
2017/06/07 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
基于tensorflow for循环 while循环案例
2020/06/30 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
园艺师求职信
2014/03/10 职场文书
普通党员个人整改措施
2014/10/27 职场文书
2014年化验员工作总结
2014/11/18 职场文书
小学教研工作总结2015
2015/05/13 职场文书
导游词之贵州织金洞
2019/10/12 职场文书
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫