微信公眾號遷移保持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條
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM