thinkphp5 + 微信网页授权
一、基础准备
①:微信公众平台测试账号的申请(无正式号,建议使用) https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
②:申请后,会得到相应的appid和appsecret; 然后扫测试号二维码。
初次学习,请多指教 初次学习,请多指教③:找到网页授权功能,点击修改,填写网页授权的网址
初次学习,请多指教
https://mypay.test.com 这个地址填入其中(以实际为准)
二、源码
①: 通过 snsapi_base 方法
public function getBaseInfo()
{
//获取code
$appid = "wxbe96b525328a2e52";
$redirect_uri = urlencode("https://mypay.test.com/getWxCode");//回调地址 getWxCode 是一个方法 (提示:如果想直接访问https://mypay.test.com/getWxCode,需要配置路由【可参考https://www.jianshu.com/p/bd4a58138b63】 )
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_base&state=123#wechat_redirect"; //state 可任意
$this->redirect($url,302); // tp5的重定向方法
}
tp5的重定向,use think\Controller;public function getWxCode()
{
//获取access_token
//获取openID
$appid = "wxbe96b525328a2e52";
$appsecrt = "d773b696a5120145c46372c658dbcb63";
$code = $_GET['code'];
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecrt&code=$code&grant_type=authorization_code";
$r = http_curl($url); //http_curl 是写在common.php里面的一个方法,本文末将附上源码
$openid = $r['openid'];
$access_token = $r['access_token'];
var_dump('access_token是:' . $access_token . '=========' . 'openid是:' . $openid);
/*以下内容自己发挥,比如网页展示页面这些什么的*/
}
②: 通过 snsapi_userinfo 方法 ,可获得用户详细信息
public function getCodeUserInfo()
{
//获取code
$appid = "wxbe96b525328a2e52";
$redirect_uri = urlencode("https://mypay.test.com/getWxUserInfo");//回调地址
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $appid . "&redirect_uri=" . $redirect_uri . "&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect";
$this->redirect($url,302);
}
public function getWxUserInfo()
{
//换取网页授权access_token
//获取openid
$appid = "wxbe96b525328a2e52";
$appsecrt = "d773b696a5120145c46372c658dbcb63";
$code = $_GET['code'];
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $appsecrt . "&code=" . $code . "&grant_type=authorization_code";
$rjson = http_curl($url); //http_curl 是写在common.php里面的一个方法,本文末将附上源码
$access_token = $rjson['access_token'];//得到access_token ( 网页的)
$openId = $rjson['openid'];//得到openid
$userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openId&lang=zh_CN";//获取用户信息
$result =http_curl($userInfoUrl); //http_curl 是写在common.php里面的一个方法,本文末将附上源码
var_dump($result);//打印用户详细信息
}
========common.php START =========
function http_curl($url){
$curl = curl_init();//初始化
curl_setopt($curl,CURLOPT_URL,$url);//设置抓取的url
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);// https请求 不验证证书和hosts
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($curl,CURLOPT_HEADER,0);// 设置头文件的信息作为数据流输出 设置为1 的时候,会把HTTP信息打印出来 不要http header 加快效率
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);//设置获取的信息以文件流的形式返回,而不是直接输出。 如果设置是0,打印信息就是true
$data = curl_exec($curl);//执行命令
$result = json_decode($data,true);
if ($data == false) {
echo "Curl Error:" . curl_error($curl);exit();
}
curl_close($curl);//关闭URL请求
return $result;
}