微信公众号迁移置换粉丝openid

2025-11-18 09:41:15

1、一、储存旧的

<?php

require_once './MySQLiDb.class.php';

$res = $db->getAll("SELECT openid FROM `user` WHERE openid<>''");

$newArr = [];

foreach ($res as $k=>$v) {

    $newArr[] = $v['openid'];

}

$path = "./save_old_openid.php";

$save_text = '<?php'."\n".'return $old_openids = '.var_export($newArr,true).';';

if(fopen($path,'w')){

    file_put_contents($path,$save_text);

    echo 'success';

}else{

    echo 'error';

}

2、二、储存置换出来的

<?php

define("APPID", "*********");

define("APPSECRET", "*********");

//原来的APPID

define("OLDAPPID", "**********");

require_once './save_old_openid.php';

$accessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".APPID."&secret=".APPSECRET;

$res = json_decode(file_get_contents($accessTokenUrl),true);

$accessToken = $res["access_token"];

//用来储存转换后的数据

$newArr = array();

$arr100 = array_chunk($old_openids,100);

$count = count($arr100);

for ($i=0;$i<$count;$i++){

    $requestData = array(

        //此处为原帐号的appid

        "from_appid" => OLDAPPID,

        //需要转换的openid,即第1步中拉取的原帐号用户列表,这些必须是旧账号目前关注的才行,否则会出错;一次最多100个,不能多。

        "openid_list"=>$arr100[$i]

    );

    $jsonOldOpenids = json_encode($requestData);

    $requestUrl = "http://api.weixin.qq.com/cgi-bin/changeopenid?access_token=".$accessToken;

    

    $result = json_decode(https_post($requestUrl,$jsonOldOpenids),true);

    $arr = isset($result["result_list"]) ? $result["result_list"] : array();

    foreach ($arr as $k=>$v){

        if (isset($v['err_msg']) && ($v['err_msg'] == 'ok')){

            $newArr[] = array(

                0 => $v['ori_openid'],

                1 => $v['new_openid']

            );

        }

    }

}

$path = "./save_new_openid.php";

$save_text = '<?php'."\n".'return $new_openids = '.var_export($newArr,true).';';

if(fopen($path,'w')){

    file_put_contents($path,$save_text);

    echo 'success';

}else{

    echo 'error';

}

function https_post($url, $data){

    $curl = curl_init();

    curl_setopt($curl, CURLOPT_URL, $url);

    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

    curl_setopt($curl, CURLOPT_POST, 1);

    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    $result = curl_exec($curl);

    if (curl_errno($curl)) {

        return 'Errno' . curl_error($curl);

    }

    curl_close($curl);

    return $result;

}

1、三、更新

<?php

require_once './MySQLiDb.class.php';

require_once './save_new_openid.php';

foreach ($new_openids as $k=>$v){

    $db->query("UPDATE `user` SET openid='{$v[1]}' WHERE openid='{$v[0]}'");

}

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢