基于redis+mysql+php的简单微信服务号通知队列
Queue.php
- <?php
-
- /**
- * Queue.php
- * User: Administrator
- * Date: 2019/4/4
- * Time: 13:19
- */
- namespace Index;
- require_once('Weixin/Wxapi.php');
- require_once('Mysql/Mysql.php');
- use Weixin\Wxapi;
- use Mysql\Mysql;
- class Index {
- private $Redis;
- private $Expire;
- private $WxData;
- private $DB;
- public function __construct()
- {
- $this->WxData = [
- //服务号1
- "a" => [ "AppId" =>"",
- "AppSecret" =>"",
- "Token" =>"",
- "Crypt" =>"",
- "template" =>""
- ],
- //服务号2
- "b" => [
- "AppId" => "",
- "AppSecret" => "",
- "Token" =>"",
- "Crypt" =>"",
- "template" => ""
-
- ],
- "c" => [
- "AppId" => "",
- "AppSecret" => "",
- "Token" =>"",
- "Crypt" =>"",
- "template" => ""
-
- ]
- ];
-
- $this ->Redis = new \Redis();
- $this ->Redis -> connect( "127.0.0.1", "6379" );
- $this->DB = new Mysql();
-
- // $this ->Redis ->auth("123456");
- self::init();
- }
- public function init(){
- while (true) {
-
- $key = $this->Redis->keys("*");
- if( !$key ){
-
- sleep(10);
-
- }else{
-
- foreach ($key as $k) {
- $value = $this->Redis->lpop($k);
- $data = json_decode($value, true);
- if ($data) {
- $AppId = $this->WxData[$k]["AppId"];
- $AppSecret = $this->WxData[$k]["AppSecret"];
- $templateId = $this->WxData[$k]["template"];
- // echo $AppId;
- $Wxapi = new Wxapi($AppId, $AppSecret);
- // var_dump($data);
- $url = "http://www.qq.com";
- if ($data["send_type"] == "custom") {
-
- $send = [
- "type" => "news", //类型
- "title" => $data["title"], //消息标题
- "description" => "点击进入查看详情", //图文详情
- "picurl" => "http://www.abc.com/abc.jpg",
- "url" => $url,
- ];
- $res = $Wxapi->send_custom_message($data["wx_openid"], $send);
- $type = 1;
- }
- $ret = json_decode($res, true);
- if ($data["send_type"] == "template" or $ret["errcode"] !=0 ) {
- $template = [
- "first" => [
- "value" => $data["title"],
- "color" => "#ff0000"
- ],
- "keyword1" => [
- "value" => "服务消息",
- "color" => "#ff0000"
- ],
- "keyword2" => [
- "value" => date('Y-m-d H:i'),
- "color" => "#173177"
- ],
- "remark" => [
- "value" => "点击进入查看详情",
- "color" => "#173177"
- ],
- ];
- $res = $Wxapi->send_template_message($data["wx_openid"], $templateId, $template, $url);
- $type = 2;
- }
- $ret = json_decode($res, true);
- $log = [
- "user_id" => $data["id"],
- "tradelist_id" => $data["tradelist_id"],
- "room_id" => $data["room_id"],
- "log" => $res,
- "errcode" => $ret["errcode"],
- "add_time" => time(),
- "type" => $type,
- ];
- $this->DB->insert("sz_queue_log", $log);
-
-
- }
- }
- }
-
- }
-
- }
- }
-
-
- $obj = new Index();
-
-
mysql.php
- <?php
- /**
- * Mysql.php
- * User: Administrator
- * Date: 2019/4/4
- * Time: 13:19
- */
-
- namespace Mysql;
-
-
- class Mysql
- {
- public $DB;
- //构造函数,获取Access Token
- public function __construct()
- {
- $dbms = 'mysql'; //数据库类型
- $host = '127.0.0.1'; //数据库主机名
- $dbName = '127.0.0.1'; //使用的数据库
- $user = 'root'; //数据库连接用户名
- $pass = '123456'; //对应的密码
- $dsn = "$dbms:host=$host;dbname=$dbName";
- return self::initConnect($dsn, $user, $pass);
- }
- protected function initConnect($dsn, $user, $pass){
- if ( !$this->DB ) $this->DB = $this->connect($dsn, $user, $pass);
- return $this->DB;
- }
- public function connect($dsn, $user, $pass){
- $this->DB = new \PDO($dsn, $user, $pass, array(\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION));
- try
- {
- $this->DB->query("SELECT 1");
- echo "ok";
- }
- catch (\PDOException $e){
- $this->DB = new \PDO($dsn, $user, $pass, array( \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION));
- }
- return $this->DB;
- }
-
- /**
- * 插入数据
- * @param $table 数据表
- * @param $data 数据数组
- * @return mixed 插入ID
- */
- public function insert($table, $data)
- {
- foreach ($data as $key => $value) {
- $data[$key] = $value;
- }
- $keys = '`' . implode('`,`', array_keys($data)) . '`';
- $values = '\'' . implode("','", array_values($data)) . '\'';
- $sql = "INSERT INTO {$table}( {$keys} )VALUES( {$values} )";
- $this->DB->query($sql);
- return $this->mysqli->insert_id;
- }
-
- }
-
Wxapi.php
- <?php
- /**
- *Wxapi.php.
- * User: Administrator
- * Date: 2019/4/4
- * Time: 10:15
- */
-
- namespace Weixin;
-
- class Wxapi
- {
- public $appid ;
- public $appsecret ;
- public $WxData;
- //构造函数,获取Access Token
- public function __construct($Appid = NULL, $Appsecret = NULL)
- {
-
-
- if($Appid && $Appsecret){
- $this->appid = $Appid;
- $this->appsecret = $Appsecret;
- // echo $this->appid ."[]". $this->appsecret ;
- //3. 本地写入
- $res = file_get_contents('/www/Queue/Weixin/json/'.$Appid.'.json');
- $result = json_decode($res, true);
- $this->expires_time = $result["expires_time"];
- $this->access_token = $result["access_token"];
- if (time() > ($this->expires_time + 7000)){
- $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->appsecret;
- // file_put_contents('./url.php',$url);
- $res = $this->http_request($url);
- $result = json_decode($res, true);
-
- $this->access_token = $result["access_token"];
- $this->expires_time = time();
- file_put_contents('/www/Queue/Weixin/json/'.$Appid.'.json', '{"access_token": "'.$this->access_token.'", "expires_time": '.$this->expires_time.'}');
- }
- }
- }
- //发送模版消息
- public function send_template_message($touser,$template_id,$data,$url){
- $msg = array('touser' =>$touser);
- $msg["template_id"] = $template_id;
- $msg["topcolor"] ="#FF0000";
- $msg["data"] = $data;
- $msg["url"] = $url;
- $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$this->access_token;
- return $this->http_request($url, urldecode(json_encode($msg)));
- }
- //发送客服消息
- public function send_custom_message($touser, $data)
- {
- $msg = ['touser' =>$touser,
- 'msgtype' => "news",
- 'news' => [
- "articles" => [$data],
- ]
- ];
-
- $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$this->access_token;
- return $this->http_request($url, urldecode(json_encode($msg,320)));
- }
- //HTTP请求(支持HTTP/HTTPS,支持GET/POST)
- protected function http_request($url, $data = null)
- {
- $curl = curl_init();
- curl_setopt($curl, CURLOPT_URL, $url);
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
- if (!empty($data)){
- curl_setopt($curl, CURLOPT_POST, 1);
- curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
- }
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
- $output = curl_exec($curl);
- curl_close($curl);
- return $output;
- }
-
- }
-
解压密码: detechn或detechn.com
免责声明
本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。
本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
文章不错非常喜欢