微信小程序发送模板消息,php发送模板消息

版权声明:本文为博主原创文章,未经博主允许不得转载。如需开发微信小程序可加微信: 13977284413 https://blog.csdn.net/qq_35713752/article/details/86093413

formId 在安卓系统是纯数字,在IOS系统是一串加密字符,如图:

发送模板消息(服务通知)效果图:

前端

wxml


<form bindsubmit="submitForm" report-submit >
  <button form-type="submit">发送</button>
</form>

js

  submitForm(e){
    console.log(e.detail.formId);
    var formId = e.detail.formId == 'the formId is a mock one' ? 1546946903765 : e.detail.formId;
    util.request('http://localhost/sendTemplateMessage.php', 'get', { formId}, '', function (res) {
      console.log('sendTemplateMessage:',res)
    })
  },

后端php

<?php
 	header("Content-Type:text/html;charset=utf8"); 
    header("Access-Control-Allow-Origin: *"); //解决跨域
    header('Access-Control-Allow-Methods:GET');// 响应类型  
    header('Access-Control-Allow-Headers:*'); // 响应头设置 
    $link=mysql_connect("localhost","root","root"); 
    mysql_select_db("6677onechat", $link); //选择数据库
    mysql_query("SET NAMES utf8");//解决中文乱码问题
    
    //$openid = $_GET['openid'];
    $form_id =getFormId();
	getModel($form_id);
	
	/* https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=' + that.data.access_token; 
     * 微信规定:不能直接在小程序调用,只能在后台发起
     *  -xzz0704 
     */
    function getModel($form_id){
                $access_token = getWxAccessToken();
				$navopenid = $_GET['navopenid'];
				$template_id='dd0ws5CfJdjAyNUNDIf9jRa-xZprclpmiJdeqlWDAOU';
                $value = array(
                    "keyword1"=>array(
                    "value"=>$_GET['name'],
                     //"value"=>'woshihaoren',
                    "color"=>"#4a4a4a"
                    ),
                    "keyword2"=>array(
                        "value"=>$_GET['txt'],
                        "color"=>"#9b9b9b"
                    )
                );
                
                $url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='.$access_token;
                $dd = array();
                $dd['touser']=$navopenid;
                $dd['template_id']=$template_id;
                $dd['page']='pages/index/index';  //点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,该字段不填则模板无跳转。
                $dd['form_id']=$form_id;
                
                $dd['data']=$value;                        //模板内容,不填则下发空模板
                
                $dd['color']='';                        //模板内容字体的颜色,不填默认黑色
                //$dd['color']='#ccc';
                $dd['emphasis_keyword']='';    //模板需要放大的关键词,不填则默认无放大
                //$dd['emphasis_keyword']='keyword1.DATA';
                
                //$send = json_encode($dd);   //二维数组转换成json对象
                
                /* curl_post()进行POST方式调用api: api.weixin.qq.com*/
                $result = https_curl_json($url,$dd,'json');
                if($result){
                    echo json_encode(array('state'=>5,'msg'=>$result));
                }else{
                    echo json_encode(array('state'=>5,'msg'=>$result));
                }
    }
    
    //获取access_token
	function getWxAccessToken(){
	    $appid='wxd51fee07a27977f2';//填你的appid
	    $appsecret='f9207c1e65ca6c7f0450822bb0a46f19';//填你的appsecret
	        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
	        $access_token = makeRequest($url);
	        $access_token = json_decode($access_token['result'],true);
	        return $access_token['access_token'];
	}
    //获取formid
    function getFormId(){
    	$navopenid = $_GET['navopenid'];
		$result = mysql_query("SELECT * FROM chatuser");
		$form_id;
		while($row = mysql_fetch_array($result))
		  {
		  	if($row['openid']== $navopenid){
		  		$form_id =$row['fromId'];
		  	}
		  }
		return $form_id;
		
    }
    
    /* 发送json格式的数据,到api接口 -xzz0704  */
    function https_curl_json($url,$data,$type){
        if($type=='json'){//json $_POST=json_decode(file_get_contents('php://input'), TRUE);
            $headers = array("Content-type: application/json;charset=UTF-8","Accept: application/json","Cache-Control: no-cache", "Pragma: no-cache");
            $data=json_encode($data);
        }
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS,$data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers );
        $output = curl_exec($curl);
        if (curl_errno($curl)) {
            echo 'Errno'.curl_error($curl);//捕抓异常
        }
        curl_close($curl);
        return $output;
    }
    
	/**
	 * 发起http请求
	 * @param string $url 访问路径
	 * @param array $params 参数,该数组多于1个,表示为POST
	 * @param int $expire 请求超时时间
	 * @param array $extend 请求伪造包头参数
	 * @param string $hostIp HOST的地址
	 * @return array    返回的为一个请求状态,一个内容
	 */
	function makeRequest($url, $params = array(), $expire = 0, $extend = array(), $hostIp = '')
	{
	    if (empty($url)) {
	        return array('code' => '100');
	    }
	 
	    $_curl = curl_init();
	    $_header = array(
	        'Accept-Language: zh-CN',
	        'Connection: Keep-Alive',
	        'Cache-Control: no-cache'
	    );
	    // 方便直接访问要设置host的地址
	    if (!empty($hostIp)) {
	        $urlInfo = parse_url($url);
	        if (empty($urlInfo['host'])) {
	            $urlInfo['host'] = substr(DOMAIN, 7, -1);
	            $url = "http://{$hostIp}{$url}";
	        } else {
	            $url = str_replace($urlInfo['host'], $hostIp, $url);
	        }
	        $_header[] = "Host: {$urlInfo['host']}";
	    }
	 
	    // 只要第二个参数传了值之后,就是POST的
	    if (!empty($params)) {
	        curl_setopt($_curl, CURLOPT_POSTFIELDS, http_build_query($params));
	        curl_setopt($_curl, CURLOPT_POST, true);
	    }
	 
	    if (substr($url, 0, 8) == 'https://') {
	        curl_setopt($_curl, CURLOPT_SSL_VERIFYPEER, FALSE);
	        curl_setopt($_curl, CURLOPT_SSL_VERIFYHOST, FALSE);
	    }
	    curl_setopt($_curl, CURLOPT_URL, $url);
	    curl_setopt($_curl, CURLOPT_RETURNTRANSFER, true);
	    curl_setopt($_curl, CURLOPT_USERAGENT, 'API PHP CURL');
	    curl_setopt($_curl, CURLOPT_HTTPHEADER, $_header);
	 
	    if ($expire > 0) {
	        curl_setopt($_curl, CURLOPT_TIMEOUT, $expire); // 处理超时时间
	        curl_setopt($_curl, CURLOPT_CONNECTTIMEOUT, $expire); // 建立连接超时时间
	    }
	 
	    // 额外的配置
	    if (!empty($extend)) {
	        curl_setopt_array($_curl, $extend);
	    }
	 
	    $result['result'] = curl_exec($_curl);
	    $result['code'] = curl_getinfo($_curl, CURLINFO_HTTP_CODE);
	    $result['info'] = curl_getinfo($_curl);
	    if ($result['result'] === false) {
	        $result['result'] = curl_error($_curl);
	        $result['code'] = -curl_errno($_curl);
	    }
	 
	    curl_close($_curl);
	    return $result;
	}
?>

番外笔记,可以忽略

php,  查找表里面该openid 的formid,前端传发送信息的昵称和信息,然后通过模板消息发送给对方。

<?php
 	header("Content-Type:text/html;charset=utf8"); 
    header("Access-Control-Allow-Origin: *"); //解决跨域
    header('Access-Control-Allow-Methods:GET');// 响应类型  
    header('Access-Control-Allow-Headers:*'); // 响应头设置 
    $link=mysql_connect("localhost","root","root"); 
    mysql_select_db("6677onechat", $link); //选择数据库
    mysql_query("SET NAMES utf8");//解决中文乱码问题
    
    //$openid = $_GET['openid'];
    $form_id =getFormId();
	getModel($form_id);
	
	/* https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=' + that.data.access_token; 
     * 微信规定:不能直接在小程序调用,只能在后台发起
     *  -xzz0704 
     */
    function getModel($form_id=''){
              
                $access_token = getWxAccessToken();
				$openid = 'oZ5S45bCh2a';
				$template_id='dd0ws5CfJdjAyNUNewetwewer3asd-AOU';
				//$form_id=$_GET['formId'];
                $value = array(
                    "keyword1"=>array(
                    "value"=>$_GET['name'],
                     //"value"=>'woshihaoren',
                    "color"=>"#4a4a4a"
                    ),
                    "keyword2"=>array(
                        "value"=>$_GET['txt'],
                        "color"=>"#9b9b9b"
                    )
                );
                
                $url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='.$access_token;
                $dd = array();
                $dd['touser']=$openid;
                $dd['template_id']=$template_id;
                //$dd['page']=$page;  //点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,该字段不填则模板无跳转。
                $dd['form_id']=$form_id;
                
                $dd['data']=$value;                        //模板内容,不填则下发空模板
                
                $dd['color']='';                        //模板内容字体的颜色,不填默认黑色
                //$dd['color']='#ccc';
                $dd['emphasis_keyword']='';    //模板需要放大的关键词,不填则默认无放大
                //$dd['emphasis_keyword']='keyword1.DATA';
                
                //$send = json_encode($dd);   //二维数组转换成json对象
                
                /* curl_post()进行POST方式调用api: api.weixin.qq.com*/
                $result = https_curl_json($url,$dd,'json');
                if($result){
                    echo json_encode(array('state'=>5,'msg'=>$result));
                }else{
                    echo json_encode(array('state'=>5,'msg'=>$result));
                }
    }
    
    //获取access_token
	function getWxAccessToken(){
	    $appid='wxd51fee07a27977f2';//填你的appid
	    $appsecret='f9207c1e65ca6c7f0450822bb0a46f19';//填你的appsecret
	        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
	        $access_token = makeRequest($url);
	        $access_token = json_decode($access_token['result'],true);
	        return $access_token['access_token'];
	}
    //获取formid
    function getFormId(){
    	$navopenid = $_GET['navopenid'];
		$result = mysql_query("SELECT * FROM chatuser");
		$form_id;
		while($row = mysql_fetch_array($result))
		  {
		  	if($row['openid']== $navopenid){
		  		$form_id =$row['fromId'];
		  	}
		  }
		return $form_id;
		
    }
    
    /* 发送json格式的数据,到api接口 -xzz0704  */
    function https_curl_json($url,$data,$type){
        if($type=='json'){//json $_POST=json_decode(file_get_contents('php://input'), TRUE);
            $headers = array("Content-type: application/json;charset=UTF-8","Accept: application/json","Cache-Control: no-cache", "Pragma: no-cache");
            $data=json_encode($data);
        }
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS,$data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers );
        $output = curl_exec($curl);
        if (curl_errno($curl)) {
            echo 'Errno'.curl_error($curl);//捕抓异常
        }
        curl_close($curl);
        return $output;
    }
    
	/**
	 * 发起http请求
	 * @param string $url 访问路径
	 * @param array $params 参数,该数组多于1个,表示为POST
	 * @param int $expire 请求超时时间
	 * @param array $extend 请求伪造包头参数
	 * @param string $hostIp HOST的地址
	 * @return array    返回的为一个请求状态,一个内容
	 */
	function makeRequest($url, $params = array(), $expire = 0, $extend = array(), $hostIp = '')
	{
	    if (empty($url)) {
	        return array('code' => '100');
	    }
	 
	    $_curl = curl_init();
	    $_header = array(
	        'Accept-Language: zh-CN',
	        'Connection: Keep-Alive',
	        'Cache-Control: no-cache'
	    );
	    // 方便直接访问要设置host的地址
	    if (!empty($hostIp)) {
	        $urlInfo = parse_url($url);
	        if (empty($urlInfo['host'])) {
	            $urlInfo['host'] = substr(DOMAIN, 7, -1);
	            $url = "http://{$hostIp}{$url}";
	        } else {
	            $url = str_replace($urlInfo['host'], $hostIp, $url);
	        }
	        $_header[] = "Host: {$urlInfo['host']}";
	    }
	 
	    // 只要第二个参数传了值之后,就是POST的
	    if (!empty($params)) {
	        curl_setopt($_curl, CURLOPT_POSTFIELDS, http_build_query($params));
	        curl_setopt($_curl, CURLOPT_POST, true);
	    }
	 
	    if (substr($url, 0, 8) == 'https://') {
	        curl_setopt($_curl, CURLOPT_SSL_VERIFYPEER, FALSE);
	        curl_setopt($_curl, CURLOPT_SSL_VERIFYHOST, FALSE);
	    }
	    curl_setopt($_curl, CURLOPT_URL, $url);
	    curl_setopt($_curl, CURLOPT_RETURNTRANSFER, true);
	    curl_setopt($_curl, CURLOPT_USERAGENT, 'API PHP CURL');
	    curl_setopt($_curl, CURLOPT_HTTPHEADER, $_header);
	 
	    if ($expire > 0) {
	        curl_setopt($_curl, CURLOPT_TIMEOUT, $expire); // 处理超时时间
	        curl_setopt($_curl, CURLOPT_CONNECTTIMEOUT, $expire); // 建立连接超时时间
	    }
	 
	    // 额外的配置
	    if (!empty($extend)) {
	        curl_setopt_array($_curl, $extend);
	    }
	 
	    $result['result'] = curl_exec($_curl);
	    $result['code'] = curl_getinfo($_curl, CURLINFO_HTTP_CODE);
	    $result['info'] = curl_getinfo($_curl);
	    if ($result['result'] === false) {
	        $result['result'] = curl_error($_curl);
	        $result['code'] = -curl_errno($_curl);
	    }
	 
	    curl_close($_curl);
	    return $result;
	}
?>

发送信息时调用发送模板消息

navopenid  对方的openid  

  // 发送模板消息
  sendmsg() {
    var name = wx.getStorageSync('userInfo').nickName;
    var txt = this.data.inputValue ? this.data.inputValue:'你好';
    util.request(app.onechatRul + '/sendTemplateMessage.php', 'GET', {
      navopenid,
      openid: wx.getStorageSync('openid'),
      name,
      txt
    }, '', function(res) {
      console.log('sendTemplateMessage:', res)
    })
  },

猜你喜欢

转载自blog.csdn.net/qq_35713752/article/details/86093413