微信公众号开发完整教程(四) PHP7.0版本,TP5.0框架

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhanghuiqi205/article/details/79968905

因为工作的需要,这一两年对微信公众号和小程序,项目制作的比较多。所以我才打算写一篇全面的制作教程,当然了,最好的教程是微信工作平台的文档。我这里只是讲述一下我的工作中的制作流程。所有相关文章的源码,我托管在我自己的github上面,欢迎关注:地址点击打开链接。接下来开始我们的教程。这一节我们讲述网页授权的制作:我们这次使用的是微信公众号测试号来完成这个功能。

1.网页授权:

微信文档:


设置回调域:



1.1:关于网页授权的两种方式:

Snsapi_base方式只能获取用户的openID 属于静默授权用户无感知

Snsapi_userinfo方式能获取用户的基本信息,但是需要用户手动授权

1.2:关于access_token说明:


在整个网页授权中使用到的access_token只能在网页授权的流程中使用。对于其他的接口使用的access_token需要使用基础接口中获取到的值。

1.3整个网页授权流程:

1 第一步:用户同意授权,获取code(需要引导用户打开授权界面)

2 第二步:通过code换取网页授权access_token(用户同意授权微信会请求设置的回调地址)

3 第三步:刷新access_token(如果需要)

4 第四步:拉取用户信息(scopesnsapi_userinfo)

2.代码实现:

2.1修改自定义菜单:

跳转地址的函数如下:


2.2第一步实现引导跳转

代码如下:
// 引导跳转的方式
public function auth($action_name, $controller_name)
{
// var_dump($action_name, $controller_name);
$bak = urlencode( "http://www.xiaoziheng.club/home/" .$controller_name . "/" .$action_name);
$redirecr_uri = urlencode( 'http://www.xiaoziheng.club/home/demo/getcode?bak=' .$bak);
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $this ->appid . "&redirect_uri="
.$redirecr_uri . "&response_type=code&scope=snsapi_userinfo&state=" . time() . "#wechat_redirect";
header( 'Location:' .$url);
}
其中的两个参数分别是:跳转地址的控制器和方法:
public function __construct( Request $request)
{
parent :: __construct();
$this ->accessToken = get_access_token();
//获得方法
$action_name =$request -> action();
//获得控制器
$controller_name = $request -> controller();
if( ! cookie( 'user')){
if($action_name != 'getcode'){
$this -> auth($action_name, $controller_name);
}
}
}

在引导方法中,我们会获取到getcode的值:函数如下:其中包含有第二步,第三步,第四步的实现方法:

public function getcode( Request $request)
{
$code = $_GET[ 'code'];
if( !$code){
echo '微信服务器故障';
exit;
}
// 第二步:通过code换取网页授权中的access_token
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $this ->appid . "&secret=" . $this ->appsecret
. "&code=" . $code . "&grant_type=authorization_code" ;
$result = file_get_contents($url);
$result = json_decode($result, true);
if( !$result){
echo '微信服务器故障';
exit;
}
// 第三步:获取用户的基本信息,此操作仅限scope为snspai_userinfo
$url = "https://api.weixin.qq.com/sns/userinfo?access_token=" .$result[ 'access_token'] . "&openid="
.$result[ 'openid'] . "&lang=zh_CN";
$result = file_get_contents($url);
$result = json_decode($result, true);
$userInfo = db( 'user') -> where( "openid", "=",$result[ 'openid']) -> find();
if( !$userInfo){
echo '操作数据可以';
$data = [
'nickname' =>$result[ 'nickname'] ,
'openid' =>$result[ 'openid'],
'headimgurl' =>$result[ 'headimgurl']
];
db( 'user') -> insert($data);
$userInfo = $result;
}
// 第四步骤:跳转回跳转地址
$bak = $_GET[ 'bak'];
cookie( 'user',$userInfo);
header( 'Location:' .$bak);
}

在实现的过程中,我们会对请求到的用户信息进行存储数据库的操作,当再次进来的时候,会进行判断,是否在数据库中有值:

我是在阿里云上建立好的服务器,获取的数据如下:


网页授权的结果如图:



注意点和关键点:


这就是为什么我上面的测试结果不显示确认提示框的原因,还有就是需要对接口中的各个参数有好的了解。各个参数的含义,以及微信的OAuth2.0协议的理解:这里有一篇不错的关于此协议的文章:点击打开链接

其实大家只要认真阅读微信的文档,开发的时候细致认真,基本都可以开发好微信公众号,下一节我们再来讲述关于资源文件的上传的知识点......

猜你喜欢

转载自blog.csdn.net/zhanghuiqi205/article/details/79968905
今日推荐