<?php /** * * 处理用户模板消息 formid * * @author * */ class UserFormidController extends Controller { /** * 接收用户formId,存入表User_formid */ public function actionIndex() { $userInfo = $this->userInfo; $app = new User_formidModel (); $app->uid = $this->user_id; $app->formid = $_REQUEST[\'fromid\']; $app->openid = $userInfo->openid; $app->add_time = time(); if($_REQUEST[\'fromid\']){ if (!$app->save()){ echo \'成功\'; } } } public function actionSendmsg() { $re = $this->sendTemplateMsg(317359,[\'可口可乐宣传主题曲制作,感兴趣的联系13012345678\',\'记得带伞\']); var_dump($re); } /* * 小程序向发送用户发送模板消息 * 传入用户的uid、消息数组、页面地址 * 同时依赖get_access_token(),curl()这个两个方法 * 返回200为成功发送,404未找到可用的formid,其他错误代号为 * 40037template_id不正确;41028form_id不正确,或者过期;41029form_id已被使用;41030page不正确;45009接口调用超过限额(目前默认每个帐号日调用限额为100万) * $this->sendTemplateMsg(317359,[\'可口可乐宣传主题曲制作\',\'记得带伞\']); */ public function sendTemplateMsg($uid,$temp_arr,$page=\'pages/index/index\'){ //根据uid在formid表中查询该用户 $connection = Yii::app()->impression; //七天前的时间,低于这个时间的记录已经失效 $where_time = (int)time() - 604800; $sql = " SELECT * FROM `imp_user_formid` WHERE `uid`= ".$uid.\' AND `add_time`>\'.$where_time.\' ORDER BY `add_time` ASC limit 1\'; $userRes = $connection->createCommand($sql)->queryAll(); if(count($userRes) > 0){ //组织消息内容 $value = array( "keyword1"=>array( "value"=>$temp_arr[0], "color"=>"#4a4a4a" ), "keyword2"=>array( "value"=>$temp_arr[1], "color"=>"#4a4a4a" ) ); $send_date = array(); $send_date[\'touser\'] = $userRes[0][\'openid\']; $send_date[\'template_id\']=\'h20O855x1vIPxJCHYgPIXWA2pyeKYtb5Bh0V5onquEs\'; $send_date[\'page\']= $page; //点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,该字段不填则模板无跳转。 $send_date[\'form_id\'] = $userRes[0][\'formid\']; $send_date[\'data\']=$value; //模板内容,不填则下发空模板 $send_date[\'color\']=\'\'; //模板内容字体的颜色,不填默认黑色 $send_date[\'emphasis_keyword\']=\'\'; //发送 $url = \'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=\' .$this->get_access_token(); $res_str = $this->curl($url,json_encode($send_date)); $res = json_decode($res_str, true); if($res[\'errcode\'] == 0){ //成功 删除用过的 formid $sql = " DELETE FROM `imp_user_formid` WHERE `id`= ".$userRes[0][\'id\']; $connection->createCommand($sql)->execute(); //删除过期的 formid $sql2 = " DELETE FROM `imp_user_formid` WHERE `uid`= ".$uid.\' AND `add_time`<\'.$where_time; $connection->createCommand($sql2)->execute(); return 200; }else{ return $res[\'errcode\']; } }else{ //删除过期的 formid $sql2 = " DELETE FROM `imp_user_formid` WHERE `uid`= ".$uid.\' AND `add_time`<\'.$where_time; $connection->createCommand($sql2)->execute(); return 404; } } //获取小程序的 access_token public function get_access_token() { $connection = Yii::app()->impression; $sql = "SELECT * FROM `imp_weixin_account` WHERE `id`=1"; $Row = $connection->createCommand($sql)->queryRow(); $access_token = $Row[\'access_token\']; if ($Row[\'access_token_time\'] < time()) { $info = file_get_contents("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $Row[\'appid\'] . "&secret=" . $Row[\'appsecret\']); $info = json_decode($info); $access_token = $info->access_token; $access_token_time = time() + 7000; $upsql = "UPDATE `imp_weixin_account` SET `access_token` = \'" . $access_token . "\' ,`access_token_time` =\'" . $access_token_time . "\' WHERE `id`=1 "; $connection->createCommand($upsql)->execute(); } return $access_token; } //curl post方式 public function curl($url, $params) { //初始化 $curl = curl_init(); //设置抓取的url curl_setopt($curl, CURLOPT_URL, $url); //设置头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_HEADER, false); //设置获取的信息以文件流的形式返回,而不是直接输出。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //设置post方式提交 curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $params); //执行命令 $data = curl_exec($curl); //关闭URL请求 curl_close($curl); //显示获得的数据 return $data; } }
数据库结构
请发表评论