微信开发之消息模板推送 + php

简介: 微信开发之消息模板推送 + php

微信官方开发文档 developers.weixin.qq.com/doc/offiacc…

怎么获取模板里面说的很清楚,我用的是测试号,所以就不再说获取template_id的流程了,直接说怎么推送。

PHP代码

public function pushmsg(){
        // 实例化微信操作类
        $wx = new Wechat();
        $token = $wx->getAccessToken();
        // 推送数据 数组
        $data = [
            "touser" => "XXXXXXXXXXXXXXX",        //接收者的openid
            "template_id" => "XXXXXXXXXXXXXXX", //申请的消息模板id        "url" => "XXXX", //推送消息中点击跳转的链接,不填就不会跳转        "data" => array( "name" => array("value"=>"测试用户","color"=>"#173177"), "time" => array("value"=>date('Y-m-d H:i:s',time()),"color"=>"#173177") ) ];        $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=$token";       // 发送模板消息       $res = $wx->http_curl($url, 'post', 'json', json_encode($data));       echo "<pre>";       print_r($res); }

效果:

1672730325914.png

Wechat类是我自己封装的,比如获取access_token,ticket,curl请求这些

使用到微信接口是“生成带参数的二维码”,可以生成两种二维码,一种是临时二维码,会过期,生成量大,主要用于帐号绑定等不要求二维码永久保存的业务场景;另一种是永久二维码,没有过期时间,但生成量小(目前为最多10万个),主要用于适用于帐号绑定、用户来源统计等场景。扫码之后,如果用户没关注公众号会提示关注,如果已关注就直接进入公众号对话框。

1672730358984.png

1672730377676.png

首先创建二维码ticket,然后凭借ticket到指定URL换取二维码,具体介绍可以看官方文档 developers.weixin.qq.com/doc/offiacc…

示例代码:

<?php
namespace app\index\controller;
use think\Controller;
/**
 * 微信类
 */
class Wechat extends Controller
{
    protected  $APPID = 'xxxxxxxxxxx';
    protected  $APPSECRET = 'xxxxxxxxxxxxxx';
    /**
    * curl请求 
    */
    public function http_curl($url, $type = 'get', $res = 'json', $arr = ''){
      $cl = curl_init();
      curl_setopt($cl, CURLOPT_URL, $url);
      curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($cl, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($cl, CURLOPT_SSL_VERIFYHOST, false);
      if($type == 'post'){
        curl_setopt($cl, CURLOPT_POST, 1);
        curl_setopt($cl, CURLOPT_POSTFIELDS, $arr);
      }
      $output = curl_exec($cl);
      curl_close($cl);
      return json_decode($output, true);
      if($res == 'json'){
        if( curl_error($cl)){
          return curl_error($cl);
        }else{
          return json_decode($output, true);
        }
      }
    }
    /**
     * 获取 AccessToken
     */
    public function getAccessToken()
    {
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->APPID."&secret=".$this->APPSECRET;
        // 先判断 access_token 文件里的token是否过期,没过期继续使用,过期就更新
        $data = json_decode($this->get_php_file(ROOT_PATH."public".DS."wxtxt".DS."access_token.txt"));
        // 过期 更新
        if ($data->expire_time < time()) {
            $res = $this->http_curl($url);
            $access_token = $res['access_token'];
            if ($access_token) {
                // 在当前时间戳的基础上加7000s (两小时)
                $data->expire_time = time() + 7000;
                $data->access_token = $res['access_token'];
                $this->set_php_file(ROOT_PATH."public".DS."wxtxt".DS."access_token.txt",json_encode($data));
            }
        }else{
            // 未过期 直接使用
            $access_token = $data->access_token;
        }
        return $access_token;
    }
    // 获取存储文件中的token
    private function get_php_file($filename) {
        return trim(file_get_contents($filename));
      }
      // 把token 存储到文件中
      private function set_php_file($filename, $content) {
        $fp = fopen($filename, "w");
        fwrite($fp,  $content);
        fclose($fp);
      }
      /**
     * 生成二维码
     */
    public function getQrcode(){
        $token = $this->getAccessToken();
        $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=$token";
    // 参数
        $param = array();
        $param['action_name'] = "QR_LIMIT_SCENE";  
        $param['action_info'] = array( 'scene' => array( 'scene_id'=>'123'  )  );
        $param = json_encode($param);
        // 返回二维码的ticket和二维码图片解析地址
        $res = $this->http_curl($url, 'post', 'json', $param);
        // 通过ticket换取二维码
        $qrcode = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".$res['ticket'];
    //输出二维码图片路径
    echo "<center><img src=".$qrcode."></center>";       
    }
}

运行getQrcode()方法,效果如下

思路说明:

1.获取Token,注意过期时间

2.获取ticket,拿Token和二维码的一些参数,换取ticket

3.生成二维码,拿ticket换取二维码地址

目录
相关文章
ly~
|
1月前
|
存储 供应链 小程序
除了微信小程序,PHP 还可以用于开发哪些类型的小程序?
除了微信小程序,PHP 还可用于开发多种类型的小程序,包括支付宝小程序、百度智能小程序、抖音小程序、企业内部小程序及行业特定小程序。在电商、生活服务、资讯、工具、娱乐、营销等领域,PHP 能有效管理商品信息、订单处理、支付接口、内容抓取、复杂计算、游戏数据、活动规则等多种业务。同时,在企业内部,PHP 可提升工作效率,实现审批流程、文件共享、生产计划等功能;在医疗和教育等行业,PHP 能管理患者信息、在线问诊、课程资源、成绩查询等重要数据。
ly~
67 6
|
3月前
|
小程序 前端开发
生活商城app微信小程序模板源码
生活商城app微信小程序模板源码
56 6
|
16天前
|
应用服务中间件 Shell PHP
pbootcms模板报错提示PHP Warning: Unknown: open_basedir restriction
pbootcms模板报错提示PHP Warning: Unknown: open_basedir restriction
|
15天前
|
小程序
java--微信小程序发送模板消息
java--微信小程序发送模板消息
62 0
|
15天前
|
云安全 存储 小程序
PHP微信小程序解决方案PhpMall
PHP微信小程序解决方案PhpMall
29 0
|
3月前
|
小程序
同城拼车社交微信小程序模板源码
同城拼车社交微信小程序模板源码
71 6
|
3月前
|
小程序 前端开发
微信综合购物商城小程序ui模板源码
微信电商小程序前端页面,综合购物商城ui界面模板。主要功能包含:电商主页、商品分类、购物车、购物车结算、我的个人中心管理、礼券、签到、新人专享、专栏、商品详情页、我的订单、我的余额、我的积分、我的收藏、我的地址、我的礼券等。这是一款非常齐全的电商小程序前端模板。
85 4
|
3月前
|
小程序 前端开发
网络祭祀人物微信小程序模板源码
网络祭祀人物微信小程序模板源码
38 5
|
3月前
|
小程序
日常记账微信小程序模板源码
日常记账微信小程序模板源码 模板介绍 一款实用的日常记账微信小程序模板下载。包含:引导页、登录、记账中心、消息、通讯录、个人中心等模块。
58 4
|
3月前
|
小程序
仿qq音乐播放微信小程序模板源码
手机qq音乐应用小程序,在线音乐播放器微信小程序网页模板。包含:音乐歌曲主页、推荐、排行榜、搜索、音乐播放器、歌单详情等。
47 1