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


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 代码的方法小结
Jul 16 Javascript
jquery dialog键盘事件代码
Aug 01 Javascript
javascript椭圆旋转相册实现代码
Jan 16 Javascript
让js弹出窗口居前显示的实现方法
Jul 10 Javascript
jquery uploadify 在FF下无效的解决办法
Sep 26 Javascript
jQuery学习笔记之基础中的基础
Jan 19 Javascript
使用Node.js处理前端代码文件的编码问题
Feb 16 Javascript
js基于cookie方式记住返回页面用法示例
May 27 Javascript
Bootstrap 3 按钮标签实例代码
Feb 21 Javascript
微信小程序异步处理详解
Nov 10 Javascript
生产制造追溯系统之再说条码打印
Jun 03 Javascript
node获取客户端ip功能简单示例
Aug 24 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
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
基于PHP magic_quotes_gpc的使用方法详解
2013/06/24 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
2014/10/24 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
Bootstrap模态窗口源码解析
2017/02/08 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
vue路由跳转传参数的方法
2019/05/06 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
Python里disconnect UDP套接字的方法
2015/04/23 Python
Python发送以整个文件夹的内容为附件的邮件的教程
2015/05/06 Python
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
Python异常对代码运行性能的影响实例解析
2018/02/08 Python
python批量修改文件编码格式的方法
2018/05/31 Python
24式加速你的Python(小结)
2019/06/13 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
python实现双色球随机选号
2020/01/01 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
2020/07/30 Python
HTML5 canvas基本绘图之绘制阴影效果
2016/06/27 HTML / CSS
总裁岗位职责
2013/12/04 职场文书
教师实习自我鉴定
2013/12/11 职场文书
委托书范文
2014/04/02 职场文书
2015年班组建设工作总结
2015/05/13 职场文书
党支部评议意见
2015/06/02 职场文书
植物园观后感
2015/06/11 职场文书
JS实现扫雷项目总结
2021/05/19 Javascript
redis protocol通信协议及使用详解
2022/07/15 Redis