微信开发之小程序发送订阅消息

微信小程序在年初也是进行了升级.将原来的模板消息升级为订阅消息.也是在这几天研究了下.发现和公众号的模板消息有一种异曲同工的感觉.

废话不多说.来看下小程序发送订阅消息.

首先放上官方的文档  小程序订阅消息

首先.我们应该先去微信后台的订阅消息处选择适合自己的订阅模板.这里的话也是需要将模板id保存一下.

然后就是需要用到的微信的appid和appsecret.老生常谈的东西.这里就不多说了.参照文档.我们只需要将模板需要的参数和Appid和appsecret换取到的accesToken去请求微信的链接就可以了.代码放下面,很简单.

    /**
     * 发送模板消息  
     * $openid  用户的openid
     * $money  金额  此处为模板需要的参数  自行替换
     */
 public function sendSubMessage($openId,$money){

        $params['touser'] = $openId;
        $params['template_id'] = 'muR0TMElyOHUy9Gy2M7lUAc3LpF1yd-d1JU21PQrz_4';  //模板id
        $params['page'] = "/pages/user/userMaintain?type=4";    //  小程序页面

        $template = array(
            'touser' =>  $params['touser'] ,
            'template_id' =>  $params['template_id'],
            'page' =>  $params['page'],
            'data' => array(
                'thing1' => array('value' => '维修订单'),
                'amount2' => $money,
                'thing3' => array('value' => '订单需维修费用')
            )
        );

        $appid = db('config')->where(['name' => 'appid'])->value('value');
        $appsecret = db('config')->where(['name' => 'appsearct'])->value('value');
        $send_template_url = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=' .$this->getAccessToken($appid,$appsecret);
        

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $send_template_url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($template));
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        $res = curl_exec($ch);
        curl_close($ch);
        return $res;

    }
    /**
     * 获取access_token
     */
    public function getAccessToken()
    {

        $appId = db('config')->where(['name' => 'appid'])->value('value');
        $appSecret = db('config')->where(['name' => 'appsearct'])->value('value');
        $tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appId . "&secret=" . $appSecret;
        $getArr = array();
        $tokenArr = json_decode($this->send_post($tokenUrl, $getArr, "GET"));
        $access_token = $tokenArr->access_token;
        return $access_token;
    }

    /**
     * 请求方法
     */
    protected function send_post($url, $post_data, $method = 'POST')
    {

        $postdata = http_build_query($post_data);

        $options = array(

            'http' => array(

                'method' => $method, //or GET

                'header' => 'Content-type:application/x-www-form-urlencoded',

                'content' => $postdata,

                'timeout' => 15 * 60 // 超时时间(单位:s)

            )

        );
        $context = stream_context_create($options);

        $result = file_get_contents($url, false, $context);

        return $result;
    }

这里自己踩过的坑总结一下.

1.小程序路径需要为存在的路径

2.data需要为json格式的数据

3.传入的消息需要注意长度限制,这个得具体看官方的限制.

新的一年.快乐哦~ 😎

 

 

 

0 0 vote
Article Rating
Subscribe
提醒
guest
0 评论
Inline Feedbacks
View all comments