• 微信公众号迁移保持OPENID不变新老账户粉丝迁移问题


    一、迁移注意事项
     I、账号迁移申请提交后原账号用户信息无法再通过接口获取

     II、申请提交后,opneid装换接口最多保留15天,超过15天接口失效,无法继续装换openid

    III、装换的openid不应都能装换完成,只有关注旧公众号的用户继续关注新公众号,openid才能完成装换,否则无法得到装换的新openid

    二、迁移步骤
    I、获取旧公众号用户信息
    1、通过微信api获取,点击查看官方文档

       附官网说明:

    公众号可通过本接口来获取帐号的关注者列表,关注者列表由一串OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的)组成。一次拉取调用最多拉取10000个关注者的OpenID,可以通过多次拉取的方式来满足需求。

    接口调用请求说明

    1. http请求方式: GET(请使用https协议)

    2. https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID

    参数是否必须说明
    access_token调用接口凭证
    next_openid第一个拉取的OPENID,不填默认从头开始拉取

    返回说明

    正确时返回JSON数据包:

    {
        "total": 32167, 
        "count": 10000, 
        "data": {
            "openid": [
                "o0qN8ju3cjtBk4dREltjRvD1vZDI", 
                "o0qN8jjdSmx-xyeYwA5Z6deNUP8Q", 
                "o0qN8jrMbj-MwXVCI-QGo_4ki4rM"
            ]
        }, 
        "next_openid": "o0qN8jrMbj-MwXVCI-QGo_4ki4rM"
    }
    参数说明
    total关注该公众账号的总用户数
    count拉取的OPENID个数,最大值为10000
    data列表数据,OPENID的列表
    next_openid拉取列表的最后一个用户的OPENID

    错误时返回JSON数据包(示例为无效AppID错误):

    {"errcode":40013,"errmsg":"invalid appid"}

    附:关注者数量超过10000时

    当公众号关注者数量超过10000时,可通过填写next_openid的值,从而多次拉取列表的方式来满足需求。

    具体而言,就是在调用接口时,将上一次调用得到的返回中的next_openid值,作为下一次调用中的next_openid值。

    示例如下:
     

    protected void Button12_Click(object sender, EventArgs e)
    {
    	string nextOpenid = "";
    	string strwhere = "";
    	StringBuilder sbALLopenid = new StringBuilder();
    	string tocken = GetWeiXinAccessToken(appid, appsecret);
    	//提前已知公众号有3万多粉丝,一次读1万,所以循环4次
    	for (int i = 0; i < 4; i++)
    	{
    		if (i>0)
    		{
    			strwhere = "&next_openid="+ nextOpenid;
    		}
    		string url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + tocken + ""+ strwhere;//
    		string msgVal = HttpGet(url);
    		//Dictionary<string, object> resultJSON = JsonHelper.DataRowFromJSON(msgVal);
    		//if (resultJSON != null && resultJSON["next_openid"] != null)
    		//{
    		//    sbALLopenid.Append(resultJSON["count"].ToString());
    		//    nextOpenid = resultJSON["next_openid"].ToString();
    		//}
    		var obj = JsonConvert.DeserializeObject(msgVal);
    		//Console.WriteLine(obj.GetType()); //Newtonsoft.Json.Linq.JObject
    		foreach (var x in obj as JObject)
    		{
    			Console.WriteLine("{0} {1}", x.Key, x.Value);
    			if (x.Key== "data")
    			{
    				Dictionary<string, object> resultJSON = JsonHelper.DataRowFromJSON(x.Value.ToString());
    				if (resultJSON != null && resultJSON["openid"] != null)
    				{
    					ArrayList arrOpenID = (ArrayList)resultJSON["openid"];
    					foreach (string openid in arrOpenID)
    					{
    						sbALLopenid.Append(" INSERT INTO dbo.tablename (cont) VALUES ('"+ openid + "'); ");
    					}
    					//string stropenid = resultJSON["openid"].ToString();
    					string str02 = "";
    				}
    			}
    			if (x.Key == "next_openid")
    			{
    				nextOpenid = x.Value.ToString();
    			}
    		}
    	}
    
    	int iresult01 = SqlHelper.ExecuteNonQuery(sbALLopenid.ToString(), CommandType.Text);
    	string str01 = "";
    }
    
    //HTTP GET方式请求数据.
    public static string HttpGet(string url)
    {
    	HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
    	request.Method = "GET";
    	//request.ContentType = "application/x-www-form-urlencoded";
    	request.Accept = "*/*";
    	request.Timeout = 5000;
    	request.AllowAutoRedirect = false;
    
    	WebResponse response = null;
    	string responseStr = null;
    
    	try
    	{
    		response = request.GetResponse();
    
    		if (response != null)
    		{
    			StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
    			responseStr = reader.ReadToEnd();
    			reader.Close();
    		}
    	}
    	catch (Exception)
    	{
    		throw;
    	}
    	finally
    	{
    		request = null;
    		response = null;
    	}
    
    	return responseStr;
    }
    
    

    ps:将openid批量存入数据库或者写入文件即可

    2、通过网页工具在线获取用户信息

     填写完毕后点击检查问题就会返回用户列表信息

    II、提交迁移申请
    提交迁移公众号申请,如何迁移请查看微信官方文档

    III、转换新公众号用户openid
    1、接口说明,见文档

    附说明:

    openid转换接口
    账号迁移后,粉丝的openid会变化,微信用户关注不同的公众号,对应的openid是不一样的,迁移成功后,粉丝的openid以目标帐号(即新公众号)对应的OpenID为准。但开发者可以通过开发接口转换openid,开发文档可以参考:

    提供一个openid转换的API接口,当帐号迁移后,可以通过该接口:
    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","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。

    ps:转换openid限制比较多,一次最多处理100条
     

  • 相关阅读:
    PL/SQL 记录集合IS TABLE OF的使用
    PL/SQL 触发器简介
    plsql 显式游标
    MySQL的基本知识 -- 命令
    排序算法--桶排序
    在C++中实现字符串分割--split
    第一篇献给小驰驰
    解决windows管理员已阻止你运行此应用问题
    centos 7.3 快速安装ceph
    python中int的功能简单介绍
  • 原文地址:https://www.cnblogs.com/wybshyy/p/16042523.html
Copyright © 2020-2023  润新知