简介
公众号主体变更迁移后,用户openid被改变了,通过这个方法来批量更新用户的openid
/**
* 处理公众号转移后的新旧openid id转换
*/
public function change_openid(){
//因为每次最多只能从微信接口换取100个openid,当用户量多的时候,通过自动刷新当前页面的方式来节省时间
echo ('');
//这个是取出没有更新过的openid用户的列表
$residentsModel= new ResidentsModel();
$list=$residentsModel
->field('id,name,nick_name,openid')
->where('openid','>',0)
->where('is_change_openid','=',0)
->page(1,100)
->order('id','asc')->select();
dump(count($list));
//如果有需要更新的数据,则进行转换
if(count($list)>0){
dump($list[0]['id']);
//使用easywechat组件
$app = Factory::officialAccount($this->config);
$accessToken = $app->access_token; // EasyWeChat\Core\AccessToken 实例
$token = $accessToken->getToken(); // token 字符串
// $token = $accessToken->getToken(true); // 强制重新从微信服务器获取 token.
//通过easywechat拿到access_token 当然这个自己手动用官方接口去取也可以
$access_token=$token['access_token'];
// dump($access_token);
这个是openid接口转换的地址
$url='http://api.weixin.qq.com/cgi-bin/changeopenid?access_token='.$access_token;
$openid_list=[];
通过循环的方式来把需要转换的openid放到索引数组中
foreach($list as $val){
array_push($openid_list,$val['openid']);
}
//转换接口请求的数据格式
$data=[
'from_appid'=>'wx0cf328c9fce4f555',//旧公众号的appid
'openid_list'=>$openid_list
];
$res=http_request($url,json_encode($data));
$res=json_decode($res,true);
//如果请求成功,则进行数据库的更新
if(isset($res['errcode']) && $res['errcode']==0){
$result_list=$res['result_list'];
foreach($result_list as $val){
$data=[
'openid'=>$val['new_openid'],
'is_change_openid'=>1
];
$residentsModel->where('openid','=',$val['ori_openid'])->data($data)->update();
}
}
}
}
https://kf.qq.com/faq/1901177NrqMr190117nqYJze.html
这个是微信的官方文档说明。我在开发者文档中没有找到,在qq客服中找到了这个。
内容直接摘录过来留存了
账号迁移后,粉丝的openid会变化,微信用户关注不同的公众号,对应的openid是不一样的,迁移成功后,粉丝的openid以目标帐号(即新公众号)对应的OpenID为准。但开发者可以通过开发接口转换openid,开发文档可以参考:
提供一个openid转换的API接口,当帐号迁移后,可以通过该接口:
◆ 原帐号:准备要迁移的帐号,当审核完成且管理员确认后即被回收。
◆ 新帐号:用来接纳粉丝的帐号。新帐号在整个流程中均能正常使用。
一定要按照下面的步骤来操作。
2. 转换openid的API接口如下,可在帐号迁移审核完成后开始调用,并最多保留15天。若帐号迁移没完成,调用时无返回结果或报错。帐号迁移15天后,该转换接口将会失效、无法拉取到数据。 ◆ URL:http://api.weixin.qq.com/cgi-bin/changeopenid?access_token=xxxxx 此处token为新帐号的token ◆ 请求方式:post ◆ 请求数据:
{
"from_appid":"xxxxxxxx",//此处为原帐号的appid
"openid_list":["oEmYbwN-n24jxvk4Sox81qedINkQ","oEmYbwH9uVd4RKJk7ZZg6SzL6tTo"]
//需要转换的openid,即第1步中拉取的原帐号用户列表,这些必须是旧账号目前关注的才行,否则会出错;一次最多100个,不能多。
}
◆ 输出数据:
{
"errcode": 0,
"errmsg": "ok",
"result_list": [
{
"ori_openid": "oEmYbwN-n24jxvk4Sox81qedINkQ",
"new_openid": "o2FwqwI9xCsVadFah_HtpPfaR-X4",
"err_msg": "ok"
},
{
"ori_openid": "oEmYbwH9uVd4RKJk7ZZg6SzL6tTo",
"err_msg": "ori_openid error"//这个openid目前没有关注旧公众号
}
]
}
◆ 错误码: 63178:from_appid参数错误,和调用的账号并没有迁移关系 Ori_openid error:openid目前没有关注旧公众号。或者是将from_appid搞错了,用成了新帐号的appid。
CRMEB v4 全开源电商系统,开发者首选,系统基于ThinkPhp6.0+uniapp 开发的客户管理加电商营销的新零售商城系统。能够真正帮助企业基于微信公众号H5、小程序、wap、pc、APP等,实现会员管理、数据分析,精准营销的电子商务管理系统。可满足企业新零售、批发、分销、预约、O2O、多店等各种业务需求。CRMEB的优势:快速积累客户、会员数据分析、智能转化客户、有效提高销售、会员维护;
如果觉得博客文章对您有帮助,异或土豪有钱任性,可以通过以下扫码向我捐助。也可以动动手指,帮我分享和传播。您的肯定,是我不懈努力的动力!感谢各位亲~