php 公众号迁移,openid转换

tech2023-07-21  105

根据公司的需求,把旧的公众号的用户数据迁移到新的公众号上,这时就会发现,老的数据怎么办,特别是用户的openid匹配不上,腾讯提供了相对应的接口文档。

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

将原帐号粉丝的openid转换为新帐号的openid。将有授权关系用户的openid转换为新帐号的openid。将卡券关联用户的openid转换为新帐号的openid。

◆ 原帐号:准备要迁移的帐号,当审核完成且管理员确认后即被回收。 ◆ 新帐号:用来接纳粉丝的帐号。新帐号在整个流程中均能正常使用。

一定要按照下面的步骤来操作。

一定要在原帐号被冻结之前,最好是准备提交审核前,获取原帐号的用户列表。如果没有原帐号的用户列表,用不了转换工具。如果原账号被回收,这时候也没办法调用接口获取用户列表。 如何获取用户列表见这里: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']; }

 

最新回复(0)