微信公众号模板消息接口

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值