• 微信公众号开发中遇到的一些经验


     

    1、关于获取用户信息的方式总结
    2、关于微信的X5内核的接口超时重发解决方案
    3、关于微信分享的经验总结


    1、关于获取用户信息的方式总结
    获取用户信息的步骤:

    第一步:发起网页授权,获取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,如果你的业务是针对关注本公众号的用户,可以使用用户管理类接口中的“获取用户基本信息接口”。

    2、关于微信的X5内核的接口超时重发解决方案
    问题现象:前端发出一个http请求,当这个请求超过10s的时候,后端会收到两个http请求。

    问题原因:微信的X5内核浏览器,会针对超过10秒的http请求,自动做中断处理,然后自己重新发起这个http请求,把第二次的响应结果返回给前端。

    解决方案:后端针对http请求做缓存处理,第一次的请求做缓存(这次微信支付项目,是存放在Redis中),当第二次相同的请求发过来的时候,把第一次的请求响应,返回给前端。

    推荐文章:https://blog.csdn.net/wangpf2011/article/details/80066069

    3、关于微信分享的经验总结
    微信分享,需要调用微信的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中,以一个字符串的方式存进去。

  • 相关阅读:
    Codeforces C. Almost Equal (数学规律)
    codeforce D. Shortest Cycle(floyd求最短环)
    Codeforces 1204D2. Kirk and a Binary String (hard version) (dp思路)
    codeforces 1204C Anna, Svyatoslav and Maps(floyd+dp)
    hdu 6214 Smallest Minimum Cut(最小割的最少边数)
    扩展欧几里得求解同余方程(poj 1061)
    poj 3281Dining(网络流 拆点)
    poj 3057(bfs+二分匹配)
    买鱼杂感
    geotrellis使用(十四)导出定制的GeoTiff
  • 原文地址:https://www.cnblogs.com/onesea/p/13291861.html
Copyright © 2020-2023  润新知