欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微信公众号开发的一点自我小结,怕自己过后忘了,总结于此。

程序员文章站 2022-05-11 17:33:06
问:大侠,请教一下,如果那个公众号的自定义菜单已经授权给了第三方,如何处理授权获取code呢? 答:同一个公众号只能有一个控制后台,公众号后台:开发->基本配置->服务器配置->服务器地址,这里只能填一个地址! 公众号自定义菜单有两种方式,一种是直接在后台左边,根据微信提供的界面,自己编辑,适合做一 ......

问:大侠,请教一下,如果那个公众号的自定义菜单已经授权给了第三方,如何处理授权获取code呢?

 

答:同一个公众号只能有一个控制后台,公众号后台:开发->基本配置->服务器配置->服务器地址,这里只能填一个地址!

公众号自定义菜单有两种方式,一种是直接在后台左边,根据微信提供的界面,自己编辑,适合做一些静态连接和展示,,另外一种就是通过后台程序来动态生成,动态生成肯定是在前面的服务器配置那里的后台程序来接管的,如果这里已经有一个第三方的地址了,除非修改他们的代码,让他们的代码里的菜单跳转地址,转到我们的后台程序里。

 

如何从公众号自定义菜单携带公众号访问者的信息(openid)进入自己的后台(这个就是OAuth认证),通过oauth_token换取access_token,这是微信开发的第二个难点,,第一个难点是如何让公众号跟我们自己的后台连接上,,第三个难点是微信的9大接口,需要用到jssdk开发,一般的公众号后台开发只需要PHP就可以了,但是jssdk就还需要学习js的用法。

 

扯远了,还是继续说OAuth认证拿code的问题,假设自定义菜单上的跳转链接是https://www.abc.com/wx/index.php,

 

这个index.php的内容如下:

<?php

    include_once("wx_appidpwd.php");
    
    //把配置路径写入 wx_appidpwd.php文件里,这里就引用一下,便于统一修改部署
    header('location:https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$myappurl.'oauth.php&response_type=code&scope=snsapi_userinfo&state=1&connect_redirect=1#wechat_redirect');
    
?>

 

$myappurl里是再次跳转的路径, 比如$myappurl  ='https://yoooko.s1.natapp.cc/wx/';  拼接在一起就是 redirect_uri=https://yoooko.si1.natapp.cc/wx/oauth.php

 

oauth.php的内容如下:

<?php
    $code = $_GET['code'];
    $state = $_GET['state'];

    //$appid 都定义在 $appsecret 在wx_appidpwd.php文件里
    include_once("wx_appidpwd.php");
    
    if (empty($code)) $this->error('授权失败');

    //获取oauth_token
    $token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code';
    $token = json_decode(file_get_contents($token_url));
    if (isset($token->errcode)) {
        echo '<h1>错误:</h1>'.$token->errcode;
        echo '<br/><h2>错误信息:</h2>'.$token->errmsg;
        exit;
    }

    //通过oauth_token再获取access_token,注意:此access_token与基础的access_token不一样,所以此次必须再次获得,而不能从缓存里获取
    $access_token_url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid='.$appid.'&grant_type=refresh_token&refresh_token='.$token->refresh_token;
    //转成对象
    $access_token = json_decode(file_get_contents($access_token_url));
    if (isset($access_token->errcode)) {
        echo '<h1>错误:</h1>'.$access_token->errcode;
        echo '<br/><h2>错误信息:</h2>'.$access_token->errmsg;
        exit;
    }

    //通过access_token再获取userinfo
    $user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token->access_token.'&openid='.$access_token->openid.'&lang=zh_CN';
    //转成对象
    $user_info = json_decode(file_get_contents($user_info_url));
    if (isset($user_info->errcode)) {
        echo '<h1>错误:</h1>'.$user_info->errcode;
        echo '<br/><h2>错误信息:</h2>'.$user_info->errmsg;
        exit;
    }

    $user_openid = $user_info->openid;
    //ok echo $openid;
    
    //打印用户信息
    /*
    echo '<pre>';
    print_r($user_info);
    echo '</pre>';
    */

  //其他的业务逻辑代码,比如登陆等等。。。
?>


这样我们就拿到了公众号访问者的信息了,包括openid之类的各种信息都有了,可以去做后面的登陆之类的业务逻辑了。

 

两年前做过微信公众号的开发,后来感觉受微信限制太多,然后知道了跨平台的H5,就去入坑H5+的App开发了,到做了一年半了,js成了自己的主要工作语言,完成了两个小产品,一个进销存软件的手机版,一个进销存软件的订货平台,,跨平台的好处是,只要写一次代码,安卓和苹果都能使用,而且手机的各种功能基本上都能调用,不受微信的限制,比如需要一条通知消息,微信公众号的订阅号和服务号都不能实现,必须要企业号才行,而App开发则需要通过第三方平台发送透传消息来实现,,如果一些更深入的应用,比如要用手机来做蓝牙打印,还需要去了解点Android和iOS原生开发的知识,甚至可能要开发自己的插件。

 

等我做完手里的这两个App,再来总结下H5+开发的一些体会,是为记。