发送微信模板消息

class Wechat_model extends CI_Model {

    public function __construct() {
        parent::__construct();
        $this->appid = 'wxe5df2d864b88ea30';
        $this->secret = '18f5f2800eb418376c0157cc230d9650';
    }
    /**
    *发送微信模板消息
    */
    public function tplMsg($uid,$content,$link,$type){
        $url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token='.$this->_get_access_token();
        $openid = '';
        $openid = $this->db->select('openid')->get_where('imt_1_weixin_user',array('uid' => $uid))->row_array()['openid'];
        if($openid ==''){
            MT_log('模板消息发送失败 '.$uid.' openid 不存在');
            MT_log($this->db->last_query());
        }
        $data ='';
        switch ($type) {
            case 1:
                $tpl = '3St_aO7YnULW0OXpjAus38zrJRjV0EA8H06ckpht3AA'; 
                    $data = json_encode(array(
                                'touser' => $openid,
                                'template_id' => $tpl,
                                'url' => $link,
                                'data' => array(
                                    'first' => array(
                                        'value' => $content[0],
                                        'color' => '#000000',
                                    ),
                                    'keyword1' => array(
                                        'value' => $content[1],
                                        'color' => '#666666',
                                    ),
                                    'keyword2' => array(
                                        'value' => $content[2],
                                        'color' => '#666666',
                                    ),
                                    'keyword3' => array(
                                        'value' => $content[3],
                                        'color' => '#ff8d2d',
                                    ),
                                    'keyword4' => array(
                                        'value' => $content[4],
                                        'color' => '#00e267',
                                    ),
                                )
                            ));
                break;
            case 2:
                $tpl = 'tDNfP9rz2vbf2Bh1qaYgADtZKi4aEIRpP1GMdYaXtf8';
                $data = json_encode(array(
                                'touser' => $openid,
                                'template_id' => $tpl,
                                'url' => $link,
                                'data' => array(
                                    'first' => array(
                                        'value' => $content[0],
                                        'color' => '#000000',
                                    ),
                                    'keyword1' => array(
                                        'value' => $content[1],
                                        'color' => '#666666',
                                    ),
                                    'keyword2' => array(
                                        'value' => $content[2],
                                        'color' => '#666666',
                                    ),
                                    'keyword3' => array(
                                        'value' => $content[3],
                                        'color' => '#ff8d2d',
                                    ),
                                    'keyword4' => array(
                                        'value' => $content[4],
                                        'color' => '#00e267',
                                    ),
                                    'keyword5' => array(
                                        'value' => $content[5],
                                        'color' => '#666666',
                                    ),
                                    'remark' => array(
                                        'value' => $content[6],
                                        'color' => '#666666',
                                    ),
                                )
                            ));
                break;
            default:
                // code...
                break;
        }
        $res = json_decode($this->_post($url,$data), true);
        if(!$res['errcode']){
            return 1;
        } else {
            MT_log('uid:'.$uid.'|'.dr_array2string($content).'|'.$type.'|'.$res['errcode'].'|'.$res['errmsg']);
            return 0;
        }
    }
    protected function _post($url, $params) {
        if (function_exists('curl_init')) { // curl方式
            $oCurl = curl_init();
            if (stripos($url, 'https://') !== FALSE) {
                curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
                curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
            }
            $string = $params;
            if (is_array($params)) {
                $aPOST = array();
                foreach ($params as $key => $val){
                    $aPOST[] = $key.'='.urlencode($val);
                }
                $string = join('&', $aPOST);
            }
            curl_setopt($oCurl, CURLOPT_URL, $url);
            curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($oCurl, CURLOPT_POST, TRUE);
            curl_setopt($oCurl, CURLOPT_POSTFIELDS, $string);
            $response = curl_exec($oCurl);
            curl_close($oCurl);
            return $response;
        } elseif (function_exists('stream_context_create')) { // php5.3以上
            $opts = array(
                'http' => array(
                    'method' => 'POST',
                    'header' => 'Content-type: application/x-www-form-urlencoded',
                    'content' => http_build_query($params),
                )
            );
            $_opts = stream_context_get_params(stream_context_get_default());
            $context = stream_context_create(array_merge_recursive($_opts['options'], $opts));
            return file_get_contents($url, false, $context);
        } else {
            return FALSE;
        }
    }
    // 获取公众号access token
    protected function _get_access_token() {
        $file = WEBPATH.'cache/weixin/access_token.txt';
        $data = @json_decode(@file_get_contents($file), true);
        if (isset($data['time']) && $data['time'] > SYS_TIME && isset($data['access_token']) && $data['access_token']) {
            return $data['access_token'];
        }
        $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->appid.'&secret='.$this->secret;
        $data = json_decode(@dr_catcher_data($url), true);
        if (!$data) {
            @unlink($name);
            MT_log('获取access_token失败,请检查服务器是否支持远程链接');
        }
        if (isset($data['errmsg']) && $data['errmsg']) {
            @unlink($name);
            MT_log('错误代码('.$data['errcode'].'):'.$data['errmsg']);
        }
        $data['time'] = SYS_TIME + $data['expires_in'];
        @file_put_contents($file, json_encode($data));
        return $data['access_token'];
    }
}


有帮助(- 没帮助(-