使用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 调试环境(IIS+PHP+MYSQL)
Jan 10 PHP
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
Apr 25 PHP
PHP模块 Memcached功能多于Memcache
Jun 14 PHP
PHP数组操作汇总 php数组的使用技巧
Jul 17 PHP
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
Oct 17 PHP
使用PHP实现蜘蛛访问日志统计
Jul 05 PHP
php实现递归与无限分类的方法
Feb 16 PHP
PDO防注入原理分析以及注意事项
Feb 25 PHP
Laravel 创建指定表 migrate的例子
Oct 09 PHP
laravel框架添加数据,显示数据,返回成功值的方法
Oct 11 PHP
PHP开发api接口安全验证操作实例详解
Mar 26 PHP
如何重写Laravel异常处理类详解
Dec 20 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
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
尽可能写"友好"的"Javascript"代码
2007/01/09 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
jquery及原生js获取select下拉框选中的值示例
2013/10/25 Javascript
BootStrap实用代码片段之一
2016/03/22 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
2016/05/12 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
python通过exifread模块获得图片exif信息的方法
2015/03/16 Python
Python字符串处理实例详解
2017/05/18 Python
Python基于Matplotlib库简单绘制折线图的方法示例
2017/08/14 Python
同时安装Python2 & Python3 cmd下版本自由选择的方法
2017/12/09 Python
详解Python最长公共子串和最长公共子序列的实现
2018/07/07 Python
对Django url的几种使用方式详解
2019/08/06 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
GLAMGLOW香港官网:明星出镜前的秘密武器
2017/03/16 全球购物
印度购买眼镜和太阳镜网站:Coolwinks
2018/09/26 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
2014年英语教师工作总结
2014/12/03 职场文书
幼儿园小班个人总结
2015/02/12 职场文书
四年级数学教学反思
2016/02/16 职场文书
领导激励员工的演讲稿,各种会上用得到,建议收藏
2019/08/13 职场文书
比较几种Redis集群方案
2021/06/21 Redis
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js