微信网页授权Oauth2.0 某高校合唱团报名表单

9 篇文章 1 订阅
7 篇文章 0 订阅

首先在Application/Weih5/gkchorus目录新建一个Oauth2.0授权登录页面gkchorus_oauth2.php

<meta charset="utf-8">
<?php
	// error_reporting(0);
	// $get_openid=$_GET['state'];
	$appid = '微信公众号appid';// 微信公众号appid
	$REDIRECT_URI = 'http://你的域名/index.php/Home/Gkchorus/gkchorus';
	
	// $SCOPE = 'snsapi_base';
	$SCOPE = 'snsapi_userinfo';
	// 
	$uri = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$REDIRECT_URI.'&response_type=code&scope='.$SCOPE.'&state=1314#wechat_redirect';
	header("Location:$uri");
?>

前面CommonController.class.php控制器中已经获取到了access_token和jsapi_ticket,新建GkchorusController.class.php

<?php
    namespace Home\Controller;

    Class GkchorusController extends CommonController{
	public function gkchorus(){
	    $this->display();
	}

	public function enrol(){
	    $data['nickname'] = I('post.nickname');
            $data['name'] = I('post.name');
            $data['dept'] = I('post.dept');
            $data['phone'] = I('post.phone');
            $data['chorus'] = I('post.chorus');
            $data['create'] = date("Y-m-d H:i:s");
             // dump($data);

        	if ($data!=''&&$data!=null) {
        		$db=M('enrol');
	        	$db->create();
	        	$rs = $db->add($data);
	        	if($rs){
	                print("
	                	<meta charset='utf-8'>
	                	<script src='https://res.wx.qq.com/open/libs/weuijs/1.0.0/weui.min.js'></script>
	                	<script src='http://res.wx.qq.com/open/js/jweixin-1.0.0.js'></script>
	                	<script>
	                        alert('".$data['name']." 同学,"."您已报名成功,期待你的加入!');
	                        setTimeout(function(){WeixinJSBridge.call('closeWindow');},200);
	                    </script>");
	            }
	            else{
					print("
						<meta charset='utf-8'>
						<script>
	                        alert('服务器繁忙,请重新报名!');
	                        window.history.back();
	                    </script>");
	            }
        	}
        }
    }

Application/Home/View/gkchorus目录新建一个模板,gkchorus.html模板

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0">
    <link rel="stylesheet" href="__PUBLIC__/Weih5/gkchorus/main.css">
    <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
    <script src="https://res.wx.qq.com/open/libs/weuijs/1.0.0/weui.min.js"></script>
</head>
<body>
	<?php
		// 打开session
		// session_start();

		// 当用户授权登陆,openid出入session
		// if(!isset($_SESSION['openid'])){
			$code = $_GET['code'];	// 获取code
			// print_r($code);

			// curl请求,用于获取oauth2.0的access_token,微信openid等
			$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appID . "&secret=" . $appSecret . "&code=" . $code . "&grant_type=authorization_code";

			// 获取oauth2.0的access_token,微信openid等
			$ch = curl_init($url); 
			curl_setopt($ch, CURLOPT_URL, $url);  
			curl_setopt($ch, CURLOPT_HEADER, 0);  			//不显示头部信息
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 这个是主要参数  
			$output = curl_exec($ch); 
			curl_close($ch);
			$jsoninfo = json_decode($output, true);
			$access_token = $jsoninfo["access_token"];		// oauth2的access_token
			$openid = $jsoninfo["openid"];					// openid

			// 当用户刷新页面,失去openid,跳转oauth2.php重新授权
			if (empty($openid)||$openid==null) {
				echo ("
					<script>
						window.location='http://你的域名/Weih5/gkchorus/gkchorus_oauth2.php';
					</script>
				");
			}

			// 将oauth2的access_token和openid,获取用户信息
			$url_info = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN';

			$ch = curl_init($url_info); 
			curl_setopt($ch, CURLOPT_URL, $url_info);  
			curl_setopt($ch, CURLOPT_HEADER, 0);  			// 不显示头部信息
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);	// 这个是主要参数  
			$output_info = curl_exec($ch); 
			curl_close($ch);
			$jsonuser = json_decode($output_info, true);
			// var_dump($jsonuser);

	                // 存入数据库
	                $openid = $jsonuser['openid'];
    	                $nickname = $jsonuser['nickname'];
    	                $headimgurl = $jsonuser['headimgurl'];
		// }
	?>


  <div class="content_all">
    <div class="content_all_top">
      <div>
        <p><h2>广科合唱团报名</h2></p>
        <p><span>我们的梦想!在飞!在翱翔!</span></p>
      </div>
    </div>
    <div class="content_all_middle">
      <form name="chorusform" οnsubmit="return check()" action="{:U('Gkchorus/enrol')}" method="post">
    <?php 
      if ($nickname) {
      ?>
        <p><label>{$nickname}</label></p>
        <p><img src="{$headimgurl}" width="70" height="70"></p><br/>
      <?php 
      }
    ?>
        <p><input type="hidden" name="nickname" value="{$nickname}"></p>
        <p><label>姓名:<span>*</span></label></p>
        <p><input type="text" name="name" maxlength="10"></p><br/>
        <p><label>系别:<span>*</span></label></p>
        <p><input type="text" name="dept" maxlength="10"></p><br/>
        <p><label>手机:<span>*</span></label></p>
        <p><input type="number" name="phone" maxlength="11"></p><br/>
        <p><label>选择方向:<span>*</span></label></p>
        <p>
          <div class="radio" style="width: 85%!important;height: 100px;margin: auto;">
            <div><input type="radio" name="chorus" value="独唱歌手"/><span>独唱歌手</span></div>
            <div><input type="radio" name="chorus" value="钢琴伴奏"/><span>钢琴伴奏</span></div>
            <div><input type="radio" name="chorus" value="合唱团员"/><span>合唱团员</span></div>
          </div>
        </p>
        <div style="clear: both;"></div>
        <p><input class="submit" type="submit"></p>
      </form>
    </div>
    <div class="content_all_bottom">
      <p>By 广科合唱-Vegeta</p>
    </div>
  </div>
  

</body>
<script>
  /*
   * 注意:
   * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
   * 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
   * 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
   *
   * 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈:
   * 邮箱地址:weixin-open@qq.com
   * 邮件主题:【微信JS-SDK反馈】具体问题
   * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。
   */
  wx.config({
      debug: false,
      appId: '{$signPackage.appId}',
      timestamp: {$signPackage.timestamp},
      nonceStr: '{$signPackage.nonceStr}',
      signature: '{$signPackage.signature}',
      jsApiList:[
        'checkJsApi',
        'onMenuShareTimeline',
        'onMenuShareAppMessage',
        'onMenuShareQQ',
        'onMenuShareWeibo',
        'hideMenuItems',
        'showMenuItems',
        'hideAllNonBaseMenuItem',
        'showAllNonBaseMenuItem',
        'chooseImage',
        'previewImage',
        'uploadImage',
        'getNetworkType',
        'hideOptionMenu',
        'showOptionMenu']
  });

  wx.ready(function () {
    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
        
    // 注册分享朋友圈事件。
    wx.onMenuShareTimeline({
      title: '广科合唱团报名', // 分享标题
      link: 'http://你的域名/Weih5/gkchorus/gkchorus_oauth2.php', // 分享链接,该链接域名必须与当前企业的可信域名一致
      imgUrl: 'https://avatar.csdn.net/B/8/E/3_cai181191.jpg', // 分享图标
      success: function () {
          alert('success!');
      },
      cancel: function () {
          alert('cancel!');
      }
    });

	// 注册分享朋友事件
    wx.onMenuShareAppMessage({
      title: '广科合唱团报名', // 分享标题
      desc: '我们的梦想!在飞!在翱翔!',
      link: 'http://你的域名/Weih5/gkchorus/gkchorus_oauth2.php', // 分享链接,该链接域名必须与当前企业的可信域名一致
      imgUrl: 'https://avatar.csdn.net/B/8/E/3_cai181191.jpg', // 分享图标
      success: function () {
          alert('success!');
      },
      cancel: function () {
          alert('cancel!');
      }
    });
    

  });

  	wx.uploadImage({
	  localId: '', // 需要上传的图片的本地ID,由chooseImage接口获得
	  isShowProgressTips: 1, // 默认为1,显示进度提示
	  success: function (res) {
	    var serverId = res.serverId; // 返回图片的服务器端ID
	  }
	});

  wx.error(function(res){
      // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
  });

</script>
<script type="text/javascript">
    function check(){
      var name = document.chorusform.name.value.trim();
      var dept = document.chorusform.dept.value.trim();
      var mobile = document.chorusform.phone.value.trim();
      var chorus = document.chorusform.chorus.value.trim();
      

      if(name == "") {
        alert("请输入姓名");
        document.chorusform.name.focus();
        return false;
      }  

      if(dept == "") {
        alert("请输入系别");
        document.chorusform.dept.focus();
        return false;
      }

      if(!(/^1[3|4|5|6|7|8|9][0-9]{9}$/.test(mobile))){
        alert("不是完整的11位手机号!");
        document.chorusform.phone.focus();
        return false;
      }

      if(chorus == "") {
        alert("请选择方向");
        return false;
      }

      else{
        return true;
      }
    }
  </script>
</html>

在Public/Weih5/gkchorus目录新建一个层叠样式表,main.css

*{margin: 0;padding: 0;font-family: "Microsoft YaHei";}
body{background-image: url(./bg.png);background-repeat: repeat;}
.content_all{width: 95%;min-width: 300px;background-color: #fff;margin: 2.5%;}

.content_all_top{width: 100%;height: 100px;margin:auto;border-bottom: 1px solid #eee;position: relative;}
.content_all_top div{width: 85%;margin: auto;position: relative;top: 15px;}
.content_all_top div h2{font-weight: 400!important;height:40px;line-height: 40px;}
.content_all_top div p span{height:30px;line-height:30px;font-size: 12px;}

.content_all_middle{width: 100%;margin:auto;background-color: #fff;}
.content_all_middle form p{width: 85%;margin: auto;}
.content_all_middle form p label{line-height: 30px;}
.content_all_middle form p input{width: 100%;height: 30px;outline: none;}

.content_all_middle form p label span{color: red}

.content_all_middle form div input{display: block;float: left;width: 15%;height: 20px;line-height: 25px;margin: 2.5px 0 2.5px 0;}
.content_all_middle form div span{display: block;float: left;width: 85%;height: 25px;line-height: 25px;font-size: 14px;}

.content_all_middle form .radio{width: 85%!important;height: 100px;margin: auto;}
.content_all_middle form p .submit{border-radius: 5px;height: 35px;color: #fff;border:0;outline: none;background-color: rgb(55,185,210);}

.content_all_bottom{width: 100%;margin:auto;background-color: #fff;border-top: 1px solid #eee;position: relative;margin: 30px 0 0 0;}
.content_all_bottom p{font-size: 12px;padding: 10px 0;text-align: center;}

将gkchorus.sql导入mysql数据库

-- phpMyAdmin SQL Dump
-- version 4.1.14
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: 2018-04-14 12:39:52
-- 服务器版本: 5.6.17
-- PHP Version: 5.5.12

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `gkchorus`
--
CREATE DATABASE IF NOT EXISTS `gkchorus` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
USE `gkchorus`;

-- --------------------------------------------------------

--
-- 表的结构 `enrol`
--

CREATE TABLE IF NOT EXISTS `enrol` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `dept` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `phone` bigint(15) NOT NULL,
  `chorus` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `create` datetime NOT NULL,
  `nickname` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

效果:


(网页授权Oauth2.0,分享到朋友圈接口,分享给朋友接口)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
栏目可绑定任意模型,栏目可发表任何模型内容 栏目单一的模型,已经满足不了日益发展的互联网的需求。因而v6版整站系统自定义文章模型功能应运而生,他的最大特色在于:每个栏目可以发表任意模型的内容,比如产品库、视频、下载、图片等等,而这些模型都是可以自由创建的。这样就可以使得某个栏目变得丰富多彩,而不仅仅是单纯的文章了。 自定义万能表单功能 管理员可以在后台自由创建各种各样的表单,如意见反馈表单报名表单、调查表单等等。每个表单,管理员可以自定义字段让用户填写,非常适合各种各样的需求。 强大专题功能 可以控制会员自由创建多少个专题,管理员可以鼓励带动会员创建各种各样有特色的专题。每篇文章可以归属于多个专题。这样就充分的发挥了网友的积极性与互动性,更大的特色是论坛贴子也可以归纳到任意一个专题里边。 强大的会员身份验证功能 在传统的邮箱验证会员身份功能的基础上,新增手机短信验证会员身份,同时也有身份证复印件人工审核机制。 新增广告销售系统、竞价广告功能 广告销售系统是对原来广告系统的功能增强,可以由用户自己购买广告,购买广告消费的是点卡,而点卡是需要充值的,这样就可以为网站实现创收营利。竟价广告是新增加的功能,用户可以用积分购买广告位,消费的积分越多就越靠前,这样就可以很好的让用户消费积分与赚取积分。 新增顶客,文章举报,收藏夹,文章推荐功能 收藏夹方便用户收藏自己感兴趣的文章,顶客、举报、推荐属于互动性的功能,方便会员协助管理员挑选出优秀文章与删除不好的文章。 新增友情链接用户申请功能 友情链接不仅可以分类,而且还可以让用户自助申请,同时还可以自由控制哪些在主页显示,还可以控制某个友情链接强制为文字方式显示。 新增自定义投票功能 可以自由创建无限组投票,而每个投票可以自定义任意多个选项,每个投票选项都对应有一个投票按钮代码与一个票数显示调用代码,把投票按钮代码与票数显示代码插入到你做好的投票页面,即可实现非常灵活的图形并茂的投票专题页面。 新增邮件群发,短消息群发功能 邮件群发功能需要设置一个你的邮箱,一般建议用QQ邮箱,设置后,即可给网站会员群发邮件。短消息功能可以实现与论坛的短消息互通,并且有提醒功能。 智能静态网页处理技术 用户发表文章时,可以自动生成文章内容页与列表页静态网页,用户删除文章时,可以自动删除,用户修改文章时,可以自动修改,管理员审核,删除,修改,移动,置顶等等操作时,也会自动的做相应的处理。 用户中心、管理后台操作界面进一步改进 前台用户管理中心与管理后台在界面与人性化操作方面都做了很大的改进。为以后功能的增加与用户安装更多的频道做了很大的便利。 前台发表文章功能进一步加强 前台可以自由控制游客与会员只能使用某些表单选项,比如是否可以发表框架网页,是否可以设置收费等等,并且会员可以在前台发表多页的文章,这也就可以很方便的实现小说连载功能。给网站带来了很大的灵活性与扩展性。同时还可以自由控制哪些用户组需要输入验证码,等等 防采集、防复制功能,有效保护网站内容(授权版独有) 你是否恨透了别人采集与复制你的网站原创内容呢?你可以在后台开启防采集与防复制功能,别人就难以盗用你的网站内容。因为在文章的每一段都智能的加了不同的混淆字符串。 防CC攻击、防恶意刷新(授权版独有) 当别人恶意刷新你的网站的时候,就会导致网站变得很慢,影响用户的正常访问,这个时候,你可以在后台开启防CC功能,就可以阻止攻击者的访问。 万能表单解答用户问题短信通知功能(授权版独有) 利用万能表单你可以创建各种各样的表单,如意见反馈,产品订单等等,当你解决了对方的问题之后,在后台作解答的同时,可以自动的发一条短信通知对方,从而可以令用户觉得你很人性化,增加用户粘性。 自动生成模板功能(授权版独有) 利用万能表单与自定义内容模型,你可以创建出很多的表单与内容模型,当修改过设置之后,你可以选择自动批量生成模板,而不必一个一个的手工生成那么麻烦。 电子商务点卡功能(授权版独有) 系统有在线充值功能,但是针对于没有网银的用户,你可以在后台使用点卡功能,生成一批点卡,然后打印出来销售,或者是把点卡密码赠送给用户实现会员金币充值功能。点卡面值与充值的金币个数及密码位数都是可以自由设定。 邮件、短信群发功能(授权版独有) 利用邮件或短信群发功能,你可以实现内部员工信息群发通知或者是对外的广告宣传作用。 更多细节的完善与功能增强 增加关键字管理、增加自定义采集参数分页、用户组的权限进行了更详细的划分、增加来源地址的入库、出错提示页面的美化、标签功能的进一步完善、内容页增加打印,字体大小与简繁体的切换等等

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值