PHP+微信小程序分享获取群ID

  • 前言
  • 需求说明
  • 代码
  • 总结

前言

时间2018年10月,吐槽下微信小程序,因为一些原因说不能在分享到群的时候获取群id,但是我在开发的时候明显说可以获取的(体验版),但是正式版一跑问题就来了,获取群id时得时不得,不得:不进分享成功后的回调方法0.0。无爱来,所以只能更换下思路,从用户点击群里面的分享地址进来后在进行获取来,浪费俺宝贵的时间。

需求说明

通过小程序发布文章,要求可以指定用户查看,然后通过分享到群进行扩散。那问题来了,要想指定用户查看你得有用户分组(组对应群),所以就有来当前的问题和解决方案。

代码

小程序app.js
因为onLaunch事件的生命周期问题,所以放onShow中,我这里是把iv和encryptedData缓存起来,因为要跟文章用户关联的话在这里处理会有重复

  onShow: function (ops) {// console.log(ops);if (ops.scene == 1044) {wx.getShareInfo({shareTicket: ops.shareTicket,success: function (res) {var params = {iv: res.iv,encryptedData: res.encryptedData};wx.setStorageSync('shareTicket', params);}})}},

小程序index.js
index属于入口,我把逻辑放这里来处理,分享得地址进来的话要把对应的群信息拿到,并关联到文章,用户,然后在判断访问的用户是不是有权访问文章内容,符合条件就会在跳转进文章的详情页面,过程中虽然会有点体验上的问题,但是总体来说影响不大。。。

  /*** 生命周期函数--监听页面加载*/onLoad: function(options) {var that = this;var user_id = '';//用户缓存信息,如果没有就重新授权,记得把对应参数带过去user_id = wx.getStorageSync('userinfo');if (!user_id) {wx.removeStorageSync('userinfo');that.setData({redview: false});wx.reLaunch({url: '../auth/auth?soft_wen_id=' + options.soft_wen_id + '&matching=' + options.matching + '&type=' + options.type,});return false;}var shareTicket = wx.getStorageSync('shareTicket');//判断是否上分享进来,判断是否有权限(api)顺便绑定用户的群信息,如果没有权限就跳转到首页if (typeof(options.matching) != "undefined") {var where = {matching: options.matching,//文章每次分享都会生成的随机码,跟群进行匹配soft_wen_id: options.soft_wen_id,//文章idmember_id: user_id.member_id,//用户idsession_key: user_id.session_key,//用户授权后拿到的keyiv: shareTicket.iv,encryptedData: shareTicket.encryptedData};//接口请求http.http_post('memberbinding', where, false, function(binddata) {if (binddata.data.status == 200) {wx.removeStorageSync('shareTicket');//业务逻辑});} else {//业务逻辑}},

PHP代码
接口这里就是走一些业务逻辑了

    /*** 用户通过文章分享地址进入小程序,关联绑定群id* @param $post* @return array*/public static function MemberBinding($post){//不是分享地址进来if ($post['matching'] != '9999') {//关联群跟用,群跟文章if ($post['encryptedData'] != 'undefined') {$result = WxVisitLogic::getGroup($post);if (!$result) {return ['features' => 2, 'msg' => '软文群信息异常'];}}}//判断当前文章是否需要权限//判断当前用户是否少文章制定阅读的人$SoftMember = SoftMember::find()->where(['soft_wen_id' => $post['soft_wen_id'], 'is_appoint' => 1])->asArray()->all();$myMember = SoftMember::find()->where(['soft_wen_id' => $post['soft_wen_id'], 'member_id' => $post['member_id'], 'is_release_id' => 1])->asArray()->one();if ($myMember) {return ['features' => 1, 'msg' => '用户发布者,有权限访问'];}if (count($SoftMember) > 0) {$is = false;foreach ($SoftMember as $item) {if ($item['member_id'] == $post['member_id']) {$is = false;break;} else {$is = true;}}if ($is) {return ['features' => 2, 'msg' => '当前用户不是软文制定阅读的,无权限访问'];} else {return ['features' => 1, 'msg' => '用户属于制定阅读的人,有权限访问'];}} else {//虽然无权限,还是要帮增加一条关联信息$SoftMembers = SoftMember::find()->where(['soft_wen_id' => $post['soft_wen_id'], 'member_id' => $post['member_id']])->asArray()->one();if (!$SoftMembers) {//新增一条$SoftMember = new SoftMember();$SoftMember->member_id = $post['member_id'];$SoftMember->soft_wen_id = $post['soft_wen_id'];$SoftMember->is_release_id = 0;$SoftMember->created_at = time();$SoftMember->updated_at = time();$SoftMember->save(false);}return ['features' => 1, 'msg' => '软文无权限限制,随意查看'];}}

WXBizDataCrypt是解密获取群id的类,基础上通用,这里就不放出来

    /*** 分享到群后获取群id*/public static function getGroup($post){$weiXinXcx = Yii::$app->params['WECHAT']['weixinxcx'];$pc = new WXBizDataCrypt($weiXinXcx['appid'], $post['session_key']);$errCode = $pc->decryptData($post['encryptedData'], $post['iv'], $result, $weiXinXcx['appid'], $post['session_key']);//解密是否出错if ($errCode != 0) {return false;}//转换数组$result = json_decode($result, JSON_UNESCAPED_UNICODE);$Group = Group::find()->where(['groupwx_id' => $result['openGId']])->one();//不存在就新增if (!$Group) {$Group = new Group();$Group->groupwx_id = $result['openGId'];$Group->save();}//如果分享到的群关联当前访问用户(包括发布者)$MemberGroup = MemberGroup::find()->where(['member_id' => $post['member_id'], 'group_id' => $Group->group_id])->one();$SSoftWen =  SSoftWen::find()->where(['soft_wen_id' => $post['soft_wen_id']])->asArray()->one();$MemberGroup1 = MemberGroup::find()->where(['member_id' => $SSoftWen['cuser_id'], 'group_id' => $Group->group_id])->one();if (!$MemberGroup) {//新增关系$MemberGroup = new MemberGroup();$MemberGroup->member_id = $post['member_id'];$MemberGroup->group_id = $Group->group_id;$MemberGroup->save(false);}if(!$MemberGroup1){//新增关系$MemberGroup1 = new MemberGroup();$MemberGroup1->member_id = $SSoftWen['cuser_id'];$MemberGroup1->group_id = $Group->group_id;$MemberGroup1->save(false);}//修改进软文表中if(!$SSoftWen['scenario']){SSoftWen::updateAll(['scenario' => $result['openGId']] , ['soft_wen_id' => $post['soft_wen_id']]);}$group = SSoftGroup::find()->where(['matching' => $post['matching'],'soft_wen_id'=>$post['soft_wen_id'],'group_id'=>$Group->group_id])->asArray()->one();if(!$group){$SSoftGroup = new SSoftGroup();$SSoftGroup->group_id = $Group->group_id;$SSoftGroup->soft_wen_id = $post['soft_wen_id'];$SSoftGroup->matching = $post['matching'];$SSoftGroup->save();}return true;}

总结

因为场景问题,可能大家的解决方案会不一样,但是分享者的初衷就是为了问题提供多种解决方案,通过度娘总会看到让你灵光一闪的文章。最后小程序的发布用到资质也是坑,大家开发前最好做好调研,不然产品出来了,发现没有资质就凉凉了,审核估计被各种打回。。。
最后镇文图

PHP+微信小程序分享获取群ID相关推荐

  1. 微信小程序分享获取携带参数以及参数接收

    参考文章 onLoad(req) {_self=this;_globalData=getApp().globalData;this.webUrl=_globalData.PageWebUrl; if( ...

  2. uniapp 微信小程序分享给微信好友与分享到朋友圈功能

    微信小程序分享 使用方法: onLoad(){wx.showShareMenu({withShareTicket:true,//设置下方的Menus菜单,才能够让发送给朋友与分享到朋友圈两个按钮可以点 ...

  3. 微信小程序后台获取签名,裁剪并上传图片至阿里云oss

    微信小程序后台获取签名,裁剪并上传图片至阿里云oss 首先,设置微信开发者工具,选择校验合法域名,防止本地可应使用,线上报错问题: 其次,在微信公众平台–小程序开发,设置合法域名 Oss设置–> ...

  4. 微信小程序分享二维码生成

    生成微信小程序分享二维码 微信小程序官方开放的二维码的接口,其中有一个是生成小程序二维码的,还有一个是圆形的小程序码,我这里就用php生成二维码. 完整代码: public function shar ...

  5. 微信小程序 - 分享商品海报

    我们在微信小程序中经常会使用到分享商品海报,或者是重绘微信小程序分享链的图片功能.实现该功能只要跟着如下几个步骤就可以快速实现啦!(本文示例代码使用的是uni-app,原生或者其他框架需要将uni前缀 ...

  6. golang-vue实现微信小程序分享到朋友圈

    最近涉及到微信小程序分享到朋友圈,不知道微信为什么不直接接口分享,咱也不敢佛,咱也不敢问,只能百度问度娘,看官方文档,网上的一些分享五花八门,每一个重点的,所以整理了一下到底怎样生成二维码分享图片才是 ...

  7. 微信小程序分享功能开发及调试方法

    首先说一下使用方法如下,Button组件设置open-type="share"即可触发onShareAppMessage完成分享功能 <button class=" ...

  8. 微信小程序地图获取地点信息(打卡签到功能为例)-2020-7-26

    目录 微信小程序地图获取地点信息(打卡签到功能为例) 效果图 前提步骤 首先需要了解的 代码部分 配置性代码 功能性代码 demo 下载 微信小程序地图获取地点信息(打卡签到功能为例) 解决方案:利用 ...

  9. 最新微信小程序分享朋友圈

    微信小程序分享朋友圈 近日,微信小程序官方文档更新 wx.showShareMenu(Object object),其中显示小程序可以分享到朋友圈啦! 但是,设置分享朋友圈的前提是必须同时设置发生给朋 ...

最新文章

  1. 蔡氏电路matlab程序,蔡氏电路matlab仿真报告
  2. 自己使用的Android框架
  3. NYOJ 119 士兵杀敌(三)
  4. Python报错:The truth value of an array with more than one element is ambiguous
  5. profiler分析器——R语言
  6. Java8新特性解析
  7. 同步与阻塞的区别与联系
  8. 【Elasticsearch】es CPU热点线程 HotThreads 源码解析
  9. c#实现播放器的集中方式
  10. python中对象的特性_Python深入学习之对象的属性
  11. 6. 以下耦合度中最松散的耦合是_什么是程序设计中的高内聚、低耦合?
  12. 基于Matlab的极限学习机(ELM)实现
  13. JavaScript实现浏览器特定区域截屏和下载功能
  14. Codeforces Problem-69A Young Physicist
  15. 【ENOVIA 服务包】知识重用解决方案 | 达索系统百世慧®
  16. 操作系统—CPU调度与内存管理
  17. 团队项目开发编码规范
  18. 专业范儿的图表,打造专业范儿的技术人PPT
  19. php向js的函数内传递参数-用经纬度计算2点间的距离
  20. 微擎系统跟换服务器和域名,微擎修改服务器域名

热门文章

  1. 安卓自定义标题时候you cannot combine custom titles with other
  2. 这个彬彬打起电动超勇的
  3. 使用 Lisp 递归函数实现 斐波那契数列 Fibonacci
  4. [BZOJ 3938] Robot
  5. “阿里技术Leader拿那么多钱,每天都干些啥?”带50多人团队,我总结了14点体会!...
  6. Stata:异方差和自相关稳健F检验和t检验
  7. 什么是大数据?怎么理解大数据?有哪些作用和应用场景?
  8. 免费分享给大家一些iOS面试(包括BAT)
  9. GPU — GPU 虚拟化技术
  10. C++基础知识 - 头文件 #include