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


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 相关文章推荐
图片连续滚动代码[兼容IE/firefox]
Jun 11 Javascript
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
Aug 03 Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
Apr 12 Javascript
jquery struts 验证唯一标识(公用方法)
Mar 27 Javascript
关于extjs4如何获取grid修改后的数据的问题
Aug 07 Javascript
js如何判断用户是在PC端和还是移动端访问
Apr 24 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
Apr 25 Javascript
使用jQuery实现简单的tab框实例
Aug 22 jQuery
JS 使用 window对象的print方法实现分页打印功能
May 16 Javascript
JavaScript实现的文本框placeholder提示文字功能示例
Jul 25 Javascript
小试小程序云开发(小结)
Jun 06 Javascript
基于js实现判断浏览器类型代码实例
Jul 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
thinkphp的URL路由规则与配置实例
2014/11/26 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
复选框全选与全不选操作实现思路
2013/08/18 Javascript
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
laytpl 精致巧妙的JavaScript模板引擎
2014/08/29 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
讲解JavaScript的Backbone.js框架的MVC结构设计理念
2016/02/14 Javascript
JQuery给select添加/删除节点的实现代码
2016/04/26 Javascript
JavaScript的模块化开发框架Sea.js上手指南
2016/05/12 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
js变量值传到php过程详解 将php解析成数据
2019/06/26 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
python实现忽略大小写对字符串列表排序的方法
2014/09/25 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
2017/07/06 Python
Python实现的rsa加密算法详解
2018/01/24 Python
Python 爬取携程所有机票的实例代码
2018/06/11 Python
在python中用url_for构造URL的方法
2019/07/25 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
Python定时任务APScheduler安装及使用解析
2020/08/07 Python
python文件排序的方法总结
2020/09/13 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
个人职业及收入证明
2014/10/13 职场文书
网络研修随笔感言
2015/11/18 职场文书
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL
实现一个简单得数据响应系统
2021/11/11 Javascript