Maison  >  Article  >  développement back-end  >  Exemple détaillé de la façon d'utiliser PHP pour se connecter automatiquement à WeChat et obtenir des surnoms

Exemple détaillé de la façon d'utiliser PHP pour se connecter automatiquement à WeChat et obtenir des surnoms

墨辰丷
墨辰丷original
2018-06-01 10:28:532389parcourir

Cet article présente principalement la méthode de connexion automatique et d'obtention d'un pseudo dans la version PHP de WeChat. Il implique les compétences opérationnelles pertinentes de PHP pour appeler l'interface de la plateforme publique WeChat. Les amis dans le besoin peuvent se référer à

<.>WeChat se connecte automatiquement et obtient un surnom. Les surnoms peuvent être obtenus via l'interface API et sont également implémentés via l'interface ouverte de WeChat. Regardons ensemble un exemple


Enregistrement uniquement : WeChat obtient le surnom. et se connecte automatiquement

Après Après plusieurs vérifications répétées, j'ai constaté que ma méthode était défectueuse :

Si vous ne me suivez pas sur WeChat et entrez sur le site Web, vous ne pouvez pas obtenir un surnom.

Après m'avoir suivi, vous pouvez utiliser ma méthode pour obtenir des surnoms.

Est-ce parce que l'openid est généré pour la première fois donc le pseudo n'a pas encore été généré ? A tester.

/**
* 获取当前页面完整URL地址
*/
function get_url() {
$sys_protocal = isset($_SERVER[&#39;SERVER_PORT&#39;]) && $_SERVER[&#39;SERVER_PORT&#39;] == &#39;443&#39; ? &#39;https://&#39; : &#39;http://&#39;;
$php_self = $_SERVER[&#39;PHP_SELF&#39;] ? $_SERVER[&#39;PHP_SELF&#39;] : $_SERVER[&#39;SCRIPT_NAME&#39;];
$path_info = isset($_SERVER[&#39;PATH_INFO&#39;]) ? $_SERVER[&#39;PATH_INFO&#39;] : &#39;&#39;;
$relate_url = isset($_SERVER[&#39;REQUEST_URI&#39;]) ? $_SERVER[&#39;REQUEST_URI&#39;] : $php_self.(isset($_SERVER[&#39;QUERY_STRING&#39;]) ? &#39;?&#39;.$_SERVER[&#39;QUERY_STRING&#39;] : $path_info);
return $sys_protocal.(isset($_SERVER[&#39;HTTP_HOST&#39;]) ? $_SERVER[&#39;HTTP_HOST&#39;] : &#39;&#39;).$relate_url;
}
$wxch_config = $db -> getRow("SELECT * FROM `ecs_weixin_config` WHERE `id` = 1");
$appid = $wxch_config[&#39;appid&#39;];
$appsecret = $wxch_config[&#39;appsecret&#39;];
$APPID = $appid;
$SCRETID =$appsecret;
if(!$_SESSION[&#39;user_id&#39;] && strpos($_SERVER[&#39;HTTP_USER_AGENT&#39;], &#39;MicroMessenger&#39;) !== false){
if (!isset($_GET[&#39;code&#39;]))
{
$backurl = get_url();
//$url = $jsApi->createOauthUrlForCode($backurl);
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$APPID."&redirect_uri=".urlencode($backurl)."&response_type=code&scope=snsapi_base&state=123#wechat_redirect";
//echo $url;
Header("Location: $url");
}else
{
//获取code码,以获取openid
$code = $_GET[&#39;code&#39;];
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$APPID."&secret=".$SCRETID."&code=".$code."&grant_type=authorization_code";
$re = curl_get_contents1($url);
$rearr = json_decode($re,true);
$openid = $rearr[&#39;openid&#39;];
//var_dump($rearr);
//$jsApi->setCode($code);
//$openid = $jsApi->getOpenid();
$user_name = $db->getOne("select uname from ecs_weixin_user where wxid = &#39;{$openid}&#39;");
if($openid && !$user_name){ //注册进入
$passw = md5(&#39;shanmao.me&#39;.rand(1,18650144002));
$wxch_user_sql = "INSERT INTO `ecs_weixin_user` (`wxid`,`setp`) VALUES (&#39;$openid&#39;,&#39;3&#39;)";
$db -> query($wxch_user_sql);
$ecs_user_id = $db -> insert_id();
if($ecs_user_id<=0){
exit(&#39;error get insert_id&#39;);
}
$url3 = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$APPID."&secret=".$SCRETID;
$re3 = curl_get_contents1($url3);
$re3arr = json_decode($re3,true);
$token = $re3arr[&#39;access_token&#39;];
$url2 = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$token."&openid=".$openid."&lang=zh_CN";
$re2 = curl_get_contents1($url2);
$rearr2 = json_decode($re2,true);
$uc_username = $rearr2[&#39;nickname&#39;]?$rearr2[&#39;nickname&#39;]: &#39;doubag&#39; . $ecs_user_id;
$time = gmtime();
$user_sql = "INSERT INTO `ecs_users` (`user_name`,`password`,`reg_time`) VALUES (&#39;$uc_username&#39;,&#39;$passw&#39;,&#39;$time&#39;)";
$db -> query($user_sql);
$uc_update = "UPDATE ecs_weixin_user SET `uname` = &#39;$uc_username&#39; WHERE `uid` = &#39;$ecs_user_id&#39;";
$db -> query($uc_update);
$user->set_session($uc_username);
$user->set_cookie($uc_username,1);
update_user_info();
/*
$up_uid = get_affiliate();
if($up_uid>0){
$sql = &#39;UPDATE ecs_users SET parent_id = &#39; . $up_uid . &#39; WHERE user_id = &#39; . $ecs_user_id;
$db ->query($sql);
header(&#39;Location: user.php?newuser=1&#39;);
}*/
}else{
$user->set_session($user_name);
$user->set_cookie($user_name,1);
update_user_info();
}
//setcookie("sopenid",$openid,time()+864000,&#39;/&#39;);
}
}
//var_dump($openid);
function curl_get_contents1($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 2);
curl_setopt($ch, CURLOPT_USERAGENT, "IE 6.0");
curl_setopt($ch, CURLOPT_REFERER, "");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$r = curl_exec($ch);
curl_close($ch);
return $r;
}

Résumé : Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile pour l'étude de tout le monde.

Recommandations associées :

5 façons d'implémenter des répertoires récursifs en PHP

phpfonction mkdir Méthode pour implémenter la création récursive de répertoires hiérarchiques

Solution aux opérations à virgule flottante inexactes sous PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn