微信公众号接入

November 29, 2019
微信 公众号

1 引言

本文介绍:

2 公众号接入

接入有满足以下几个条件就可以了:

3 公众号与小程序联动

简单说就是用户在不同的程序有不同的ID(即open id),公众号和小程序分属不同的程序,而它们又都隶属于一个主体之下, 因此还有另一个统一ID(即union id),就是通过这个统一ID来实现公众号和小程序的联动的。

联动有什么作用?

举个例子,用户在小程序上下单了,在公众号上发消息通知用户,为什么不用小程序消息通知?小程序消息通知也可以, 但是由于它是一个公共频道,有严格的调用限制,每次调用都需要用户在小程序界面上有响应,才能赋能。

为了拿到union id,有什么办法呢?微信的指导思想在这里, 以下几个相关做法:

如果没有加到开放平台,小程序jcode2session接口 返回的将只有open id:{"session_key":"ZhXVspjocbU6ZDGvCikOXA==","openid":"oUwwN5OlVJwH4yXVpzxxxIeAs"}, 反之则是含有union id的: {"session_key":"UNGzlEu6mWadO3Gt2Nn+HQ==","openid":"opq1H4z4TRenAwxxxLK3oK3aY","unionid":"oZgMowNYzXpi0vxxx8abTGFKE"}

{
    "access_token": "27_vnMRvezIXd4kAys1XLKZ6Sug5eL5OXBnJwYPmlQceayyOlqzw0lG4gedpEUquzGifchHgLFtRxpmkIDv5tiCL3949Uq4uVq_4r6YPjlPzpA",
    "expires_in": 7200,
    "refresh_token": "27_8UM_0EJL-Rn93bMJLZ0deZ90Gu16SwOlNostzX8QFkeZKXh9VVlX4AtvSe6zYs88yLSO96QFmAJKsYW6u0y9s1b5RADPGUDqFeLl5ZFjrlk",
    "openid": "oikJZ1inJeMkSVEqV2uGQHK9XovA",
    "scope": "snsapi_userinfo",
    "unionid": "oZgMowNYzXpi0vcqcOzY8abTGFKE"
}

注意:
(1)scope=snsapi_userinfo表示的获得用户信息,如果用scope=snsapi_base 则少unionid这项
(2)这个授权只是拿数据,能在后端与小程序用户关联上,与关注公众号、公众号发消息无关!

{
    "subscribe": 1, // 这个表示是否已经关注公众号
    "openid": "oikJZ1lho-IYRxxxcTPznGMUXdw",
    "nickname": "•Mr",
    "sex": 1,
    "language": "zh_CN",
    "city": "深圳",
    "province": "广东",
    "country": "中国",
    "headimgurl": "http://thirdwx.qlogo.cn/mmopen/xx/132",
    "subscribe_time": 1575016243,
    "unionid": "oZgMowMxsxxKBSjwdL_Fw",
    "remark": "",
    "groupid": 0,
    "tagid_list": [],
    "subscribe_scene": "ADD_SCENE_SEARCH",
    "qr_scene": 0,
    "qr_scene_str": ""
}

openid怎么来?用户关注公众号,微信就会给消息到用户后台,就是前文提到的POST接收消息的接口。

简单汇总一下这些接口:

4 公众号消息通知

只要用户关注了公众号,就能给用户发消息了。请求链接:https://api.weixin.qq.com/cgi-bin/message/template/`send`?access_token=27_4KIEf26fiFK8xxxjIwY8GAXgAFAXRO,BODY里的内容是:

{
    "touser": "oikJZ1inJeMxxuGQHK9XovA", // 这个公众号用户的编号
    "template_id": "oMqhnL3hz4xxKMgO2Ofx08RtOMplVLWI",
    "url": "",
    "topcolor": "#FF0000",
    "data": {
        "first": {
            "value": "亲爱的读者,您已经归还《最后的慈悲》,共1本书",
            "color": "#000000"
        },
        "keyword1": {
            "value": "湖洲图书馆",
            "color": "#173177"
        },
        "keyword4": {
            "value": "2019-11-20 14:30:00",
            "color": "#173177"
        },
        "remark": {
            "value": "欢迎下次光临",
            "color": "#000000"
        }
    }
}

5 彩蛋

小程序端能加一个条幅,引导用户去关注,没关注出来可以,但是要是用户已经关注过,如何不出来这个条幅?一般情况,用户关注和取关都能收到微信的消息, 但是这个可不一定靠谱,直接去微信查应该比较稳妥,于是百度一下,关键字:微信接口 查用户是否关注了公众号,返回的结果是:

百度搜索结果

打开第一个页面,看到的内容不太想要:

内容

其实它里面有隐藏关键信息:”subscribe”: 1, //这就是我们想要的值哈,解释如下表格

谷歌同样的关键字,返回的结果是:

谷歌搜索结果

打开第一个页面,看到的内容是:

内容2

谷歌对语义的解析更独道,即便百度声称中文搜索很专业。英文那就更没得比了,百度的结果是不着边,谷歌一般都是第一条解决需要。 这种可以体现搜索价值的产品被墙,某些角度来讲实在是阻碍人类进度。


loading