微信公众号OpenId获取Unionid与企业微信客户外部联系人关联

需求场景:

将公众号与企业微信进行打通关联,平台通过用户OpenId间接的定位到企业微信中外部联系人,企业微信中外部联系人也能反向定位到微信公众号的具体用户(用户需关注对应公众号),实现精准客户跟踪服务。

步骤

Step1:获取公众号用户的OpenId(可在扫码关注时获取)
Step2:获取公众号用户OpenId对应微信平台唯一标识Unionid
Step3:获取企业微信员工列表
Step4:获取企业员工的联系客户ID列表
Step5:批量获取员工对应的外部联系信息(包括Unionid等基本微信用户信息)

关键部分实现

1.获取公众号用户的Unionid

String token="XXX";
String openId="o3bZiwl_XXXXX";
String _url="https://api.weixin.qq.com/cgi-bin/user/info?access_token="+token+"&openid="+openId+"&lang=zh_CN";
String data=OkHttpUtil.get(_url);
System.out.println("微信用户信息:"+data);

结果

{
    "subscribe":1,
    "openid":"o3bZiwl_XXXXX",
    "nickname":"",
    "sex":0,
    "language":"zh_CN",
    "city":"",
    "province":"",
    "country":"",
    "headimgurl":"",
    "subscribe_time":1646000000,
    "unionid":"oIelzww0v9DVWEisgdqY******g",
    "remark":"",
    "groupid":0,
    "tagid_list":[

    ],
    "subscribe_scene":"ADD_SCENE_SEARCH",
    "qr_scene":0,
    "qr_scene_str":""
}

需要注意的是:如果公众号未绑定“微信开放平台”这里的unionid字段将不会被返回。开发平台绑定流程简单,登陆微信开发平台,找到“公众账号”输入账号密码即可绑定
微信开发平台

2.企业微信端获取客户外部联系微信用户unionid

//需要提前获取企业微信token
//1.获取企业员工列表
String wxErpToken="xxx";
String _url1="https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_follow_user_list?access_token="+wxErpToken;
String userList=OkHttpUtil.get(_url1);
JSONArray follow_users=JSON.parseObject(userList).getJSONArray("follow_user");
//2.批量获取员工的微信客户信息
String getUserDetailBatchUrl="https://qyapi.weixin.qq.com/cgi-bin/externalcontact/batch/get_by_user?access_token="+wxErpToken;
JSONObject getUserDetailParam=new JSONObject();
getUserDetailParam.put("userid_list",follow_users);
getUserDetailParam.put("cursor","");
getUserDetailParam.put("limit",50);
String userDetailResult= OkHttpUtil.post(getUserDetailBatchUrl,getUserDetailParam.toJSONString());
System.out.println("批量客户详情:"+userDetailResult);

结果

{
    "errcode":0,
    "errmsg":"ok",
    "external_contact_list":[
        {
            "follow_info":{
                "userid":"xxxxx",
                "remark":"柚子",
                "description":"",
                "createtime":166100000,
                "tag_id":[

                ],
                "remark_mobiles":[

                ],
                "add_way":6,
                "oper_userid":"xxxxx"
            },
            "external_contact":{
                "external_userid":"wm0x1VIgAAmFkEaXhvMXpUsI*****xQ",
                "name":"柚子",
                "type":1,
                "avatar":"http://wx.qlogo.cn/mmhead/Q3auHgzwzM6fg7gUFa3H1TUGUz0DsZiaFFiaHGuibh9SssGyCR6pbEerg/0",
                "gender":1,
                "unionid":"oIelzww0v9DVWEisgdq*****VWg"
            }
        }
    ],
    "next_cursor":""
}

需要注意的点:外部联系人在微信开放平台的唯一身份标识(微信unionid),通过此字段企业可将外部联系人与公众号/小程序用户关联起来。仅当联系人类型是微信用户,且企业绑定了微信开发者ID有此字段,查看绑定方法

至此通过公众号获取到的unionid即可和启用微信中外部微信客户的unionid绑定在一起,再实现其他的业务操作!