zoukankan      html  css  js  c++  java
  • 微信小程序推送公众号模板消息

    一、描述:

    因小程序自带推送只能实现单一推送,还得用户授权后才能推送,想要实现相关内容的多条推送,很显然不够用。

    好在通过公众号提送消息可以连接到小程序,并且公众号单日上线10万条,可以实现小程序推送功能。

    那么问题来了,如何实现公众号推送小程序相关消息呢?很显然可以使用openid来实现。

    下面简单说明实现思路(假设各平台已绑定):

      1. 获取公众号token(token每天限制200次,最好实现全局统一调用,避免token覆盖导致的请求问题)

      2. 获取公众号关注用户的openid

      3. 通过公众号openid来获取unionid(说明:unionid是微信开放平台全局唯一标识)

      4. 通过unionid来获取小程序的openid(一般这个可以查询数据库,设计数据库应该把openid,unionid字段设置上)

      5. 通过小程序openid,发送公众号模板

    二、前期准备:

    1. 微信小程序认证

    2. 微信公众号认证

    3. 微信开放平台认证(小程序和公众号绑定同一开放平台,且必须认证)

    三、代码实现

    1. 获取公众号access_token

    通过微信公众号的 AppId 和 AppSecret 获取 公众号的 access_token

    说明:

      请求ip需在公众号中的白名单

      access_token有效期为7200s(2h)

    // 请求地址:
    post https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET
    
    // 返回结果
    {
        "access_token": "ACCESS_TOKEN",
        "expires_in": 7200
    }

    2.获取公众号关注用户的openid

    一次拉取调用最多拉取10000个关注者的OpenID,可以通过多次拉取的方式来满足需求。

    参数说明:

      access_token:  调用凭证

      next_openid   第一个拉取的OPENID,不填默认从头开始拉取

      

    // 请求地址:
    get https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID
    
    // 返回结果:
    {
        "count": 2,
        "data": {
            "openid": [
                "OPENID1",
                "OPENID2"
            ]
        },
        "next_openid": "NEXT_OPENID",
        "total": 2
    }

    3. 通过公众号openid获取对应unionid

    微信针对公众号获取用户信息给出了2个接口:

      a. 获取单个用户信息

      b. 批量获取用户信息(每次最多100条)

    我这里主要讲解批量获取用户信息,如果想获取单个用户信息,可查看官方接口

    // 请求地址
    https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=ACCESS_TOKEN
    
    // post数据:
    {
        "user_list": [
            {
                "openid": "openid1", 
                "lang": "zh_CN"
            },
            {
                "openid": "openid2", 
                "lang": "zh_CN"
            }
        ]
    }
    
    
    
    // 返回数据
    {
        "subscribe": 1,
        "openid": "",
        "nickname": "",
        "sex": 1,
        "language": "",
        "city": "",
        "province": "",
        "country": "",
        "headimgurl": "",
        "subscribe_time": ,
        "unionid": "",  // 绑定开放平台才会有
        "remark": "",
        "groupid": 0,
        "tagid_list": [
            128,
            2
        ],
        "subscribe_scene": "ADD_SCENE_QR_CODE",
        "qr_scene": ,
        "qr_scene_str": ""
    } 

    4. 通过unionid获取小程序openid

    因为是在开发小程序,所以像unionid和openid这都是在数据库中存储,因此在这里直接查询数据库信息即可,这里不过多介绍。

    当然也可以通过前台传过来的code去解析openid,相关如下:

    // 请求地址
    https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
    
    
    // 返回结果
    {
        "sex": 1,
        "photoUrl": "",
        "openId": "",
        "uniodId": ""
    }

    5. 发送模板消息

     公众号模板消息需要公众号openid和小程序openid

    // 请求地址
    post https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
    
    // post数据
    {
      "touser": "公众号用户openid",
      "template_id": "",
      "url": "http://weixin.qq.com/download",
      "miniprogram": {
        "appid": "小程序appid",
        "pagepath": "index?foo=bar"
      },
      "data": {
        "first": {
          "value": "恭喜你购买成功!",
          "color": "#173177"
        },
        "keyword1": {
          "value": "巧克力",
          "color": "#173177"
        },
        "keyword2": {
          "value": "39.8元",
          "color": "#173177"
        },
        "keyword3": {
          "value": "2014年9月22日",
          "color": "#173177"
        },
        "remark": {
          "value": "欢迎再次购买!",
          "color": "#173177"
        }
      }
    }
    
    
    
    // 返回结果
    {
        "errcode":0,
         "errmsg":"ok",
         "msgid":200228332
    }

    使用效果:

    注意:这里的小程序必须是线上已发布的才可以。

    到此,公众号消息推送算是完事啦。。。

  • 相关阅读:
    如何去除文件的打开方式,恢复默认打开方式如何消除默认打开方式
    vbs和qtp一些脚本
    忘记oracle用户名密码怎么办?
    网关
    子网掩码的作用和设置方法
    三层交换机配置说明(华为S5700设置三个网段互通)
    QTP连接MYSQL数据库方法
    批量创建IP方法
    MongoDB中的一些坑( 2.4.10 版本)
    java的BASE64Encoder,BASE64Decoder加密与解密
  • 原文地址:https://www.cnblogs.com/cap-rq/p/13432470.html
Copyright © 2011-2022 走看看