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


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 相关文章推荐
setTimeout和setInterval的浏览器兼容性分析
Feb 27 Javascript
写给想学习Javascript的朋友一点学习经验小结
Nov 23 Javascript
JavaScript起点(严格模式深度了解)
Jan 28 Javascript
javascript实现验证IP地址等相关信息代码
May 10 Javascript
javascript中动态函数用法实例分析
May 14 Javascript
javascript如何写热点图
Dec 08 Javascript
JS转换HTML转义符的方法
Aug 24 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
Aug 27 Javascript
JS中mouseup事件丢失的原因与解决办法
Jun 14 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
Jul 18 Javascript
简单了解小程序+node梳理登陆流程
Jun 24 Javascript
viewer.js实现图片预览功能
Jun 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
php不用正则采集速度探究总结
2008/03/24 PHP
php横向重复区域显示二法
2008/09/25 PHP
php visitFile()遍历指定文件夹函数
2010/08/21 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
2016/11/23 PHP
php数组指针操作详解
2017/02/14 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
javascript数组详解
2014/10/22 Javascript
JavaScript页面模板库handlebars的简单用法
2015/03/02 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
JS中使用 after 伪类清除浮动实例
2017/03/01 Javascript
基于 webpack2 实现的多入口项目脚手架详解
2017/06/26 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
2018/03/21 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
Layui 解决表格异步调用后台分页的问题
2019/10/26 Javascript
小程序实现可拖动的悬浮按钮
2020/09/07 Javascript
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
Python之list对应元素求和的方法
2018/06/28 Python
详解flask入门模板引擎
2018/07/18 Python
Python3.6简单的操作Mysql数据库的三个实例
2018/10/17 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
使用CSS3制作版头动画效果
2020/12/24 HTML / CSS
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
2015年材料员工作总结
2015/04/30 职场文书
宪法宣传标语100条
2019/10/15 职场文书
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python