小程序绑定公众号进行消息推送,公众号授权功能

小程序绑定公众号,通过公众号进行消息推送,首先要在小程序上进行公众号的授权
授权不可以直接在小程序上打开,所以必须要小程序先跳到其他网页,再跳回小程序

1.我们是做了一个先做账号绑定小程序,再做公众号绑定小程序,没有绑定的话,就跳到外部链接

 wxBind () {
    // 绑定账号之后,再绑定小程序
    let that = this.data;
    const data = {
      account: that.userInfo.account,
      openid: wx.getStorageSync('openid')
    };
    WXAPI.wxBind(data).then((response) => {
      if (response.code === '0000') {
        this.setData({showUnbind: true});
        Toast(response.msg);
        setTimeout(() => {
          this.getUrl()
        }, 300)
      } else {
        this.getUrl()
        Toast(response.msg)
      }
    })
  },
  //小程序和公众号绑定
  getUrl() {
    let data = {}
    WXAPI.isBind(data).then((res) => {
      if (res.code === '0000' && !res.data) {
        let userInfo = wx.getStorageSync('userInfo');
        if (userInfo) {
          wx.navigateTo({
            url: "/pages/saas/saas?wxbind=wxbind"
          });
        } else {
          Toast('尚未登录,请前往登录')
          setTimeout(() => {
            wx.navigateTo({
              url: "/pages/login/login"
            })
          }, 300)
        }
      }
    })
  },

2.外部链接,将token带上
saas 页面的代码

<view>
  <web-view src="{{saasUrl}}"></web-view>
</view>
Page({
  data: {
    saasUrl: ''
  },
  onReady: function () {
    wx.setNavigationBarTitle({
      title: 'saas'
    })
  },
  onLoad (options) {
    let type = options.wxbind
    var url
    if (type && type == 'wxbind') {
      url = 'xxxxx/#/miniProgram?'
    } else {
      url = 'xxxxx?'
    }
    let userInfo = wx.getStorageSync('userInfo')
    let param = []
    for (let key in userInfo) {
      if (key !== 'tenancyCodeList') {
        param.push(key + '=' + userInfo[key])
      }
    }
    url = url + param.join('&')
    if (type && type == 'wxbind') {
      url =  url + '&wxbind=wxbind'
    }
    this.setData({saasUrl: url})
  }
})

xxxxx这个就是网页的网址,你可以跳去一个h5页面,根据路由跳到需要做公众号授权的页面

3.我的H5授权页面的代码

<template>
    <div>
        <!-- 公众号授权测试 -->
    </div>
</template>
<script>
import apiProgram from '@/api/miniProgram'
import store from '../../store'
export default {
    data() {
        return {
            url: '',
            wechatCode: '',
            token: ''
        }
    },
    methods: {
        getCode() {
            let tenancyCode = this.getQueryParam('tenancyCode')
            let data = {
                tenancyCode: tenancyCode,
                redirectUri: `xxxxxx/#/miniProgram?token=${this.token}`,
                state: 2,
                scope: 'snsapi_userinfo'
            }
            apiProgram.pageUrl(data, (res) => {
                if (res.code === '0000') {
                    let url = res.data.url
                    this.url = url
                    window.location.href = this.url
                } else {
                    this.$message.warning({ message: res.msg })
                }
            })
        },
         //切割字符串
        getQueryParam(key) {
            const pairs = location.href.split('?')[1].split('&')
            for (let i = 0; i < pairs.length; i++) {
                if (pairs[i].indexOf(key + '=') === 0) {
                    return pairs[i].substr(key.length + 1)
                }
            }
        },
        // 获取token
        getToken(key) {
            const pairs = location.href.split('?')[2].split('&')
            for (let i = 0; i < pairs.length; i++) {
                if (pairs[i].indexOf(key + '=') === 0) {
                    return pairs[i].substr(key.length + 1)
                }
            }
        },
        //小程序绑定公众号
        bind(code) {
            var token = this.getToken('token')
            this.$store.dispatch("SetAccount", {
                token
            })
            let data = {
                code: code
            }
            apiProgram.weChatBind(data, (res) => {
                if (res.code === '0000') {
                    this.$message.success({ message: res.msg })
                    setTimeout(() => {
                        wx.miniProgram.switchTab({
                            url: "/pages/index/index"
                        });
                    }, 300)
                } else {
                    this.$message.warning({ message: res.msg })
                }
            })
        }
    },
    mounted() {
        if (location.href.indexOf('code=') !== -1 && location.href.indexOf('state=') !== -1) {
            this.wechatCode = this.getQueryParam('code')
            if (parseInt(this.getQueryParam('state')) === 2) { // 状态2为绑定
            // 如果这里有code的话
                this.bind(this.wechatCode)
            }
        } else {
            this.token = this.getQueryParam('token') || ''
            // 更新一下token
            this.getCode()
        }
    }
}
</script>

一定要注意去更新token,也可以存在内存去,返回之后再从内存里面拿,这里的redictUrl必须去公众号后台去配置~只用配置xxxx就行,绑定必须拿到授权后的code

最后:

e mmmm 不懂的话 可以加我微信吧 467015242 备注 公众号消息推送~~~

原文地址:https://www.cnblogs.com/antyhouse/p/12169169.html

时间: 2024-12-08 22:03:52

小程序绑定公众号进行消息推送,公众号授权功能的相关文章

Java对接微信公众号模板消息推送

内容有点多,请耐心! 最近公司的有这个业务需求,又很凑巧让我来完成: 首先想要对接,先要一个公众号,再就是开发文档了:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html 不过请注意这一点 ok,我们继续:再来完成公众号的基本配置: 服务器地址(URL):必须以http://或https://开头,分别支持80端口和443端口.这个URL是很重要的,需要响应微信发送的token验证 令牌(To

PHP 微信公众号开发 - 消息推送

项目微信公众号开发,需要做用户消息推送,记录下来以便日后使用 1,接上一篇文章,可以查看如何获取用户openid PHP 微信公众号开发 - 获取用户信息 2,添加模板消息 3,查看模板详情 根据模板详情设置对应推送消息 4,代码实现 1 <?php 2 // 字符编码 3 header("Content-Type:text/html; charset=utf-8"); 4 5 // 微信接口类 6 class WeChat{ 7 private static $appid; 8

ASP.NET 微信公众平台模板消息推送功能完整开发

最近公众平台的用户提出了新需求,他们希望当收到新的邮件或者日程的时候,公众平台能主动推送一条提醒给用户.看了看平台提供的接口,似乎只有[模板消息]能尽量满足这一需求,但不得不说微信提供的实例太少,而且只有PHP的,不过摸索了一下还是成功的实现了. 首先是准备工作,需要申请开通[模板消息]功能,网上教程很多.然后申请通过之后,用户可以从现有的模板里选择15个使用,也可以自己添加模板使用.这里吐槽一下:申请添加新的模板时,微信出于保护用户的目的禁止了一些“看起来会很频繁”的消息类型,比如这图里的——

微信公众号模版消息与小程序消息推送不同场景不同应用

1.公众号-插件-模板消息 图1.1 图1.2 图1.3 2.小程序-模板消息 图2.1 图2.2 图2.3 3.区别   1.推送条数不同 公众号的消息推送(以下简称公推)可以采用接口在后台调用接口无限向用户推送消息 小程序的消息推送(一下简称微推)只能允许开发者向用户在7天内推送有限条数的模板消息(引用官方的话)解释过来是:很难实现无限制推送用户消息(但是可以实现) 2.出现位置不同 公推消息形式会在该公众号下,与微信消息等级相同(如图1.2形式) 微推且消息出现在位置如图2.2,在"服务通

微信小程序之模板消息推送

最近在用sanic框架写微信小程序,其中写了一个微信消息推送,还挺有意思的,写了个小demo 具体见官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/template-message/sendTemplateMessage.html 文档其实写的很详细清除了,包括返回数据的类型,报错信息 大致流程就是:调用微信小程序的接口,获取access_token,然后再调用发送模板信息的接口,发送消息 获取access_t

微信公众号实现无限制推送模板消息!可向指定openID群发

公众号提供模板消息接口,除了公众号规定的上限次数,一般情况下不能无限制推送,每次最多调用10万次,具体的看公众号后台开发接口权限>发送消息>模版消息(业务通知),可以看到每天最大的推送次数. 公众号后台没有提供模板消息推送的操作界面,需要通过微号帮公众号第三平台实现,支持全部粉丝推送.分组推送,暂不支持使用粉丝openID群发. 1.模板消息群发功能 操作界面设置,模板消息发送任务和创建模板消息,只有服务号才能使用模板消息群发功能,首次使用先在公众号后台申请模版功能. 2.创建模板消息 首次点

微信小程序开发:设置消息推送

开发设置中,启用并设置消息推送配置后,用户发给小程序的消息以及开发者需要的事件推送,都将被微信转发至该服务器地址中. 不过照着说明去操作,即使按照最简单的明文方式去设置,还是提示Token验证失败.仔细研究说明,其实服务器验证过程很简单,用Get发来一个连接,然后在自己的页面中去检验,不想做也可以先不做,直接返回echostr即可.关键在,怎么返回,开始我还以为必须要按照xml或者json返回,试了半天,其实很简单,清空所有其他输出,直接返回echostr即可. Response.Clear()

消息推送 - 微信公众平台订阅用户获取最佳途径

微信公众平台统计功能中用户增长页增加增长来源统计后,我们可以知道用户获取途径大致有①搜索公众号名称②搜索微信号③图文消息右上角菜单④名片分享⑤其他,老贼也在第一时间为我们总结了目前微信公众平台用户获取最佳途径还是通过消息推送,另一个就是互推. 首先是正常运营状态,即指不做任何推广,单纯靠消息推送获取新用户,在这种条件下获取用户最多的途径竟然是……其他!而在这个里面据我观察主要是通过图文消息标题下蓝字关注进来的,也就是说一方面用户通过这种方式点击关注公众号的习惯已经养成,另一方面很多公众账号在头图

读《架构师于小波:魅族实时消息推送架构》总结

原文网址:http://www.csdn.net/article/2015-12-22/2826542 1.系统架构设计.系统架构逻辑上划分,划分为四层,最下面的一个是提供魅族手机的接入.第二层是消息分发服务,主要的作用就是提供上行消息的路由和用户下行消息的路,这边有一个用户路由表.第三层是订阅信息,第四层是存储,包括离岸消息存储,包括订阅消息的存储. 2.手机功耗问题主要涉及两个点,第一个是流量,第二个是电量.先看流量的问题,怎么样解决流量的问题,通过协议选择,现在传统的互联网上,有比较典型的