微信公众号模板消息接口

1. 准备工作, 申请账号, 添加消息模板

2.主要代码如下:

   send.php

 

<?php
/**
 * Created by PhpStorm.
 * User: a
 * Date: 2019-05-13
 * Time: 14:39
 */

namespace app\index\controller;

use think\Controller;
use RedisPackage;


class Send extends Controller
{
    protected $appid = 'AAAAA'; //appid
    protected $appsecret = 'BBBB';  //AppSecret

    public function send_msg(){
        $data = array();
        $data['touser'] = 'CCCCCC';//接受者的openid
        $data['template_id'] = 'DDDDDD';//消息模板的template_id
        $data['appid'] = 'EEEEE';//小程序appid
        $data['data']['first']['value'] = "您好!";
        $data['data']['number']['value'] = "您收藏的商品【'双面呢大衣'】买三送一";
        $data['data']['name']['value'] = "即将结束,请及时下单";
        $data['data']['remark']['value'] = "距离本场拍卖结束还有30分钟";

        $data1 = json_encode($data);
        $res = $this->send_template_message($data1);
        return $res;
    }

    protected function send_template_message($data=''){
        if(empty($data)){
            echo 'null';exit;
        }

        $access_token = $this->getToken();

        $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$access_token;
        $res = $this->https_request($url,$data);
        $data = json_decode($res,true);

        if(in_array($data[ 'errcode' ],[40001,40014,41001,42001])){
            $access_token = $this->getAccessToken();
            $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={$access_token}";
            $res = $this->https_request($url,$data);
            $data = json_decode($res,true);
        }
        return $data;
    }

    /*
    * 获取accesstoken
    * 调用接口时,提前将服务器IP地址添加到IP白名单中,否则报错40164
    */
    protected function getToken(){
        $redis = RedisPackage::getInstance();
        $access_token = $redis->get('token_redis');

        if(!$access_token) {
            $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->appid.'&secret='.$this->appsecret;

            $output = $this->https_request($url);

            $jsoninfo = json_decode($output, true);

            if(!array_key_exists("access_token", $jsoninfo)) {
                return $jsoninfo;
            }
            $access_token = $jsoninfo["access_token"];

            $redis->setex('token_redis', 7000, $access_token);

            return $access_token;
        } else {
            return $access_token;
        }
    }


    protected function getAccessToken()
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->appid.'&secret='.$this->appsecret;

        $output = $this->https_request($url);

        $jsoninfo = json_decode($output, true);

        if(!array_key_exists("access_token", $jsoninfo)) {
            return $jsoninfo;
        }
        $access_token = $jsoninfo["access_token"];

        $redis = RedisPackage::getInstance();

        $redis->del('token_redis');

        $redis->setex('token_redis', 7000, $access_token);

        return $access_token;
    }

    /*
    * $url 接口API
    * $data json数据
    */
    protected function https_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, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
}

 

微信全局返回码说明文档:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433747234

微信模板消息接口文档:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277

要对接微信公众号模板消息接口,需要进行以下步骤: 1. 在微信公众平台上创建模板消息,获取模板 ID 和模板消息中需要填充的关键词。 2. 在 PHP 代码中编写发送模板消息的代码,包括获取 access_token 和发送模板消息。 3. 在用户触发某些事件时,调用 PHP 发送模板消息的代码。 以下是一个简单的 PHP 示例代码: ```php // 获取 access_token function getAccessToken($appID, $appSecret) { $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appID}&secret={$appSecret}"; $result = file_get_contents($url); $json = json_decode($result, true); if (isset($json['access_token'])) { return $json['access_token']; } else { return false; } } // 发送模板消息 function sendTemplateMessage($accessToken, $openID, $templateID, $data, $url = '') { $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={$accessToken}"; $data = [ 'touser' => $openID, 'template_id' => $templateID, 'url' => $url, 'data' => $data ]; $data = json_encode($data, JSON_UNESCAPED_UNICODE); $result = http_post_data($url, $data); $json = json_decode($result, true); if (isset($json['errcode']) && $json['errcode'] == 0) { return true; } else { return false; } } // 发送 POST 请求 function http_post_data($url, $data_string) { $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string)) ); ob_start(); curl_exec($ch); $result = ob_get_contents(); ob_end_clean(); curl_close($ch); return $result; } // 示例代码 $appID = 'your-app-id'; $appSecret = 'your-app-secret'; $accessToken = getAccessToken($appID, $appSecret); $openID = 'your-open-id'; $templateID = 'your-template-id'; $data = [ 'first' => ['value' => 'Hello World!', 'color' => '#173177'], 'keyword1' => ['value' => 'value1', 'color' => '#173177'], 'keyword2' => ['value' => 'value2', 'color' => '#173177'], 'remark' => ['value' => 'This is a remark.', 'color' => '#173177'] ]; $url = 'http://example.com'; $result = sendTemplateMessage($accessToken, $openID, $templateID, $data, $url); if ($result) { echo '发送成功!'; } else { echo '发送失败!'; } ``` 请注意,以上代码仅作为示例,需要根据实际情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值