使用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 相关文章推荐
一个用于网络的工具函数库
Oct 09 PHP
默默简单的写了一个模板引擎
Jan 02 PHP
php 读取文件乱码问题
Feb 20 PHP
php笔记之常用文件操作
Oct 12 PHP
php递归创建和删除文件夹的代码小结
Apr 13 PHP
php 判断服务器操作系统的类型
Feb 17 PHP
php+js iframe实现上传头像界面无跳转
Apr 29 PHP
CodeIgniter CLI模式简介
Jun 17 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
Sep 20 PHP
PHP制作用户注册系统
Oct 23 PHP
php简单获取复选框值的方法
May 11 PHP
PHP判断一个数组是另一个数组子集的方法详解
Jul 31 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程序?
2006/12/08 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
laravel 实现向公共模板中传值 (view composer)
2019/10/22 PHP
JS处理VBArray的函数使用说明
2008/05/11 Javascript
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
用按钮控制iframe显示的网页实现方法
2013/02/04 Javascript
解析JavaScript中点号“.”的多义性
2013/12/02 Javascript
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
移动Web中图片自适应的两种JavaScript解决方法
2015/06/18 Javascript
DropDownList实现可输入可选择(两种版本可选)
2016/12/07 Javascript
jQuery.parseHTML() 函数详解
2017/01/09 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
js中的数组对象排序分析
2018/12/11 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
VUE 自定义组件模板的方法详解
2019/08/30 Javascript
python虚拟环境 virtualenv的简单使用
2020/01/21 Javascript
详解使用mocha对webpack打包的项目进行"冒烟测试"的大致流程
2020/04/27 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
Python中input和raw_input的一点区别
2014/10/21 Python
django模型中的字段和model名显示为中文小技巧分享
2014/11/18 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
Python 列表去重去除空字符的例子
2019/07/20 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
2019/08/10 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
Python使用configparser读取ini配置文件
2020/05/25 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
工业设计专业推荐信
2013/10/29 职场文书
绿色环保倡议书
2015/04/28 职场文书
七年级语文教学反思
2016/03/03 职场文书
Python使用DFA算法过滤内容敏感词
2022/04/22 Python