微信小程序如何获取群聊的openGid以及名称

小程序分享票据shareTickets

通常开发者希望转发出去的小程序被二次打开的时候能够获取到一些信息,例如群的标识。现在通过调用 wx.showShareMenu 并且设置 withShareTicket 为 true ,当用户将小程序转发到任一群聊之后,此转发卡片在群聊中被其他用户打开时,可以在 App.onLaunch 或 App.onShow 获取到一个 shareTicket。通过调用 wx.getShareInfo() 接口传入此 shareTicket 可以获取到转发信息。

  • 和场景值scene一样,shareTicket也是在App.onShow中获取比较合理

  • 必须在分享前调用wx.showShareMenu方法,否则不会带分享票据

//分享前share.js
Page({
 onLoadfunction () {
  wx.showShareMenu({
   withShareTickettrue
  })
 }
})
//分享后app.js
App({
 onShow(res) {
  console.log('app---onShow');
  console.log(res.shareTicket);
 }
})

  • 只有分享到任一群聊,shareTicket才会有值,否则是undefined

  • shareTicket也可以用来区分转发消息的场景

  • shareTicket主要用来获取转发详情,传入wx.getShareInfo()中获取加密数据,需要后端配合,返回解密数据

注意:注意:注意
鉴于官方“分享监听”能力调整,网上90%的滞后代码,误人子弟,在此必须给自己一个小要求,定期复读自己的文章,根据当时能力水平,提高文章质量,修正错误和滞后信息(吐槽一下度娘已死,没人打我吧?打我就删除)

类似如下代码,现在已不支持回调

微信小程序如何获取群聊的openGid以及名称

此次调整可能影响到三种分享功能的用法

第一种:判断用户是否分享成功,进而给予用户奖励。

例如:小程序提示用户“分享到5个群,可以获得一张20元的优惠券”。

这类诱导用户分享的行为是我们平台所不倡导的,后续将没有办法实现。

第二种:分享完成后变更当前的页面状态

例如:赠送礼品场景下,用户点击“赠送”按钮,将礼品分享出去,分享成功后,界面展示“等待领取”。

这类场景,我们建议可以适当调整交互方案。例如在分享后继续保留“赠送”按钮,但在页面上提示用户一个礼品只能被一人领取,重复赠送无效。

第三种:通过用户分享之后的 shareTicket 获取群唯一标识 openGId ,以显示对应群的相关信息。

例如:通过分享小程序到某个群里,可以查看该群内成员的排行榜。

此次调整后,用户分享完成后无法立刻显示该群的排行榜信息,但仍可在用户从群消息点击进入小程序时显示该群的排行榜信息。

分享监听能力调整后,对于分享的骚操作基本在App.onShow中进行,相当于授权那样,必须打开转发消息才能获取转发详情,

下面用代码来给大家分析分析。

 

方案:微信在更新分享接口后,原有的在onShareAppMessage中直接拿shareTicket已不复存在。根据最新文档显示,需要在App.onLaunch()跟App.onShow()中获取。

 

index.js

Page({

  /**
   * 页面的初始数据
   */
  data: {
    openGid''
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options{
    let that = this
    wx.showShareMenu({
      withShareTickettrue
    })
    app.getShareTiket(function (globalData{
      console.log('clickReload---globalData-->' + JSON.stringify(globalData))
      that.setData({
        openGid: globalData.openGid
      })
    })
  },
  clickReloadfunction () {
    let that = this
    app.getShareTiket(function (globalData{
      console.log('clickReload---globalData-->' + JSON.stringify(globalData))
      that.setData({
        openGid: globalData.openGid
      })
    })
  }
})

index.wxml

<!--index.wxml-->
<view wx:if="{{openGid}}" class='groupName'>
  群名称:<open-data type="groupName" open-gid="{{openGid}}"></open-data>
</view>

<view wx:else>
  <button bindtap='clickReload'>点击加载群名称</button>
</view>

<view>{{openGid ? openGid : '无'}}</view>

app.js

//app.js
App({
  globalData: {
    shareTicket'',
    openGid''
  },
  onLaunchfunction (options{

  },
  onShowfunction (options{
    let that = this
    if (options && options.scene == 1044) {
      that.globalData.shareTicket = options.shareTicket
    }
    console.log('onShow---options=--->' + JSON.stringify(options))
  },
  getShareTiketfunction (cb{
    let that = this
    // 展示本地存储能力
    if (that.globalData.shareTicket) {
      wx.getShareInfo({
        shareTicket: that.globalData.shareTicket,
        successfunction (res{
          console.log('getShareTiket---shareTicket-->' + JSON.stringify(res))
          let js_encryptedData = res.encryptedData
          let js_iv = res.iv
          wx.login({
            successfunction (res{
              let js_code = res.code
              console.log('code-->' + js_code)
              wx.request({
                url'xxxxxxxx',
                method'POST',
                data: {
                  code: js_code,
                  appId'xxxxx',
                  encryptedData: js_encryptedData,
                  iv: js_iv
                },
                successfunction (res{
                  that.globalData.openGid = res.data.openGId
                  console.log('getShareTiket---openGid' + that.globalData.openGid)
                  typeof cb == "function" && cb(that.globalData)
                },
                failfunction (err{
                  console.log('getShareTiket---err' + JSON.stringify(err))
                }
              })
            }
          })
        }
      })
    } else {
      console.log('不存在shareTicket')
    }
  }
})

这里也是需要用到解密的,和运动步数的那篇文章一样解密就可以了,然后返回openGid 就好了。

注意事项

1:必须调用这个接口wx.showShareMenu({withShareTicket: true}),否则在App.onLaunch()跟App.onShow()时,你拿不到shareTicket.

2:微信开发者工具可以模拟1044的场景,但是不会显示群名称,因为你不在群里。所以测试的时候,自己拉个微信群,然后分享到测试群,就能拿到群名称。

未经允许不得转载:PHP100中文网 - 中国第一档PHP资源分享门户 » 微信小程序如何获取群聊的openGid以及名称

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏