请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

亿仁网

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 412|回复: 0

定义模版消息发送方法类库的编写及POST数据发送

[复制链接]
  • TA的每日心情
    奋斗
    2019-3-14 22:24
  • 签到天数: 160 天

    [LV.7]常住居民III

    1074

    主题

    1139

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    18046
    发表于 2017-7-1 18:09:27 | 显示全部楼层 |阅读模式

    首先使用Thinkphp框架创建wxtools项目,然后在Application目录下创建Wechat模块,最后新增Controller、Lib和View等核心目录。因为需要获取OpenID等信息,所以在Lib下创建Wx目录并至少引入WxAuth网页授权处理类库。在Controller下需要创建AuthController.class.php网页授权回调控制器。

    数据库结构上,至少需要在db_member表中新增openid字段,以配合整个的微信网页授权流程。如果有其他的需要,可以继续对其进行结构扩展。

    首先在Lib/Wx下新增WxTpl.class.php接口消息处理类。获取access_token的代码如下:

    1. <?php
    2. class WxTpl
    3. {
    4.         private $access_token = null;

    5.         // 推送接口
    6.         private $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";

    7.         public function __construct($appid , $appsecret)
    8.         {
    9.                 if(!$appid || !$appsecret)
    10.                 {
    11.                         exit('Param Error!');
    12.                 }

    13.                 $this->getAccessTokenByAppInfo($appid ,$appsecret );
    14.         }

    15.         private function getAccessTokenByAppInfo($appid ,$appsecret)
    16.         {
    17.                 $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;
    18.                 $return = file_get_contents($url);
    19.                 $access_token_arr = json_decode($return , true);
    20.                 $this->access_token = $access_token_arr['access_token'];
    21.         }
    22. }
    复制代码

    然后,新增sendData()方法,使用PHPCURL进行POST数据发送:

    1.         private function sendData($data)
    2.         {
    3.                 $ch = curl_init();
    4.                 curl_setopt($ch, CURLOPT_URL, $this->url.$this->access_token);
    5.                 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    6.                 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    7.                 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    8.                 curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
    9.                 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    10.                 curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
    11.                 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    12.                 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    13.                 $return = curl_exec($ch);
    14.                 if (curl_errno($ch)) {
    15.                         return curl_error($ch);
    16.                 }

    17.                 curl_close($ch);
    18.                 return $return;
    19.         }
    复制代码

    其中请求的地址URL拼接如下:

    curl_setopt($ch, CURLOPT_URL, $this->url.$this->access_token);

    最后定义模版消息发送方法pushTpl(),完成处理类库的编写。定义代码如下:

    1.         // 创建菜单
    2.         public function pushTpl($open_id , $tpl_id , $url = '', $data = array())
    3.         {
    4.                 if(!$open_id || !$tpl_id)
    5.                 {
    6.                         return false;
    7.                 }

    8.                 $push_data['touser'] = $open_id;
    9.                 $push_data['template_id'] = $tpl_id;
    10.                 $push_data['url'] = $url;
    11.                 $push_data['topcolor'] = "#FF0000";
    12.                 $push_data['data'] = $data;

    13.                 return $this->sendData(json_encode($push_data));
    14.         }
    复制代码

    注意:获取access_token的方法没有进行缓存操作,开发者可以选择使用文件或者数据进行缓存,此处直接获取仅为了方便演示,请勿使用到实际项目中。


    造物之前,必先造人。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|亿仁网 ( 粤ICP备16098737  

    GMT+8, 2021-3-8 11:21 , Processed in 0.079228 second(s), 26 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表