获取用户信息的步骤:
第一步:发起网页授权,获取code。这一步发生在前端
第二步:通过code,获取access_token。appId + secret + code + grant_type =============> access_token + openid + refresh_token 。
第三步:刷新access_token(看情况判断是否需要)refresh_token ===========> openid + access_token + refresh_token
第四步:通过openid + access_token,获取用户基本信息。
获取微信用户的基本信息,从分类上来说,分为三类:
第一类:直接获取用户基本信息,不需要用户关注公众号。
以snsapi_userinfo为scope发起的网页授权,是用来获取用户基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
第二类:只获取用户openId,不需要其他信息。
以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
第三类:需要用户关注公众号,获取用户openId,通过微信提供的接口,查询用户的其他相关信息。
用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。
推荐做法:
1,如果业务仅仅需要一个判断用户的标识,直接使用以snsapi_base为scope发起的网页授权。
2,如果你的受众群体,是面向所有的未知用户,但是你还想获取除openId标识之外的一些信息,最好使用以snsapi_userinfo为scope发起的网页授权。
3,如果你的业务是针对关注本公众号的用户,可以使用用户管理类接口中的“获取用户基本信息接口”。
问题现象:前端发出一个http请求,当这个请求超过10s的时候,后端会收到两个http请求。
问题原因:微信的X5内核浏览器,会针对超过10秒的http请求,自动做中断处理,然后自己重新发起这个http请求,把第二次的响应结果返回给前端。
解决方案:后端针对http请求做缓存处理,第一次的请求做缓存(这次微信支付项目,是存放在Redis中),当第二次相同的请求发过来的时候,把第一次的请求响应,返回给前端。
推荐文章:https://blog.csdn.net/wangpf2011/article/details/80066069
微信分享,需要调用微信的js-sdk,对于前端,使用这个功能,需要分这么几个步骤
第一步:引入js文件。
http://res.wx.qq.com/open/js/jweixin-1.4.0.js
第二步:通过config接口,注入权限验证配置。
微信签名规则要求:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#62
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名
jsApiList: [] // 必填,需要使用的JS接口列表
});
其中,timestamp,nonceStr,signature这三个字段,是有一个签名算法,由服务端返回给前端的。
第三步:通过ready接口,处理成功验证。
wx.ready(function(){
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});
特别注意:
1、自定义的微信分享功能,如果你想看到自定义的图标,title以及描述等内容,使用的链接,必须是自己微信公众号的网页链接。
2、如果你想得到浏览网页的用户的基本信息,可以在用户进入页面之前,跳转网页用户信息授权页面。通过window.location.replalce(授权url)
3、配置微信公众号的入口,可以直接配置微信网页授权的路径。然后这个路径中的redirect_uri要填写你真正想要链接的地址。这样做的好处就是,你可以直接获取code。
4、微信分享接口,想要携带参数,必须放在state中,以一个字符串的方式存进去。