thinkphp实现微信公众号/微信小程序消息提醒

在config文件夹里新增 lh.php配置文件

<?php
// | 微信设置

return [
    // 小程序appid
    'appid'    => '',
    // 小程序密钥
    'appSecret' => '',
    // 公众号id
    'gzhid'    => '',
    // 公众号key
    'gzhkey'    => '',
    // 请求地址
    'server'    => ''
];

微信公众号/小程序消息提醒 发送提醒

<?php
declare (strict_types = 1);

namespace app\api\controller;

use think\facade\Db;
use think\facade\Env;
use think\facade\Request;
use think\facade\Log;
use think\facade\Cache;

class Template
{
	// 获取公众号Access token
    public function getGZHAccessToken($server, $fresh){
        $access_token = Cache::get($server.'gzh_access_token');
        if(!$access_token || $fresh){
            $config = [
                'appid' => config("$server.gzhid"),
                'secret' => config("$server.gzhkey"),
                'grant_type' => 'client_credential'
            ];
            $response = $this->curlPost('https://api.weixin.qq.com/cgi-bin/token',$config);
            $data = json_decode($response, true);
            $access_token = $data["access_token"];
            Cache::set($server.'gzh_access_token', $access_token, $data["expires_in"] - 200);
        }
        return $access_token;
    }

	// 获取小程序access Token
    function getAppletsAccessToken($server, $fresh){
        $access_token = Cache::get($server.'access_token');
        if(!$access_token || $fresh){
            $config = [
                'appid' => config("$server.appid"),
                'secret' => config("$server.appSecret"),
                'grant_type' => 'client_credential'
            ];
            $response = $this->curlPost('https://api.weixin.qq.com/cgi-bin/token',$config);
            $data = json_decode($response, true);
            $access_token = $data["access_token"];
            Cache::set($server.'access_token', $access_token, $data["expires_in"] - 200);
        }
        return $access_token;
    }
    
    // 微信公众号/小程序消息提醒  发送提醒
    function sendRemind(){
        $rvData=array("success"=>false,"data"=>[],"message"=>"","code"=>200);
        $post = file_get_contents('php://input'); 
        $postData = json_decode($post, true);
        // 检查是否存在server字段,并将其值赋给$server变量  
        $server = isset($postData['server']) ? $postData['server'] : null;  
        $msg_id = isset($postData['msg_id']) ? $postData['msg_id'] : null;  
        // 判断是公众号还是小程序的消息提醒  公众号:0  小程序:1
        $cls = isset($postData['cls']) ? $postData['cls'] : null; 
        $url = config("$server.server");
        // 移除server,cls等字段,将其余参数放入$params数组中  
        $params = array_diff_key($postData, ['server' => true]);
        $params = array_diff_key($postData, ['cls' => true]);
        $params = array_diff_key($postData, ['msg_id' => true]);
        $params['miniprogram']['appid'] = config("$server.appid");
        // 0:公众号  1:小程序
        if($cls == 0){
            $access_token = $this->getGZHAccessToken($server,false);
            $access_token = $this->getGZHAccessToken($server,true);
        }
        if($cls == 1) {
            $access_token = $this->getAppletsAccessToken($server,false);
            $access_token = $this->getAppletsAccessToken($server,true);
        }
        $response = Request::curl("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$access_token,json_encode($params),true,true);
        
        $rvData['data'] = json_decode($response, true);
        $rvData['success'] = true;
        // Log::record($rvData['data'],'执行结果');
        // 更新状态
        if($rvData['data']['errmsg'] == 'ok') {
    		// 已通知  
        }else {
            // 通知失败
        }
        return json($rvData);
    }
    
    // 生成消息模板
    function generate($item,$res2,$server){
        $params = null;
        
        // 提醒类型
        if($item->msg_cls == 13) {
            $timestamp = strtotime($res2->就诊时间);
            $formattedDateTime = date('Y-m-d H:i', $timestamp); 
            $params = array(
                'server' => $server,
                'cls' => 0, 
                'msg_id' => $item->id,
                'touser' => $item->openid,
                'template_id' => $item->temp_id,
                'url'=> '',
                'miniprogram'=>array(
                    'pagepath' => ''
                ),
                'client_msg_id'=> '',
                'data'=>array(
                    'time5' =>array(
                        'value' => $formattedDateTime
                    ),
                    'thing4' =>array(
                        'value' => $res2->就诊医生
                    ),
                    'thing2' =>array(
                        'value' => $res2->就诊科室
                    ),
                    'thing1' =>array(
                        'value' => $res2->就诊人
                    ),
                    'thing6' =>array(
                        'value' => $res2->就诊医院
                    ),
                ),
            );
        }
        // 执行发送模板消息
        if (is_array($params)) { 
            $response = Request::curl("https://api.ecom20200909.com/Template/sendRemind",json_encode($params),true,true); 
        } else {   
            return false;
        }
        
    }
    
    // 检测微信消息提醒
    function timingCheckRemind(){
        $server = 'lh';
        $url = config("$server.server");
        $data["function"] = "app_get_weixin_message";
		$data["fendian_id"] = 0;
		$data["db"] = "mssql";
		$res = json_decode(Request::curl($url,json_encode($data),true,false));
        if ($res && isset($res->success) && $res->success && isset($res->resultset) && is_array($res->resultset)) { 
            foreach ($res->resultset as $item) {  
                if($item->tixing_flag == 0) {
                    $data1["function"] = "saas_get_weixin_message_detail";
                    $data1["db"] = "mssql";
                    $data1['login_id'] = 0;
                    $data1['msg_id'] = $item->id;
                    $data1['msg_cls'] = $item->msg_cls;
                    $data1['remark'] = '';
                    $res1 = json_decode(Request::curl($url,json_encode($data1),true,false));
                    if($res1->resultset && $res1->resultset[0]) {
                        $res2 = $res1->resultset[0];
                        $this->generate($item,$res2,$server);
                    }
                } 
            }  
        } else {  
            return '数据解析失败或格式不正确';  
        }
    }
    
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A_ugust__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值