美文网首页微信公众号开发
PHP微信模板消息发送——小程序

PHP微信模板消息发送——小程序

作者: 是彬不是杉 | 来源:发表于2018-11-26 10:28 被阅读0次

    原文链接:https://www.whongbin.cn/index/article/detail/id/47.html

    前言

    1: 官方文档
    https://developers.weixin.qq.com/miniprogram/dev/api/notice.html#发送模板消息

    总的来说,小程序发送模板消息和公众号发送模板消息区别不是很大

    2: 小程序发送模板消息:
    - 获取access_token并存储以备再次使用
    - 小程序端获取发送必要的formID(submit提交事件)或 prepay_id(支付事件)
    - 拼装模板消息数据
    - 调用接口发送模板消息

    吐槽一下

    微信小程序的机制是这样的
    formid 只能通过移动端进行获取(手机,iPad);
    每获取到一个 formid **只能使用一次**(一个formid只能发送一条模板消息);
    发起form表单提交事件 ==> 获取 form_id 和 发起人openid ==> php后台处理拼装模板消息 ==> 发送给发起人;
    上边说的意思是:A获取的formid只能用来给自己发送模板消息,不能用来给B发送模板消息;

    解决方案

    在A触发表单提交事件时,将本次获取到的formid保存到A提交的表单内容中,反正就是与A本次提交的数据绑定死(死结,除了自己,谁都不给用),在B触发对A的某事件时,需要发送模板消息了,这时把A之前绑定的formid拿出来用,还是给A自己用

    for example:
    A提交了请假申请(通过表单提交申请内容),B审核,审核完成后,把审核结果通过模板消息发送给A

    终于到代码了

    我不是前端妹子,小程序的代码就不放了,自己找找吧

    <?php
    namespace Jykj\\Template\\Weixin;
    /**
     * 小程序模板消息发送
     * 微信规定:不能直接在小程序调用,只能在后台发起
     */
    class WxSendTemplate {
        private $token ='''';
        private $appid = ''******************'';
        private $appsecret = ''********************************'';
        private $templateid = ''*******************************************'';
        private $SEND_TEMPLATE_URL = ''https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=##TOKEN##'';
        private $GET_ACCESSTOKEN_URL = ''https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=##APPID##&secret=##APPSECRET##'';
    
        /**
         * 构造函数,获取access_token
         * @Author   wanghongbin
         * @Email    wanghongbin@ngoos.org
         * @DateTime 2018-07-06
         */
        public function __construct() {
            $this->token = $this->getAccessToken();
        }
    
        /**
         * 发送模板消息
         * @Author   wanghongbin
         * @Email    wanghongbin@ngoos.org
         * @DateTime 2018-07-06
         * @param    array
         * @return   [type]
         */
        public function sendTemplateData($data = array()) {
            $options = array(
                ''http'' => array(
                    ''method''  => ''POST'',
                    ''header''  => ''Content-type:application/json'',//header 需要设置为 JSON
                    ''content'' => $this->getTemplatePostData($data),
                    ''timeout'' => 60//超时时间
                )
            );
            $url = str_replace("##TOKEN##",$this->token,$this->SEND_TEMPLATE_URL);        
            $context = stream_context_create($options);
            $result = file_get_contents($url, false, $context);
    
            return $result;
        }
    
    
        /**
         * 获取模板消息
         * @Author   wanghongbin
         * @Email    wanghongbin@ngoos.org
         * @DateTime 2018-07-06
         * @param    array
         * @return   [type]
         */
        private function getTemplatePostData($data=array()){
            $post_data = array (
                "touser"        => $data[''openid''],//用户的 openID,可用过 wx.getUserInfo 获取
                "template_id"   => $this->templateid,//小程序后台申请到的模板编号
                "page"          => $data[''pageuri''],//点击模板消息后跳转到的页面,可以传递参数
                "form_id"       => $data[''formid''],//第一步里获取到的 formID
                "data"          => array(
                    ''keyword1''  => array( "value" => $data[''status''],"color"=>"green"),
                    ''keyword2''  => array( "value" => $data[''shopername'']),
                    ''keyword3''  => array( "value" => $data[''telephone'']),
                    ''keyword4''  => array( "value" => $data[''ordertime''])
                ),
                "emphasis_keyword" => "keyword1.DATA"
            );
            //将数组编码为 JSON
            return \\json_encode($post_data, true);
        }
    
        /**
         * 获取AccessToken
         * @Author   wanghongbin
         * @Email    wanghongbin@ngoos.org
         * @DateTime 2018-07-06
         * @return   [type]
         */
        private function getAccessToken () {  
            $url = str_replace("##APPID##",$this->appid,$this->GET_ACCESSTOKEN_URL);        
            $url = str_replace("##APPSECRET##",$this->appsecret,$url);        
            $html = file_get_contents($url);
            $output = json_decode($html, true);
            $access_token = $output[''access_token''];
    
            return $access_token;
        }   
    
        /**
         * 获取所有的模板
         * @Author   wanghongbin
         * @Email    wanghongbin@ngoos.org
         * @DateTime 2018-07-06
         * @return   [type]
         */
        public function get_all_private_template()
        {
            $url = "https://api.weixin.qq.com/cgi-bin/wxopen/template/list?access_token=".$this->token;
            $res = file_get_contents($url);
            return json_decode($res,true);
        }
    
    }
    

    效果图

    https://preview.ibb.co/hh1Wey/image.png

    相关文章

      网友评论

        本文标题:PHP微信模板消息发送——小程序

        本文链接:https://www.haomeiwen.com/subject/rrbvqqtx.html