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


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 相关文章推荐
基于jquery的无限级联下拉框js插件
Oct 29 Javascript
用jquery实现点击栏目背景色改变
Dec 10 Javascript
jquery ready函数、css函数及text()使用示例
Sep 27 Javascript
jquery中获得元素尺寸和坐标的方法整理
May 18 Javascript
jQuery超简单选项卡完整实例
Sep 26 Javascript
javascript实现拖动元素交换位置
Nov 29 Javascript
XML、HTML、CSS与JS的区别整理
Feb 18 Javascript
jQuery EasyUI Pagination实现分页的常用方法
May 21 Javascript
浅谈JavaScript对象与继承
Jul 10 Javascript
jquery动态遍历Json对象的属性和值的方法
Jul 27 Javascript
bootstrap table表格插件之服务器端分页实例代码
Sep 12 Javascript
angular异步验证器防抖实例详解
Mar 31 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
类的另类用法--数据的封装
2006/10/09 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
php动态生成函数示例
2014/03/21 PHP
yii框架通过控制台命令创建定时任务示例
2014/04/30 PHP
getJSON跨域SyntaxError问题分析
2014/08/07 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
PHP实现的抓取小说网站内容功能示例
2019/06/27 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
JavaScript控制Session操作方法
2013/01/17 Javascript
实现51Map地图接口(示例代码)
2013/11/22 Javascript
window.location.href IE下跳转失效的解决方法
2014/03/27 Javascript
jquery实现表单输入时提示文字滑动向上效果
2015/08/10 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
2017/10/30 Javascript
Vue实现点击按钮复制文本内容的例子
2019/11/09 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
python读取Android permission文件
2013/11/01 Python
在Docker上部署Python的Flask框架的教程
2015/04/08 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
2018/06/01 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
python 多个参数不为空校验方法
2019/02/14 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
python conda操作方法
2019/09/11 Python
python算的上脚本语言吗
2020/06/22 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
老师自我鉴定范文
2013/12/25 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
一个独生女的故事观后感
2015/06/04 职场文书
阿凡达观后感
2015/06/10 职场文书
雷锋观后感
2015/06/10 职场文书