微信开放能力接入

前期准备

公众号、jssdk1.6.0版本、微信开发者工具(开发调试有些地方能用到)

首先一定安装jssdk1.6.0版本,不能安装低版本。 然后初始化SDK,具体配置如下

wx.config({
  debug: false,
  appId: signData.AppId, // 必填,公众号的唯一标识
  timestamp: signData.Timestamp, // 必填,生成签名的时间戳
  nonceStr: signData.NonceStr, // 必填,生成签名的随机串
  signature: signData.Signature, // 必填,签名
  jsApiList: ['onMenuShareTimeline'],// 用到什么API填什么
  openTagList: ['wx-open-launch-weapp']
})
复制代码

初始化时需要注意几个地方

  • timestamp需要后端生成
  • nonceStr 这个也需要后端生成
  • signature 这个也需要后端生成
  • SDK只能初始化一次

其次需要注意想应用微信开放能力,必须在初始化SDK的公众号后台配置安全域名,其分为多种类型且数量又限,若数据达到上限可通过转发等方式实现,具体何时需要什么配置下面会提到。

微信授权

微信授权分为两类,主动授权和静默授权。区别大致如下

对用户来说

  • 静默授权用户无感知,偷偷拿到数据
  • 主动授权得用户点击授权按钮,才能拿到信息

对应用者来说

  • 静默授权只能拿到openID
  • 主动授权能拿到用户的一切信息,比如头像

应用场景

  • 静默授权用在区分用户的需求中
  • 主动授权使用场景需要展示用户信息

流程

  1. 用户同意授权,获取code
{
  appid: 'xxx', //必填,公众号的唯一标识
  redirect_uri: 'xxx', // 授权后重定向的回调链接地址
  response_type: 'code', //返回类型,写成code即可
  scope: 'snsapi_base', // snsapi_base代表静默授权 snsapi_userinfo代表主动授权
  state: 'xxx', // 重定向后需要带的参数,自己想带啥带啥
  #wechat_redirect   // 这玩意必须带
}
复制代码

配置需要注意以下这个点

  • redirect_uri配置的url必须域名写在公众号后台接口权限的网页授权域名中,不然凉凉
  • 如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE
  1. 通过code换取网页授权access_token

该步骤会返回用户的openID,access_token,如果是静默授权的话,流程到此为止

  1. 拉取用户信息(用到第二步返回的数据,且scope需要为snsapi_userinfo)

到此为止,整个授权流程结束,但有几个事项需要注意

  • 第二步和第三步由于用到一些敏感数据,必须放在服务端来完成(不要尝试用客户端搞,100%失败)
  • access_token可能遇到过期问题,可以用refresh_token刷新
  • 建议封装一个整个流程的SDK,方便后续使用
  • 整个流程在微信开发者工具开发,不然整不了

详细过程及说明可参考微信开发平台(传送门)

H5跳转小程序

流程大致如下

  • 在公众号后台配置JS接口安全域名,然后在当前域名的服务器下安置一个文件(配置域名时会给你这个文件),这个流程必须搞,不然凉凉
  • 使用微信提供的标签
<wx-open-launch-weapp id="launch-btn" username="gh_xxxxxxxxxxx"  path="pages/login/login/main.html">
    <script type="text/wxtag-template">
        <style>.btn { display: flex;align-items: center; }</style>                              
        <div> <button class="wx-btn">跳转小程序</button> </div>          
    </script>
</wx-open-launch-weapp>
复制代码

需要注意的地方如下

  • username填写小程序的标识
  • path填写小程序的路径
  • 在React中使用时用script标签,在Vue中使用template模板,且其中嵌入的内容样式必须写成内联形式,外部css与内部是相互隔离的
  • 调试一定要用真机 不管在浏览器还是微信开发者工具都跳转不了小程序 切记切记切记
  • 如果不展示标签的内容 80%的可能是初始化SDK有问题 20%问题是域名配置和文件没导入 遇到问题从这两个点出发

基于React做了一个简单的组件封装

import React, { FC, useEffect } from 'react';
interface IProps {
  styles?: { [key: string]: string };
  children?: React.ReactNode;
  key?: string | number;
  username: string;
  path: string;
  onClick?: () => void; // 跳转能力由微信支持 但这块给你提供个钩子 可以做一些埋点等工作
}
/**
 * 
 * @param props children的样式必须写成内联式
 * @returns 
 */
export const WxOpenLaunchWeapp: FC<IProps> = (props) => {
  const { children, username, path, styles = {}, onClick } = props;
  const staticClick  = () => console.log('open miniprogram');
  return (
    <div style={{ width: '100vw', height: '100vh', ...styles, }}>
      {children}
      <wx-open-launch-weapp
        id="launch-btn"
        username={username}
        path={path}
        style={{ position: 'absolute', left: 0, top: 0, width: '100%', height: '100%' }}
      >
        <script type="text/wxtag-template">
          <div style={{ position: 'absolute', left: 0, top: 0, width: '100%', height: '100%', opacity: 0 }} onClick={onClick || staticClick} />
        </script>
      </wx-open-launch-weapp>
    </div>
  );
};
export default WxOpenLaunchWeapp;
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享