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


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 相关文章推荐
Google Suggest ;-) 基于js的动态下拉菜单
Oct 11 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
Mar 02 Javascript
Javascript中的包装类型介绍
Apr 02 Javascript
javascript实现状态栏中文字动态显示的方法
Oct 20 Javascript
实例讲解jquery与json的结合
Jan 07 Javascript
JS JSOP跨域请求实例详解
Jul 04 Javascript
设置cookie指定时间失效(实例代码)
May 28 Javascript
JS 实现banner图片轮播效果(鼠标事件)
Aug 04 Javascript
Vue 按键修饰符处理事件的方法
May 04 Javascript
Node.js 中判断一个文件是否存在
Aug 24 Javascript
详解Node.js如何处理ES6模块
May 15 Javascript
使用react-virtualized实现图片动态高度长列表的问题
May 28 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
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
中国广播史趣谈 — 几个历史第一次
2021/03/01 无线电
php Try Catch异常测试
2009/03/01 PHP
PHP 处理图片的类实现代码
2009/10/23 PHP
php microtime获取浮点的时间戳
2010/02/21 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
PHP可逆加密/解密函数分享
2012/09/25 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
JavaScript中SetInterval与setTimeout的用法详解
2015/11/10 Javascript
Jquery实现$.fn.extend和$.extend函数
2016/04/14 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
Python模拟三级菜单效果
2017/09/11 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
中专生的个人自我评价
2013/12/11 职场文书
烹饪自我鉴定
2014/03/01 职场文书
2015年房地产个人工作总结
2015/05/26 职场文书
防震减灾主题班会
2015/08/14 职场文书
中秋节随笔
2015/08/15 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书
MySQL Threads_running飙升与慢查询的相关问题解决
2021/05/08 MySQL
macos系统如何实现微信双开? mac登录两个微信以上微信的技巧
2022/07/23 数码科技