PHP之 "微信模板消息推送" 的相关代码

温馨提示:

微信模板消息推送,得先去微信端,设置模板配置,会生成相应的消息模板id,这个是一串字符,需连同参数数据,传给微信端,切记!~

第一部分:主体部分代码,负责业务模块,准备微信端所需参数

/**
 * 用户订单完成后在微信端推送【订单完成】相关信息
 * @param int $orderid 订单id
 * @return mixed
 */
public function order_complete_wx_notice($orderid)
{
    //$this->write_log(['order_cmp'=>1,'$orderid'=>$orderid]);
    if($orderid){
        // 通过orderid获取模板展示的相关信息
        $order_info = $this->get_template_info($orderid, 3);
        //$this->write_log(['order_cmp'=>2,'order_info'=>$order_info]);
        if($order_info){
            // 模板数据
            $request = [];
            $request['touser'] = $order_info['openid'];
            $request['template_id'] = '84Muc5Er_gyddmU1sdfdXSssssdAvW93kI'; // 订单完成消息模板id
            $request['page'] = 'pages/near/index'; // 点击模板卡片跳转页面
            $request['form_id'] = $order_info['prepay_id']; // 本次支付的id
            $request['data'] = [
                'keyword1'=>['value'=>$order_info['course_name']], // 课程名称
                'keyword2'=>['value'=>$order_info['order_complete_time']], // 完成时间
                'keyword3'=>['value'=>$order_info['gym_name']], // 门店房名
                'keyword4'=>['value'=>$order_info['address']], // 门店地址
                'keyword5'=>['value'=>'已完成'], // 订单状态
                'keyword6'=>['value'=>'400-010-88888'], // 客服电话
                'keyword7'=>['value'=>'您的本次订单已完成,欢迎致电客服,提出宝贵意见哦!'], // 温馨提示
            ];
            //$request['emphasis_keyword'] = 'keyword5.DATA'; // 模板放大关键词
            //$this->write_log(['order_cmp'=>3,'request'=>$request]);
            // 发送数据
            $this->wx_show_template($request);
        }
    }
}

/**
 * 通过订单id获取模板展示的信息
 * @param int $id 订单id($type=2) || 订单id($type=3 or $type=1)
 * @param int $type 2,支付成功;3,订单完成。
 * @return array
 */
public function get_template_info($id, $type)
{
    if($id && $type){
        $this->load->dao('order_dao');
        return $this->order_dao->get_template_info($id, $type);
    }
}

第二部分:负责将准备好的数据传输到微信端,微信再给用户微信推送模板消息

/**
 * 发送数据到微信端,显示模板界面
 * @param array $request
 */
public function wx_show_template($request)
{
    // 获取 redis中的 redis_access_token 值
    $access_token = $this->get_redis_access_token();
    if(!$access_token){
        // 从微信端获取
        $access_token = $this->get_access_token();
        // 获取存入redis
        $this->load->library('dbredis');
        $this->dbredis->set('redis_access_token', $access_token);
    }
    if(!$access_token){
        exit('access_token有误!');
    }
    // 发送地址
    $url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='.$access_token;
    // 请求微信,微信端显示模板
    $this->curl_post_weixin($url, $request);
}

/**
 * cURL方式POST数据到微信
 * @param string $url 请求地址
 * @param array $data 发送数据
 */
public function curl_post_weixin($url, $data)
{
    if($url && count($data)){
        $headers = ['Content-Type:application/json'];
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // 关键点
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
        curl_exec($ch);
        curl_close($ch);
    }
}

/**
 * 获取access_token值
 * @return string $access_token
 */
public function get_access_token()
{
    $appConfig = [
        'app_id' => 'wxsdd9asdfghe5efc',
        'secret' => 'ec1879wiujhyytbdt786ddb7d29106'
    ];
    $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appConfig['app_id'].'&secret='.$appConfig['secret'];
    $ch = curl_init(); // 创建句柄
    curl_setopt($ch, CURLOPT_URL, $url); // 通过url获取数据
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 跳过证书验证
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是
    $output = json_decode(curl_exec($ch));
    $access_token = $output->access_token;
    curl_close($ch);
    return $access_token;
}

最后总结:

微信模板消息推送,关键的点,是先去微信端进行配置生成相应的模板,会生成模板id,然后,就是准备参数,通过curl函数对数据传送,微信端收到消息后,会根据openID,将消息推送给对应的用户的(手机)微信端!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信模板消息推送是一项非常实用的功能,可以在微信公众号中向用户推送各种信息。如果你想使用Java代码来实现微信模板消息推送,下面是一个例子: 首先,你需要获取微信公众号的access_token,这可以通过向微信服务器发送HTTP请求来实现。需要注意的是,access_token的有效时间为两个小时,过期后需要重新获取。 一旦你获得了access_token,你就可以使用下面的Java代码向用户推送模板消息: ``` public static void sendTemplateMessage(String accessToken, String openId, String templateId, String url, String jsonString) { String jsonMsg = "{" + "\"touser\":\"" + openId + "\"," + "\"template_id\":\"" + templateId + "\"," + "\"url\":\"" + url + "\"," + "\"data\":" + jsonString + "}"; String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken; String result = doPost(url, jsonMsg); System.out.println(result); } private static String doPost(String url, String data) { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url); StringEntity entity = new StringEntity(data, ContentType.APPLICATION_JSON); httpPost.setEntity(entity); try { CloseableHttpResponse response = httpClient.execute(httpPost); String result = EntityUtils.toString(response.getEntity(), "UTF-8"); return result; } catch (Exception e) { e.printStackTrace(); return ""; } } ``` 这段代码首先构造了一个JSON格式的字符串,通过HTTP POST请求将其发送给微信服务器。其中,accessToken是你获得的access_token,openId是需要接收消息的用户的OpenId,templateId是使用的模板的ID,url是用户点击消息时跳转的链接,jsonString是一个包含模板消息内容的JSON字符串。 总之,以上就是一个简单的微信模板消息推送Java源码,你可以参考它来实现类似的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值