php redis微信发红包,高阶篇二 使用Redis队列发送微信模版消息

# 高阶篇二 使用Redis队列发送微信模版消息

> 此命令行执行任务的方法类比较复杂 他需要命令行运行才会有效

>

命令行源码以及创建方法 参见上节

https://www.kancloud.cn/mikkle/thinkphp5_study/396283

> 总体的逻辑是通过Redis作为队列媒介 命令行 根据分析reids数据并执行指定方法

> 本类的静态方法add 是往redis队列中追加数据

> 本类的静态方法run方法 是命令行程序执行的处理队列信息的方法

>

Redis类库 参见 附件十

https://www.kancloud.cn/mikkle/thinkphp5_study/374537

~~~

/**

* Created by PhpStorm.

* Power By Mikkle

* Email:776329498@qq.com

* Date: 2017/7/4

* Time: 13:56

*/

namespace app\worker\controller;

use mikkle\tp_wechat\Wechat;

use think\Config;

use think\Exception;

use think\Log;

class WechatMessage extends Base

{

protected $options=[];

protected $wechat;

protected $listName;

public function __construct($options=[])

{

$this->options = empty($options) ? Config::get("wechat.erp_options") : $options;

parent::__construct($options);

$this->message=Wechat::message($this->options);

$this->listName = md5($this->workerName);

}

/**

* 检测命令行是否执行中

* Power: Mikkle

* Email:776329498@qq.com

* @return bool

*/

static public function checkCommandRun(){

return self::redis()->get("command") ? true :false;

}

/**

* 快速添加模版消息任务

*

* 当命令行未运行 直接执行

* Power: Mikkle

* Email:776329498@qq.com

* @param $data

* @param array $options

*/

static public function add($data,$options=[]){

$instance = self::instance($options);

switch (true){

case (self::checkCommandRun()):

$instance->redis->lpush($instance->listName,$data);

$instance->runWorker();

break;

default:

$instance->message->sendTemplateMessage($data);

}

}

/**

* 命令行执行的方法

* Power: Mikkle

* Email:776329498@qq.com

*/

static public function run(){

$instance = self::instance();

try{

$i = 0;

while(true){

$data = $instance->redis->rpop($instance->listName);

if ($data){

$re=$instance->sendMessage($data);

Log::notice($re);

}else{

break;

}

$i++;

sleep(1);

}

$instance->clearWorker();

echo "执行了{$i}次任务".PHP_EOL;

}catch (Exception $e){

Log::error($e);

$instance->clearWorker();

die($e->getMessage());

}

}

/**

* 发送模版消息的方法

* Power: Mikkle

* Email:776329498@qq.com

* @param $data

* @return bool

*/

protected function sendMessage($data){

$no = $this->message->sendTemplateMessage($data);

if ($no){

Log::notice("发送成功[{$no}]");

return true ;

}else{

Log::notice("发送失败[{$no}]");

$this->failed($data);

};

}

/**

* 出错执行的回调方法

* Power: Mikkle

* Email:776329498@qq.com

* @param $data

*/

protected function failed($data){

}

}

~~~

![](https://box.kancloud.cn/3d03b7f1d9950795c8b1f45d16dfef3a_862x335.png)

* 调用Work类的方法 你可以循环插入

~~~

$assign_data= [

"ToUserName"=>$value,

"url"=> Url::build($type["url"],[],"",true),

"first"=> "温馨提示,你有一个[{$type["title"]}]需要审核". (empty($uuid_name)?"":",提交人:$uuid_name"),

"keyword1"=>"{$type["title"]}审核",

"keyword2"=>date("Y-m-d H:i:s",time()),

"remark"=>"点击查看具体内容"

];

$template = $this->assignTemplate("mission",$assign_data);

//添加异步命令行发送模版消息

$re = WechatMessage::add($template,"erp_options");

//dump($re);

Log::notice("发送{$uuid_name}提交的{$type["title"]}审核模版消息成功!$re");

}

~~~

* 本类用到的部分方法

~~~

static public function assignTemplate($name, $data = '')

{

$template = self::getTemplate($name);

if (empty($data)){

return $template;

}else{

try{

return View::instance()->display($template,$data);

}catch (Exception $e){

Log::error($e->getMessage());

ob_get_clean();

throw $e;

return false;

}

}

}

static public function getTemplate($name)

{

if (is_null(self::$instance)) {

self::$instance = new static();

}

if(isset(self::$instance->$name)){

return self::$instance->$name;

}else{

return false;

}

}

~~~

感谢大家关注 交流请加QQ群 321449759

![](https://box.kancloud.cn/3499008a08e64306c68873288092a057_286x340.png)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值