php 微信网页授权 实例

根据微信授权文档结合当前需求

(php有回复功能的页面  在微信内部打开,回复时要求获取用户信息并保存,使用微信用户信息资料)

做了分类判断(呼出类与静默类)

1.在php页面进行配置(分类判断操作的php页面,还是自己的页面)

php页面(index.php)

//微信授权
$backurl = base64_encode("http://****.com/wechat_oauth_save.php?id=".$post_id);//回掉页面
$oauth_url = "https://****.com/oauth.php?scope=snsapi_userinfo&backurl=".$backurl;//分类判断

php分类判断(oauth.php) scope,与backurl

<?php
ini_set("display_errors",'Off');
error_reporting(0);
//配置微信公众好appid和appsecret
define("APPID","wx6***bc");
define("APPSECRET","983***d9ddb9");

$backurl=$_GET['backurl'];
$scope=isset($_GET['scope'])?$_GET['scope']:'snsapi_base';
//snsapi_base无提示,snsapi_userinfo有提示
if($scope=="snsapi_base")
{
    $redirect_uri="http://****/oauth_back_snsapi_base.php?backurl=".$backurl;
}else
{
    $redirect_uri="http://****k/oauth_back_snsapi_userinfo.php?backurl=".$backurl;
}
//微信接口
$url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".APPID."&redirect_uri={$redirect_uri}&response_type=code&scope={$scope}&state=123#wechat_redirect";
header("Location: {$url}");
?>

2.请求微信接口获取数据

oauth_back_snsapi_base.php(静默获取)

<?php
define("APPID","wx***bc");
define("APPSECRET","983****db9");
include_once('/o*****h/memcache/memcache.php');//memcache配置

$code=$_GET['code'];//微信获取的code
$backurl=base64_decode($_GET['backurl']);

$url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".APPID."&secret=".APPSECRET."&code={$code}&grant_type=authorization_code";
$token_info=json_decode(curl($url),true);//获取openid
$openid=$token_info['openid'];
//user_info?
$access_token=curl("http://******/weixin/callback/get_access_token.php?from=ci123");
$url="https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid;
$uinfo=json_decode(curl($url),true);
//print_r($uinfo);exit;
M::Set('wx_'.$openid,$uinfo,3600);
$arr=parse_url($backurl);
$query=$arr['query'];
$backurl=str_replace('?'.$query,'',$backurl);
$backurl.="?op=".$openid."&".$query;
header("Location: {$backurl}");

function curl($url,$data=null)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $tmpInfo = curl_exec($ch);
    if (curl_errno($ch)) {
      return curl_error($ch);
    }
    curl_close($ch);
    return $tmpInfo;
}
?>

oauth_back_snsapi_userinfo.php 弹出框获取用户信息

<?php
//ini_set("display_errors",'On');
//error_reporting(E_ALL ^ E_NOTICE);
ini_set("display_errors",'Off');
error_reporting(0);
define("APPID","wx6*****deabc");
define("APPSECRET","983****d9ddb9");

include_once('*****/memcache/memcache.php');

$code    =$_GET['code'];//回掉带来的code
$backurl = base64_decode(trim($_GET['backurl']));
$url     = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".APPID."&secret=".APPSECRET."&code={$code}&grant_type=authorization_code";
$token_info=json_decode(curl($url),true);
$access_token=$token_info['access_token'];
$openid=$token_info['openid'];
$url="https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$openid}&lang=zh_CN";
$uinfo=json_decode(curl($url),true);
M::Set('wx_'.$openid,$uinfo,3600);
$arr=parse_url($backurl);
$query=$arr['query'];
$backurl=str_replace('?'.$query,'',$backurl);
$backurl.="?op=".$openid."&".$query;
header("Location: {$backurl}");//返回页面

function curl($url,$data=null)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $tmpInfo = curl_exec($ch);
    if (curl_errno($ch)) {
      return curl_error($ch);
    }
    curl_close($ch);
    return $tmpInfo;
}
?>

3.保存用户信息

wechat_oauth_save.php

<?php
session_start();
include_once('/***/m/inc/global.php');
include_once('/***/class_xmlrpc.php');
include_once('/****/memcache.php');
...
$openid=$_GET['op'];//授权用户的openid
$user_info = M::Get('wx_'.$openid);
$unionid = $user_info['unionid'];

$backurl = 'http://**/share_view.php?id='.$_GET['id']."#reply_content";//授权后重定向的网页
...

echo "<script>window.location.href='".$backurl."'</script>";//返回用户浏览页面

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值