公众号迁移 原有数据库openid 更新主体openid
今天一个两年前做的公众号项目 要更改主体,随之而来的是公众号的迁移。 公众号迁移后关注的粉丝也会对应的进行迁移,还会给粉丝发送相关通知。
大体流程如下图
迁移的具体步骤我就不细说了。今天主要说的是 迁移主体后 对应的用户openid也会变化,也就是说你的程序如果公众号登录是以微信openid为唯一标识的话,
那你的用户系统经过一次公众号变更后就会出现问题。 老用户再次授权后 系统可能认为是新用户,而且通过原来的openid 也无法推送模板消息等功能。
微信方面当然也考虑到了相关问题 。给出了相关的接口去处理这个问题,这就是今天说的openid转换接口 。
相关内容如下
openid转换接口
1. 将原帐号粉丝的openid转换为新帐号的openid。
2. 将有授权关系用户的openid转换为新帐号的openid。
3. 将卡券关联用户的openid转换为新帐号的openid。
◆ 原帐号:准备要迁移的帐号,当审核完成且管理员确认后即被回收。
◆ 新帐号:用来接纳粉丝的帐号。新帐号在整个流程中均能正常使用。
一定要按照下面的步骤来操作。
1. 一定要在原帐号被冻结之前,最好是准备提交审核前,获取原帐号的用户列表。如果没有原帐号的用户列表,用不了转换工具。如果原账号被回收,这时候也没办法调用接口获取用户列表。
如何获取用户列表见这里:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140840
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","oEmYbwH9uVd4RKJk7ZZg6S
zL6tTo"]//需要转换的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。
public function getOpenId(){
$rows='100';
$page=input('id');
$info=\db('users')->paginate($rows,'',['page'=>$page]);
$data= $info->items();
$open_id=array_column($data,'openid');
// dump($open_id); $postData['from_appid']='******'; //老的APPID
$postData['openid_list']=$open_id;
$config=[
'app_id' => '*******', // 新的AppID
'secret' => '***********',
];
$Wechat=new Application($config);//这里用是Easywechat
$Token=$Wechat->access_token;
$token=$Token->getToken();
$url='https://api.weixin.qq.com/cgi-bin/changeopenid?access_token='.$token;
//$result= $this->curlPost($url,json_encode($postData,true),'','','json');
$result= $this->post_by_curl($url,json_encode($postData,true)); //自己找一个curl方法
$return=json_decode($result,true);
$result=$return['result_list']; foreach ($result as $k=>$v){
if ($v['err_msg']=='ok'){
$update['openid']=$v['new_openid'];
$update['is_update']=1;
\db('users')->where('openid',$v['ori_openid'])->update($update);
}
}
}
需要注意的是 这个接口一次只能获取100条数据 , 话句话说 你只能一次一百条一百条的更新
当然 你可以选择用消息队列进行处理这个数据 但是我选择的是比较简单的方法 : 前台页面定时器请求
下面附上html代码
<!DOCTYPE html>
<html lang="en">
<script src="/static/js/jquery.js"></script>
<head>
<meta charset="UTF-8">
<title>Title</title>
<div id="test">1</div>
</head>
<body>
<script>
var i=1;
function test(){
var url='http://百度/portal/test/getOpenId/id/'+i
$.ajax({
url:url,
type:'GET',
success:function (res) {
$('#test').html(i)
}
})
i++;
}
window.setInterval(test,5000);
</script>
</body>
</html>
不过这个时间会比较长
我写完博客才更改了4万条 你可以看一下你服务器的响应执行速度 适当的调整这个参数
公众号迁移 原有数据库openid 更新主体openid的更多相关文章
- 用户关注微信公众号后,获取该用户的openID存数据库失败
关注微信公众号后将关注人的openID存入数据库失败,而openID换成字符串写死却可以存入数据库: $wxid=$postObj->FromUserName; $data['wx_openid ...
- Java 微信公众号迁移
背景:公众号换主体,要迁移,粉丝(openId)的业务数据要做处理. 第一步:参照我的另一篇文章,Java 导出微信公众号粉丝. 第二部:数据处理(master-worker模式) 程序主入口:Mai ...
- [特别公告]RDIFramework.NET微信公众号迁移通知
亲爱的伙伴们: 非常感谢您们一直以来对RDIFramework.NET开发框架的关注和支持! 为了进一步完善各项功能,能给大家提供更专业.更官方准确的框架资讯,提供更优质的框架合作服务,我们的微信公众 ...
- 微信公众号授权回调用户信息,获取openid
1.--------------------用户授权登录并获取code 授权登录方式有两个,一种为静默授权登录(scope=snsapi_base),一种为非静默授权登录(scope=snsapi_u ...
- JAVA微信公众号网页开发——通过接收人的openid发送模板消息
TemplateData.java 1 package com.weixin.weixin.template; 2 3 public class TemplateData { 4 private St ...
- 微信公众号开发之获取微信用户的openID
(注:openID同一用户同一应用唯一,UnionID同一用户不同应用唯一.不同应用指微信开放平台下的不同用户.) 1. 申请测试号(获得appID.appsecret) 2. 填写服务器配置并验 ...
- python - django 执行数据库迁移后数据库并未更新 和 InternalError: (1054, u"Unknown column 'xxx' in 'field list'")问题
一.发生情况:当你修改数据库结构后进行 python manage.py makemigrations 和 python manage.py migrate 后发现控制台会给你返回一个下面的结果,但是 ...
- 【微信公众号】将微信公众号消息里的FromUserName即OpenID转成UnionID
最近在调试微信公众号开发者模式,处理公众号消息,收到如下回调消息内容 <xml><ToUserName><![CDATA[gh_29********21]]>< ...
- 微信公众号开发之根据OpenID列表群发(十四)
上一篇我们讲述了<微信公众号开发之根据标签进行群发(十二)>,这次我们讲解一下[根据OpenID列表群发] 根据OpenID列表群发[订阅号不可用,服务号认证后可用] 接口调用请求说明 h ...
随机推荐
- LeetCode 77,组合挑战,你能想出不用递归的解法吗?
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第46篇文章,我们一起来LeetCode中的77题,Combinations(组合). 这个题目可以说是很精辟了,仅仅 ...
- 03.DRF-设计方法
RESTful设计方法 1. 域名 应该尽量将API部署在专用域名之下. https://api.example.com 如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下. https:/ ...
- 使用ssh连接数据库时出现Permission denied, please try again.解决方案
安装ssh(如果已经安装则会覆盖)sudo apt-get install openssh-server找到/etc/ssh/sshd_config这个文件 将permitrootlogin的值设置为 ...
- cb15a_c++_vector容器的自增长_每次增加百分之50
cb15a_c++_vector容器的自增长_每次增加百分之50每次自动容量代销扩充,增加百分之50_for windows C++,vector是用数组做出来的->数组的缺点和优点优点:具有下 ...
- 4a-c++ primer宽字符wchar_t显示设置与输出代码示例
.. #include <iostream> #include <windows.h> #include <locale> //#include<wchar. ...
- Swagger之外的选择
今天给大家安利一款接口文档生成器--JApiDocs. swagger想必大家都用过吧,非常方便,功能也十分强大.如果要说swaager有什么缺点,想必就是注解写起来比较麻烦.如果我说有一款不用写注解 ...
- 【Xamarin.Forms 1】App的创建与运行
引言 本篇文章将从介绍Xamarin.Forms创建开始. 开发环境 Visual Studio 2019 16.6.2 Xamarin.Forms 4.6.0.726 Android 5.0 (AP ...
- JavaScript基础有关构造函数、new关键字和this关键字(009)
1. 总是记得用new关键字来执行构造函数.前面提到,可以用构造函数创建JavaScript的对象,这个构造函数在使用的时候需要使用new关键字,但如果忘记写入new关键字,会怎么样?事实上这个函数还 ...
- Redis系列(九):数据结构Hash源码解析和HSET、HGET命令
2.源码解析 1.相关命令如下: {"hset",hsetCommand,,"wmF",,NULL,,,,,}, {"hsetnx",hse ...
- Python进阶之浅谈内置方法
目录 有序or无序和可变or不可变 数字类型内置方法 整形 浮点型 字符串类型内置方法 有序or无序和可变or不可变 有序:有索引 无序:无索引 可变:变量值变,id不变 不可变:变量值变,id也变 ...