1.unionid机制
同一用户,对同一个微信开放平台下的不同应用,UnionID 是相同的。所以前提是你需要注册小程序和关注公众号,且小程序和公众号必须在同一主体下。
2.获取unionid途径
- 开发者可以直接通过 wx.login +
code2Session
获取到该用户 UnionID,无须用户授权。 - 小程序端调用云函数时,可在云函数中通过 Cloud.getWXContext 获取 UnionID。
- 用户在小程序(暂不支持小游戏)中支付完成后,开发者可以直接通过
getPaidUnionId
接口获取该用户的 UnionID,无需用户授权。注意:本接口仅在用户支付完成后的 5 分钟内有效,请开发者妥善处理。
3.获取公众号粉丝列表
调用微信官方接口获取: GET https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID
返回参数:
{
"total": 69,
"count": 69,
"data": {
"openid": [
"oYVIS6LRJ43nUsT-skfLmycVCDAU",
"oYVIS6FkuNpBcEPOVGEEJmAwXfwY",
"oYVIS6AXdHrwOIJuTmeZfZ6DT9xk",
"oYVIS6JaTgd_z36YCisG0RtcngV8",
"oYVIS6N06KNZhvbkNI0TdvgVITu8",
"oYVIS6MBVxAqk7YHpLsY2FrdhtnM",
"oYVIS6KoDEQkkNzghTNLTtNjhQbo",
"oYVIS6KUR9a43ZGAzAjDXyPZW57U",
"oYVIS6OCx7HciA6Qd5JNsGExMAJ4",
"oYVIS6B6nMst5iq1ZUbEJ6WNfOcU",
"oYVIS6PNKAqPWJC3aUBtOhjZ_SaU",
"oYVIS6HWxtPuzVwqmVdrO1kLyT-c",
"oYVIS6FUCzY4G0AZnhmGn_9TZ1t8",
"oYVIS6Dq--oSMHgHI9b-pW7tSawU",
"oYVIS6CFAQf7m_HR6HpE64kvP-uY",
"oYVIS6CvNFJuG3pkFe2tR7XQq3g0",
"oYVIS6Djksb13fhsxui2G851mtaY",
"oYVIS6IsPjv7UMJYDaahW2B2vOPs",
"oYVIS6M5CYcOBm7HqKdL7ILizX2w",
"oYVIS6D88ZgIvaR3MsazMpd5Oz50",
"oYVIS6D4kcQAXhh1ov5hNjXWcQdE",
"oYVIS6Ede6xs1Cig9kWlfyG1I00c",
"oYVIS6GS7yoL2ccvPtHP3yox_NC8",
"oYVIS6JKPQN1MF1iWPkM1QaUn4R4",
"oYVIS6Ert7mcGBPy-uZh5ABVWo08",
"oYVIS6GIw8w6LauisvRJl8OlRdzM",
"oYVIS6B0izng1TyJ-Kpferl6lgR0",
"oYVIS6MlC3Szun0QB0qZ5EuzliBE",
"oYVIS6I8CdN60DWLXKMXiMDAD5a0",
"oYVIS6L-yQNGNWeBCL8NdKsUwZgw",
"oYVIS6J_rTqjrPyYC2yQrf7_hDqU",
"oYVIS6MrGHLCJImZZ384_94zSm9M",
"oYVIS6ExNQmODJBUcM4INsTM2Y7M",
"oYVIS6MPA6OqAT8kjIPRDHJo0VgA",
"oYVIS6H0vutcPXOBuzOURi1X_6w4",
"oYVIS6GgWJ_sBOYbKYsGIVpjAnbc",
"oYVIS6BjP1IEc5ISnwUvo_1eGl7o",
"oYVIS6K5vUDjoiwclBlSk3IKSCw4",
"oYVIS6HNd1mT4kjmNXhO_HK2bGoA",
"oYVIS6LUB5xreENxLS4o-DOKS_qY",
"oYVIS6BZBNOEazLqhv5VbWUlRdFA",
"oYVIS6NvKnj7657AT1VdMpy8_7MM",
"oYVIS6NhC7Nt57bwTNNJnCzGN4h8",
"oYVIS6CZ5WzmXENmFkryAO4Tyf6o",
"oYVIS6BjvuhzSZPK46Z9s0pxc6ns",
"oYVIS6PhNpMhECguFqkLGmf_nQUE",
"oYVIS6MHDkQMteg-WYuoGbPKghVY",
"oYVIS6NOZvdZEkBkbXkfxN7Mpaqw",
"oYVIS6GEqSSp5l5voo7liSiNqgNY",
"oYVIS6KnTJnRVe_3Sssjgux7JUiE",
"oYVIS6Bn_jKI-Pa_M1HTNuHSZkNk",
"oYVIS6IeReRlqOGWQuqUSlL9Bcio",
"oYVIS6DTkmXfJL3xB3BVPq7T3a2Y",
"oYVIS6P8Z8esToaGSpGaShimXMCQ",
"oYVIS6KpBFJ6AXz96X29NrsJ8UBQ",
"oYVIS6E1vGHQdV3H83c8Ek-1GEAA",
"oYVIS6FTMYQkCMy_OPN_d2JGwO6E",
"oYVIS6MKUuJgqRhoXSPubhCBgdOY",
"oYVIS6Ic6oAGI6WrHoW8UJsF3LhQ",
"oYVIS6GfIUMWFxhB0O-QCTpDVaSQ",
"oYVIS6DyMzYaOISOGfhgzGKgI5pk",
"oYVIS6ICm_IFzPDDozG2sVd0S8tU",
"oYVIS6CkTs3Ot7RHf3M3a44HNBI0",
"oYVIS6Pi-Dni5Fpze5zfTDAMzl-U",
"oYVIS6PW-Ze_tAcXRX0D3iGsYY-c",
"oYVIS6POBdEuhCphfTdBLsBF_SW4",
"oYVIS6LT0zwYiDM0aKKg6MFatVjw",
"oYVIS6CM-_WDXM8DleoZytvMz8uM",
"oYVIS6EqaCwCUWr5teo_QAmQpX_o"
]
},
"next_openid": "oYVIS6EqaCwCUWr5teo_QAmQpX_o"
}
3.通过用户公众号openid获取unionid
调用微信官方接口获取: GET https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
返回参数:
{
"subscribe": 1,
"openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M",
"language": "zh_CN",
"subscribe_time": 1382694957,
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL",
"remark": "",
"groupid": 0,
"tagid_list":[128,2],
"subscribe_scene": "ADD_SCENE_QR_CODE",
"qr_scene": 98765,
"qr_scene_str": ""
}
方法1:可将unionid和小程序的openid都存在库里,遍历公众号粉丝openid列表,通过第三步获取uunionid再与库里的做对比
方法2:用户关注或取消关注公众号时,后端可利用接口来监听(可参考:https://blog.csdn.net/qq_53639759/article/details/136376660,在用户关注时可获取他的公众号openid,再去换取unionid,与库里的做对比即刻。