公众号(生活号)对接

支付宝

文档地址open in new window

不同于微信的openid + unionid

支付宝和微信不同的就是user_id就是全局唯一,多个app可以互通。

微信

网页扫码登录open in new window

H5网页获取openidopen in new window

微信的域名允许http进行https重定向依旧拿code可以获取授权

# HTTP redirect
server {
    listen      80;
    listen      [::]:80;

    location / {
        return 301 https://www.example.com$request_uri;
    }
}

微信网页开发流程

在公众号未申请或者认证未通过时可以使用测试公众账号进行开发 授权open in new window

  1. 公众号开发需要域名后,配置前端域名以及js安全域名(重定向域名)

  2. 获取授权(获取用户的code)拿code去和后端进行网页的授权

    • 静默获取授权 https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect

    • 用户授权(在关注后也会静默授权,不会弹窗) https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

  3. 如需获取用户的unionid需要公众号绑定到微信开放平台帐号(过程中可能需要付费认证,政府类的机构好像可以免费)

  4. 微信jsapi

    • 由于微信不同于支付宝,所有的jsapi都需要进行授权先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”

    • 引入JS文件 在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.6.0.js 如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://res2.wx.qq.com/open/js/jweixin-1.6.0.js (支持https)。 建议在微信的加载时候就进行jssdk授权(项目强依赖微信的jsapi就在获取jssdk后) 部分方法采用此文件,例如whatWebView

      预加载jssdk的(包含微信以及支付宝)
      export const isReady = function () {
        return new Promise((resolve, reject) => {
          // 根据不同客户端进行等待注入jsapi,没有则直接渲染
          if (isAli) {
            ready(function () {
              resolve()
            })
          } else if (isWeChat) {
            axios({
              method: 'get',
              url: `${baseURL}/appointment/getJSSDK`,
              params: {
                url: window.location.href.indexOf('#') > -1 ? window.location.href.split('#')[0] : window.location.href
                // 'http://81.69.44.115/zjh/html/covid/'
              }
            })
              .then((res) => {
                const { appId, timestamp, nonceStr, signature } = res.data.data
                wx.config({
                  appId,
                  timestamp,
                  nonceStr,
                  signature,
                  jsApiList: ['scanQRCode', 'previewImage', 'openLocation', 'getLocation', 'hideAllNonBaseMenuItem']
                })
              })
              .catch(() => {
                // Toast({ message: JSON.stringify(err), duration: 0 })
                Toast({ message: '暂无法提供微信公众号服务!' })
                return reject(new Error('部分功能可能暂无法提供服务!'))
              })
            wx.ready(function () {
              wx.hideAllNonBaseMenuItem()
              /* config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,
              所以如果需要在页面加载时就调用相关接口,
              则须把相关接口放在ready函数中调用来确保正确执行。
              对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。*/
              resolve()
            })
          } else {
            // app中
            if (window?.android?.getUserInfo) {
              resolve()
            } else {
              // Toast({ message: '请在微信中打开', forbidClick: true, duration: 0 })
              // reject(new Error('请在APP打开'))
              resolve()
            }
          }
        })
      }
      

      vite打包的配置

      build: {
         rollupOptions: {
             external: ['wx','alipay','wxjs'],
             output: {
                 globals: {
                     wx: 'wx',
                     alipay: 'AlipayJSBridge',
                 },
             },
         }
      }
      
Last Updated: