<?php
namespace backend\controllers;

use yii\db\Query;
use yii\web\Controller;
use Yii;
class Exam2Controller extends Controller{
public $enableCsrfValidation=false;
function actionMssage(){

$echostr=Yii::$app->request->get('echostr');
if(isset($echostr)){
$res=$this->check();
if($res){
echo $echostr;
}
}else{
$this->mess();
}
}

function check(){
$signature=$_GET["signature"];
$timestamp=$_GET["timestamp"];
$nonce=$_GET["nonce"];
$token='hello';

$tmpArr = array($timestamp, $nonce,$token);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( $tmpStr==$signature ){
return true;
}else{
return false;
}
}
function mess(){
$str=file_get_contents("php://input");
$obj=simplexml_load_string($str,'SimpleXMLElement',LIBXML_NOCDATA);

$type=$obj->MsgType;
if($type=="event"){
if($obj->Event=='subscribe'){
$openide=$obj->FromUserName;
$sql="insert into usern(openid,leg) values('$openide',0)";
file_put_contents("/test/ccc.txt",$sql);
yii::$app->db->createCommand($sql)->execute();

$token=$this->token();
$openid=$obj->FromUserName;
$url="https://api.weixin.qq.com/cgi-bin/user/info?access_token=$token&openid=$openid&lang=zh_CN";
$urls=file_get_contents($url);
$json=json_decode($urls,true);
$nickname=$json['nickname'];
$city=$json['city'];
$province=$json['province'];
$sex=$json['sex']?'男':'女';
$conte="你好$nickname,我猜你是{$province}省{$city}市的$sex";
$this->info($obj,$conte);
}
else if($obj->Event=='CLICK'){

if($obj->EventKey=="qiandao"){
$time=time();
$openid=$obj->FromUserName;
$data=Yii::$app->db->createCommand("select*from qiandao where openid='$openid'")->queryOne();
if(!$data){
$time=time();
Yii::$app->db->createCommand("update usern set leg=leg+10 where openid='$openid'")->execute();
Yii::$app->db->createCommand("insert into qiandao(openid,addtime)values('$openid','$time')")->execute();
$content="签到成功";
$this->info($obj,$content);
}else if($data){

$d1=date('Y-m-d',$time);
$d2=date('Y-m-d',$data['addtime']);
if($d1==$d2){
$content="您已经签过到";
$this->info($obj,$content);
}else{
Yii::$app->db->createCommand("update usern set leg=leg+10 where openid='$openid'")->execute();
Yii::$app->db->createCommand("update qiandao set addtime=$time where openid='$openid'")->execute();
$content="签到成功";
$this->info($obj,$content);
}
}
}else if($obj->EventKey=="tuwen"){
$data=[
['title1'=>'今天星期四',
'description1'=>'又是好的一天',
'picurl'=>'http://b391.photo.store.qq.com/psb?/V11XFINC03DLi5/DNhOQga*ySbNPg6XQ7IiSEToI0g8UljpgVnj*yzEYB0!/b/dDKZGOkhIAAA&bo=wAOAAgAAAAABB2E!&rf=viewer_4',
'url'=>'http://www.baidu.com'

],
['title1'=>'今天星期四',
'description1'=>'又是好的一天',
'picurl'=>'http://b391.photo.store.qq.com/psb?/V11XFINC03DLi5/DNhOQga*ySbNPg6XQ7IiSEToI0g8UljpgVnj*yzEYB0!/b/dDKZGOkhIAAA&bo=wAOAAgAAAAABB2E!&rf=viewer_4',
'url'=>'http://www.baidu.com'

],
['title1'=>'今天星期四',
'description1'=>'又是好的一天',
'picurl'=>'http://b391.photo.store.qq.com/psb?/V11XFINC03DLi5/DNhOQga*ySbNPg6XQ7IiSEToI0g8UljpgVnj*yzEYB0!/b/dDKZGOkhIAAA&bo=wAOAAgAAAAABB2E!&rf=viewer_4',
'url'=>'http://www.baidu.com'

],
];
$this->dtw($obj,$data);

}
}
}else if($type=='text'){
if($obj->Content=='图片'){

$titles =(new Query())->select('filename')->from('filed')->indexBy('filename')->column();
$medio_id=array_rand($titles,1);
$this->doimg($obj,$medio_id);
}
}
}

function dtw($obj,$data){
$xml='<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%d</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>3</ArticleCount>
<Articles>%s</Articles>
</xml>';
$t1='<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>';
$str='';
foreach ($data as $k=>$v){
$str.=sprintf($t1,$v['title1'],$v['description1'],$v['picurl'],$v['url']);
}
$res=sprintf($xml,$obj->FromUserName,$obj->ToUserName,time(),$str);
echo $res;

}
function doimg($obj,$medio_id){
$xml="<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%d</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId><![CDATA[%s]]></MediaId>
</Image>
</xml>";

$str=sprintf($xml,$obj->FromUserName,$obj->ToUserName,time(),$medio_id);
echo $str;
}
function info($obj,$conte){
$xml='<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%d</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>';
$res=sprintf($xml,$obj->FromUserName,$obj->ToUserName,time(),$conte);
echo $res;
}

function token(){
$appid="wx56bd4d1b3747f03b";
$appsecret='cec1de114ad6d7a555f2fb141cd3855a';
$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
$urls=file_get_contents($url);
$json=json_decode($urls,true);
$tok=$json['access_token'];
return $tok;
}
function medio($tet){
$token=$this->token();
$url="https://api.weixin.qq.com/cgi-bin/media/upload?access_token=$token&type=image";

$upload=new \CURLFile($tet);
$arr=array('meido'=>$upload);
$med=$this->cur($url,true,'post',$arr);
$json=@json_decode($med,true);
$media=$json['media_id'];

return $media;

}

function actionFile(){
return $this->render('file');
}
function actionDofil(){

$file=$_FILES['file'];
$tmp_name=$file['tmp_name'];
$tet="/test/".$file['name'];
move_uploaded_file($tmp_name,$tet);
$medio_id=$this->medio($tet);
$time=time();
$data=Yii::$app->db->createCommand("insert into filed(filename,creat)values('$medio_id','$time')")->execute();

}
function cur($url,$https=false,$methou='get',$arr){
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,"$url");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
if($https==true){
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
}
if($methou=='post'){
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$arr);
}

$res=curl_exec($ch);
return $res;

}
}

//model层文件上传

<?php
namespace backend\models;

use yii\db\ActiveRecord;

class Dg extends ActiveRecord
{
/**
* @var UploadedFile
*/
// public $imageFile;

public function rules()
{
return [

[['imageFile'], 'file', 'skipOnEmpty' => true, 'extensions' => 'png, jpg'],
[['leav'], 'required'],

];
}

public function upload()
{
if ($this->validate()) {
$this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
$upl='uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension;
return $upl;
} else {
return false;
}
}
}

//model层处理递归

<?php
namespace backend\models;

use yii\db\ActiveRecord;

class Cont extends ActiveRecord
{
public function rules()
{
return [
// name, email, subject 和 body 属性必须有值
[['name','pid'], 'required'],

// email 属性必须是一个有效的电子邮箱地址

];
}

function gettree($data,$pid){
static $str=[];
foreach ($data as $k=>$v){

if($v['pid']==$pid){
$str[$k]=$v;
$str[$k]['name']=str_repeat("--|",$v['leav']-1).$v['name'];
$this->gettree($data,$v['id']);
}
}
return $str;
}
}

YII框架微信公众号的更多相关文章

  1. nodejs 中koa框架下的微信公众号开发初始篇

    最近在搞微信公众号开发,后端采用的是nodejs下的koa框架,初识后端的菜鸟,自己搞难度太大了,网上找了很多文章,采用的中间件大都是express框架下的,不过好在爬了许多坑之后总算看见点曙光了,遂 ...

  2. php 微信公众号+微商城开发 基于Thinkphp3.2框架开发

    说明:本教程是自己自学+自己的理解+扩展(包括学习过程中遇到的一些问题) 参考教程:麦子学院--李忠益--http://www.maiziedu.com/u/70409/ 微盟: http://www ...

  3. 微信公众号 几种移动端UI框架介绍

    微信公众号开发,主要是移动端网页的页面开发,在这里推荐3个移动端UI框架:WeUI.SUI和Mint UI. 1. WeUI 1.1 WeUI WeUI是微信官方设计团队为微信 Web 开发量身设计, ...

  4. 基于APPIUM测试微信公众号的UI自动化测试框架(结合Allure2测试报告框架)

    框架初衷 前两周组内的小伙伴跟我说她现在测试的微信公众号项目(保险)每次上新产品时测试起来很费时,存在大量的重复操作(点点点),手工测试每个产品可能需要半天到一天的时间,复杂的产品需要两天. 由于保险 ...

  5. 微信公众号开发系列-13、基于RDIFramework.NET框架整合微信开发应用效果展示

    1.前言 通过前面一系列文章的学习,我们对微信公众号开发已经有了一个比较深入和全面的了解. 微信公众号开发为企业解决那些问题呢? 我们经常看到微信公众号定制开发.微信公众平台定制开发,都不知道这些能给 ...

  6. 上篇: php 微信公众号 基于Thinkphp3.2框架开发

    说明:本教程是自己自学+自己的理解+扩展(包括学习过程中遇到的一些问题) 参考教程:麦子学院--李忠益--http://www.maiziedu.com/u/70409/ 微盟: http://www ...

  7. 在微信框架模块中,基于Vue&Element前端的微信公众号和企业微信的用户绑定

    在一个和微信相关的业务管理系统,我们有时候需要和用户的微信账号信息进行绑定,如对公众号.企业微信等账号绑定特定的系统用户,可以进行扫码登录.微信信息发送等操作,用户的绑定主要就是记录公众号用户的ope ...

  8. NodeJs 开发微信公众号(二)测试环境部署

    由于卤煮本人是做前端开发的,所以在做公众号过程中基本上没有遇到前端问题,在这方面花的时间是最少的.加上用了mui框架(纯css界面)和自己积累的代码,很快地开发出了界面来.接着是后台开发.卤煮选的是n ...

  9. NodeJs 开发微信公众号(一)准备工作

    前言 大概是一个月前,自己用业余时间做了一个微信公众号.微信开发,尤其是对后台不熟悉的人来说显得尤其困难.首先要克服的是后台语言(nodejs)的一些不熟悉困难,其次,也是最大的一点困难是在跟微信交互 ...

随机推荐

  1. ie文件断点续传

    一.概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载.在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了.一般断点下载时才用到Range和Content- ...

  2. Nowcoder Monotonic Matrix ( Lindström–Gessel–Viennot lemma 定理 )

    题目链接 题意 : 在一个 n * m 的矩阵中放置 {0, 1, 2} 这三个数字.要求 每个元素 A(i, j) <= A(i+1, j) && A(i, j) <= ...

  3. 【杂题】[CodeForces 1172D] Nauuo and Portals【构造】

    Description 有一个n*n的网格,你需要在上面设置一些传送门,传送门由两个配对的格子组成,从一个进入会立刻从另一个同一方向出来. 现在有n个人从第1列出发向右走,位于(i,1)的人要走到(r ...

  4. HGOI20190707 题解

    Problem A 钢铁侠的诞生 现在有$n$个数字$a_i \leq 10^9 $,然后取出$m$个数字,保证合法. 从小到大输出剩余的$n-m$个数字. 对于100%的数据$m\leq n \le ...

  5. C++11 中的强类型枚举

    // C++11之前的enum类型是继承C的,不温不火: // C++11对enum动刀了,加强了类型检查,推出强类型enum类型,眼前一亮 // 使用过QT 的都知道,早就应该这么做了,用的很爽!! ...

  6. java JIT

    JVM 即时编译器即时编译器 (Just In Time Compiler) 简称JIT JAVA程序最初是通过解释器 (Interpreter) 进行解释执行的,当 JVM 发现某个方法或代码块运行 ...

  7. 访问 Django 项目的静态资源

    from django.urls import path, re_path from django.conf import settingsfrom django.views.static impor ...

  8. Android如何使用Https与Nohttp框架使用

    什么是Https? HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全 ...

  9. 一些 postman

    听了:https://v.qq.com/x/page/f0816egftuw.html npm 是 node package manager, Nodejs下的包管理器.安装完 nodejs 后(no ...

  10. Selenium+Python的开发环境搭建

    第一步:安装Python  https://www.python.org/ 注意:在cmd窗口中输入python,如果不是内部或者外部命令的需要配置环境变量Path ; 右击桌面我的电脑-->属 ...