使用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 相关文章推荐
php入门之连接mysql数据库的一个类
Apr 21 PHP
如何用php生成扭曲及旋转的验证码图片
Jun 07 PHP
利用PHP实现短域名互转
Jul 05 PHP
解决cPanel无法安装php5.2.17
Jun 22 PHP
php中使用gd库实现下载网页中所有图片
May 12 PHP
PHP实现连接设备、通讯和发送命令的方法
Oct 13 PHP
PHP并发多进程处理利器Gearman使用介绍
May 16 PHP
PHP微信支付开发实例
Jun 22 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
Apr 01 PHP
PHP与以太坊交互详解
Aug 24 PHP
TP5.0框架实现无限极回复功能的方法分析
May 04 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 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
全国FM电台频率大全 - 17 湖北省
2020/03/11 无线电
杏林同学录(五)
2006/10/09 PHP
php框架Phpbean说明
2008/01/10 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
2014/08/08 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
基于javascript实现页面加载loading效果
2020/09/15 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
2017/03/31 Javascript
详解React Native开源时间日期选择器组件(react-native-datetime)
2017/09/13 Javascript
JS正则表达式常见用法实例详解
2018/06/19 Javascript
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
python分析apache访问日志脚本分享
2015/02/26 Python
python文件操作相关知识点总结整理
2016/02/22 Python
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
python dataframe astype 字段类型转换方法
2018/04/11 Python
python 在指定范围内随机生成不重复的n个数实例
2019/01/28 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
HTML5是什么 HTML5是什么意思 HTML5简介
2012/10/26 HTML / CSS
巴西购物网站:Submarino
2020/01/19 全球购物
药物学专业学生的自我评价
2013/10/27 职场文书
乡镇干部先进事迹材料
2014/02/03 职场文书
岳麓书院导游词
2015/02/03 职场文书
银行工作心得体会范文
2016/01/23 职场文书
Python实现生成bmp图像的方法
2021/06/13 Python
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android
如何用六步教会你使用python爬虫爬取数据
2022/04/06 Python
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js