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

原文链接: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

终于到代码了

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

token = $this->getAccessToken();
    }

    /**
     * 发送模板消息
     * @Author   wanghongbin
     * @Email    [email protected]
     * @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    [email protected]
     * @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    [email protected]
     * @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    [email protected]
     * @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微信模板消息发送——小程序)