根据公司的需求,把旧的公众号的用户数据迁移到新的公众号上,这时就会发现,老的数据怎么办,特别是用户的openid匹配不上,腾讯提供了相对应的接口文档。
账号迁移后,粉丝的openid会变化,微信用户关注不同的公众号,对应的openid是不一样的,迁移成功后,粉丝的openid以目标帐号(即新公众号)对应的OpenID为准。但开发者可以通过开发接口转换openid,开发文档可以参考:
提供一个openid转换的API接口,当帐号迁移后,可以通过该接口:
◆ 原帐号:准备要迁移的帐号,当审核完成且管理员确认后即被回收。
◆ 新帐号:用来接纳粉丝的帐号。新帐号在整个流程中均能正常使用。
一定要按照下面的步骤来操作。
一定要在原帐号被冻结之前,最好是准备提交审核前,获取原帐号的用户列表。如果没有原帐号的用户列表,用不了转换工具。如果原账号被回收,这时候也没办法调用接口获取用户列表。
如何获取用户列表见这里:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140840
转换openid的API接口如下,可在帐号迁移审核完成后开始调用,并最多保留15天。若帐号迁移没完成,调用时无返回结果或报错。帐号迁移15天后,该转换接口将会失效、无法拉取到数据。
◆ URL:http://api.weixin.qq.com/cgi-bin/changeopenid?access_token=xxxxx
此处token为新帐号的token
◆ 请求方式:post
下面是php代码演示:
public function http($url, $method, $postfields = null, $headers = array(), $debug = false)
{
$ci = curl_init();
/* Curl settings */
curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ci, CURLOPT_TIMEOUT, 30);
curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
switch ($method) {
case 'POST':
curl_setopt($ci, CURLOPT_POST, true);
if (!empty($postfields)) {
curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
//$this->postdata = $postfields;
}
break;
}
curl_setopt($ci, CURLOPT_URL, $url);
curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ci, CURLINFO_HEADER_OUT, true);
$response = curl_exec($ci);
$http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
if ($debug) {
echo "=====post data======\r\n";
var_dump($postfields);
echo '=====info=====' . "\r\n";
print_r(curl_getinfo($ci));
echo '=====$response=====' . "\r\n";
print_r($response);
}
curl_close($ci);
return array($http_code, $response);
}
//--用户表的转openid--最多只能查询200个openid
public function index()
{
$params = request()->param();
$curPage = isset($params['page']) ? $params['page'] : "1";
$pageSize = isset($params['size']) ? $params['size'] : "200";
$limitpage = ($curPage-1)*$pageSize;
//获取用户的openid
$sql = "select openid,user_id from yp_live_anchor_user where is_deleted=0 and openid != '' limit $limitpage,$pageSize";
$res= DB::query($sql);
$a= $this->getWxAccessToken();
$openidArray = [];
foreach ($res as $k=> $v) {
$openidArray[] = $v['openid'];
}
$url='https://api.weixin.qq.com/cgi-bin/changeopenid?access_token='.$a;
$data['from_appid']="xxxxxxxxxxxx";
$data['openid_list']= $openidArray;
// dump($data);die();
$data = json_encode($data);
$token_data = $this->http($url,"POST", $data);
$array = json_decode($token_data[1], TRUE);
//获取到新的openid和老的openid
dump($array);die();
}
/**
* 1.获取 access_token
* @param $data 接受数据|返回数据 默认为空
* @param
* @return access_token
*/
protected function getWxAccessToken(){
$appid = "xxxxx";
$AppSecret = "xxxxx";
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$AppSecret;
$dataResult=http_get($url,array());
$accessTokenRuselt = json_decode($dataResult, true);
return $accessTokenRuselt['access_token'];
}