使用YII2框架实现微信公众号中表单提交功能


Posted in PHP onSeptember 04, 2017

刚接触微信,要做一个在手机上的表单提交功能。

需求有这些:

  1. 只能在数据库中存在的手机号看到表单。
  2. 表单可以重复提交。
  3. 第一次进入表单需要验证
  4. 分享出去的页面,别人进入后也需要验证。

因为每个手机在同一个公众号当中的openid是唯一性的。所以在手机查看这个表单页面的时候,就将这个openid存到数据库中,方便下次提交可以验证。

下面是我的代码。使用的是YII2框架。

Controller

//获得回调函数
 public function actionCallback($code,$state){
    $model = new tp_tstz_proposal();
    $model1= new tp_tstz_staff();
    // 微信开放平台网站应用的appid和秘钥secret
    $appid = '';
    $secret = '';
    $curl = new curl\Curl();
    //获取access_token
    $wxresponse = $curl->get('https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid
      . '&secret=' . $secret . '&code=' . $code . '&grant_type=authorization_code');
    $wxresult = json_decode($wxresponse);
    if(isset($wxresult->errcode) && $wxresult->errcode > 0){
      //分享出去,重新认证
     return $this->render('login');
      // 向微信请求授权时出错,打印错误码
      // echo json_encode($wxresult);
      // exit;
    }
    $openid=$wxresult->openid;
    $result=$model1::find()->where(['openid'=>$openid])->one();
    //如果OPENID存在就去表单
    if(count($result)>0){
      $key=123456;
      return $this->render('view',['model'=>$model,'key'=>$key]);
    }else{
      return $this->render('tel',['model'=>$model1,'openid'=> $openid]);
    }
  }`

view层

很简单的重定向页面

header('Location:https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8ba95fc51672e844&redirect_uri=http%3a%2f%2fjifen.wendu.cn%2fts%2fweb%2findex.php%3fr%3dproposal%2fcallback&response_type=code&scope=snsapi_base&state=123asd#wechat_redirect');

返回的路径就是进入controller的路径。

在表单页面,我先做了一个简单的认证

if(!isset($key)){
  header('Location:http://jifen.wendu.cn/ts/web/index.php?r=say/login');
}

判断是否是从分享的页面来的,如果是从分享的页面来就要重新验证,判断是否在数据库中有此手机的openid。没有就进行手机号码的验证。

大概就是这样了,我第一个简单的微信公众号项目。

总结

以上所述是小编给大家介绍的使用YII2框架实现微信公众号中表单提交功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
第十三节--对象串行化
Nov 16 PHP
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
Sep 24 PHP
不重新编译PHP为php增加openssl模块的方法
Jun 14 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
Jan 21 PHP
php判断一个数组是否为有序的方法
Mar 27 PHP
PHP使用ODBC连接数据库的方法
Jul 18 PHP
PHP数据库操作Helper类完整实例
May 11 PHP
简单的pgsql pdo php操作类实现代码
Aug 25 PHP
PHP 表单提交及处理表单数据详解及实例
Dec 27 PHP
php获取文章内容第一张图片的方法示例
Jul 03 PHP
Laravel修改验证提示信息为中文的示例
Oct 23 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
Sep 04 #PHP
PHP读取、解析eml文件及生成网页的方法示例
Sep 04 #PHP
PHP钩子与简单分发方式实例分析
Sep 04 #PHP
PHP实现登录注册之BootStrap表单功能
Sep 03 #PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
Sep 02 #PHP
php简单读取.vcf格式文件的方法示例
Sep 02 #PHP
PHP实现简单的模板引擎功能示例
Sep 02 #PHP
You might like
信用卡效验程序
2006/10/09 PHP
PHP开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
如何在HTML 中嵌入 PHP 代码
2015/05/13 PHP
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
深入浅析Vue不同场景下组件间的数据交流
2017/08/15 Javascript
vue 1.0 结合animate.css定义动画效果
2018/07/11 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
js中实现继承的五种方法
2021/01/25 Javascript
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
[20:30]职业巡回赛回顾
2018/08/09 DOTA
python的re模块应用实例
2014/09/26 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
解决python3捕获cx_oracle抛出的异常错误问题
2018/10/18 Python
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
Python标准库itertools的使用方法
2020/01/17 Python
Django用户身份验证完成示例代码
2020/04/03 Python
Python文件操作模拟用户登陆代码实例
2020/06/09 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
教育专业自荐书范文
2013/12/17 职场文书
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
治安消防安全责任书
2014/07/23 职场文书
个人作风建设心得体会
2014/10/22 职场文书
Java各种比较对象的方式的对比总结
2021/06/20 Java/Android
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers