ThinkPHP5微信订阅消息推送

薛定谔的盒子猫
• 阅读 1368

信息整合

$msg = [
    'thing3' => ['value'=> '邀请好友购课奖励积分'],
    'thing1' => ['value'=> $data3['integral']],
    'thing2' => ['value'=> $welfare],
    'date4' => ['value'=> date('Y-m-d H:i:s', time())],
];
//订阅格式请参照小程序订阅消息模板中的格式

发起消息接口

/***
 * 订阅消息模板
 * @param $touser  //需要接受订阅消息的openid
 * @param $template_id //模板ID
 * @param $page //点击返回页面路径
 * @param $dataArray //订阅格式请参照小程序订阅消息模板中的格式
 * @return array
 */
public function sendSubscribeMessage($touser, $template_id, $page, $dataArray)
{
    //access_token 一般都存在缓存 ,
    $access_token = $this->get_access_token();
    //请求url
    $url = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=' . $access_token ;
    //发送内容
    $data = [] ;
    $data['touser'] = $touser;  //用户的openid
    $data['template_id'] = $template_id; //所需下发的订阅模板id

    //点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
    $data['page'] = $page;
    //模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }
    $data['data'] = $dataArray;

    //跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
    $data['miniprogram_state'] = 'formal';
    $data['lang'] = 'zh_CN';
    $json_data = json_encode($data);

    return [
        'openid' => $touser,
        'data' => $this->curlRequest($url, $json_data)//这里面就是个curl请求 , 转成数组返回
    ];
}

获取微信AccessToken

/**
 * 微信小程序获取接口调用凭证AccessToken
 */
public function get_access_token1()
{
    $config = Db::name('cycling_config')->where('id',1)->field('wechat_appid,wechat_appsecret')->find();
    $APPID = $config['wechat_appid'];//    小程序appid
    $APPSECRET = $config['wechat_appsecret'];   //  小程序appsecret
    //获取access_token
    $access_token ="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$APPID&secret=$APPSECRET";

    //缓存access_token
    session_start();
    $_SESSION['access_token'] ="";
    $_SESSION['expires_in'] = 0;

    $ACCESS_TOKEN ="";
    if(!isset($_SESSION['access_token']) || (isset($_SESSION['expires_in']) && time() >$_SESSION['expires_in']))
    {

        $json = $this->httpRequest($access_token );
        $json = json_decode($json,true);
        if(empty($json['access_token'])){
            $this->result('', 0, $json['errmsg']);
        }
        $_SESSION['access_token'] =$json['access_token'];
        $_SESSION['expires_in'] = time()+7200;
        $ACCESS_TOKEN =$json["access_token"];
    }
    else{

        $ACCESS_TOKEN = $_SESSION["access_token"];
    }
    return $ACCESS_TOKEN;
}

发起请求

/**
     * @param string $url post请求地址
     * @param array $params
     */
    function curlRequest($url, $params)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        curl_setopt(
            $ch, CURLOPT_HTTPHEADER,
            array(
                'Content-Type: application/json'
            )
        );
        $data = curl_exec($ch);
        curl_close($ch);
        return ($data);
    }
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
翼
3年前
正则表达式限制输入框只能输入数字
1正则表达式限制输入框只能输入数字<inputtype"text"onkeyup"this.valuethis.value.replace(/^d/g,')"onafterpaste"this.valuethis.value.replace(/^d/g,')"name"f_order"value"1"/其
Easter79 Easter79
3年前
sql:mysql:函数:TIMESTAMPDIFF函数实现TimeStamp字段相减,求得时间差
<divclass"htmledit\_views"id"content\_views"<p&nbsp;函数内指定是minute,则最终结果value值的单位是分钟,如果函数内指定为hours,则最终结果value值单位为小时。</p<preclass"has"name"code"<codeclass"hljssql"<
梦
3年前
微信小程序验证url地址
笔记类varthatthisthat.optional()是验证是否为空方法url(value){returnthat.optional(value)||/^(?:(?:(?:https?|ftp):)?//)(?:S(?::S)?@)?(?:
Stella981 Stella981
3年前
PHP的cookie与Javascript的cookie的关系
PHP读写cookie的语句:setcookie("user","Lilu",time()3600);echo$_COOKIE"user";javascript读写cookie代码:functionSetCookie(name,value)//两个参数,一个是cookie的名子,一
Stella981 Stella981
3年前
HTML5新增input标签属性
一.inputtype属性1<formaction""2邮箱<inputtype"email"name""id""<inputtype"submit"value"提交"<br/<br/3手机号码<inputtype"tel"name
Stella981 Stella981
3年前
AntV G2 tooltip 修改
<divid"mountNode"</div<scriptconstdata{"date":"1","value":22.75,"type":"应收金额","rate":'2016020
Wesley13 Wesley13
3年前
URL编码以及get和post请求乱码问题
1. 什么是URL编码。URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value,将他们以name/value编码方式作为URL的一部分或者分离的发送到服务器上。2. URL编码规则。每对name/value由&分开,每对来自表单的name/value用分开。如果用户没有输入值的那个
Wesley13 Wesley13
3年前
Java properties文件中如何添加空格
Java(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Flib.csdn.net%2Fbase%2Fjavase)的properties文件中存储的是keyvalue格式的数据,例如:name1value1name2value2如果要在value1后面加上
Stella981 Stella981
3年前
JS导出JSON到Excel表格
<ahref"javascript:;"id"export"导出</a<script$("export").click(function(){varTitle{"value":"姓名"},{"value":"课题组"},{"value":
薛定谔的盒子猫
薛定谔的盒子猫
Lv1
男 · 四川智慧谦益科技有限公司 · 技术总监
暮雨不来春不去,花满地月朦胧。
文章
7
粉丝
2
获赞
2