<?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. CF G. Indie Album 广义后缀自动机+树链剖分+线段树合并

    这里给出一个后缀自动机的做法. 假设每次询问 $t$ 在所有 $s$ 中的出现次数,那么这是非常简单的: 直接对 $s$ 构建后缀自动机,随便维护一下 $endpos$ 大小就可以. 然而,想求 $t ...

  2. ubuntu编译安装openssl

    http://blog.bccn.net/%E9%9D%99%E5%A4%9C%E6%80%9D/66642 su root  不然权限不够 cd /usr/src wget https://www. ...

  3. 「SCOI2015」小凸玩矩阵

    题目链接 问题分析 题目给了充足的暗示,我们只需要二分答案然后跑匈牙利即可.要相信匈牙利的速度 参考程序 #include <bits/stdc++.h> using namespace ...

  4. sleep() 、join()、yield()有什么区别

    1sleep()方法 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行).此操作受到系统计时器和调度程序精准和准确性的影响,让其他线程有机会继续执行,但是它不释放对象锁.也就是如果有synchron ...

  5. easyui tree 点击state=closed节点,每次重新加载数据

    http://blog.csdn.net/lovejavaloveworld/article/details/30052305 树控件读取URL.子节点的加载依赖于父节点的状态.当展开一个封闭的节点, ...

  6. 展示组件(Presentational component)和容器组件(Container component)之间有何不同

    展示组件关心组件看起来是什么.展示专门通过 props 接受数据和回调,并且几乎不会有自身的状态,但当展示组件拥有自身的状态时,通常也只关心 UI 状态而不是数据的状态.(子组件)容器组件则更关心组件 ...

  7. 使用 sed 命令查找和替换文件中的字符串的 16 个示例

    当你在使用文本文件时,很可能需要查找和替换文件中的字符串.sed 命令主要用于替换一个文件中的文本.在 Linux 中这可以通过使用 sed 命令和 awk 命令来完成. 在本教程中,我们将告诉你使用 ...

  8. Gson解析list类型的json串

    Gson gson = new Gson(); Type type = new TypeToken<List<Object>>() {}.getType(); List< ...

  9. js 外部引用文件与 onload()函数的优先级

    在HTML页面中的body加载进来的时候,外部引用的js文件存放的位置 1.js文件放在body里面,则是按照body的加载顺序(按先后顺序)进行加载 2.js文件放在<head>标签里面 ...

  10. Python之输入输出

    python中变量的输出 # 打印提示 print('hello world') print('你好!') # 输出变量 url = 'loaderman' print('我是:',url) prin ...