当前位置: 首页 > 工具软件 > Openid4j > 使用案例 >

php 公众号迁移,openid转换

施弘壮
2023-12-01

根据公司的需求,把旧的公众号的用户数据迁移到新的公众号上,这时就会发现,老的数据怎么办,特别是用户的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
    下面是php代码演示:

  3.     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'];
        }

     

 类似资料: