企业微信,现在来讲应该是一个很常见了的功能了。下面,我就以tp6来给大讲下接入企业微信的小demo吧。
首先,在common.php的公共方法里面写入下面两段代码
function sendRequest($url){ //用curl请求获取access_token
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output, true);
}
function send($data,$access_token){ //企业微信各接口的接入方法,比如(文本、卡片等等)
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token='. $access_token);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
return curl_exec($ch);
}
2、在控制器中,写入以下代码
(1)、首先,需要获取基础信息,(包括用户ID,response_code(response_code用于卡片的接口的参数)等)。而对于获取这些数据,我们可以在前端去做处理。
(function(){
$.ajax({
url:'getBaseData',
data:{url:'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token='}, //这个地址是固定写法
dataType:'json',
success:function(e){
//这儿就把返回的数据,把需要的保存起来
console.log(e)
},
error:function(err){
console.error(err)
}
})
});
(2)、在后端的接口中,我们就需要对刚前端的ajax请求做处理,并返回数据给他
public function getBaseData(){
$url = input('post.url') . $this->access_token;
$res = sendRequest($url);
return json_decode($res);
}
//在控制器中的代码,直接运行 index的方法即可。下面的代码逻辑也相对比较简单【这个控制器的整个php代码】
namespace app\php\controller\weixin;
use app\BaseController;
use think\facade\Cache;
use think\facade\Db;
class Index extends BaseController{
//其实,像corpid appId corpsecret 这些都是可以写入数据库,或者写在在公共的弄成一个常量也可以。
//同时,获取access_token的方法也可以独立封装成一个对象,在这儿我就直接拿来用了。
private $corpid = '';
private $appId = '';
private $corpsecret = '';
private $access_token = '';
public function __construct(){
$accessTokenData = Cache::get('accessTokenData');//获取缓存里面access_token的内容。因为我是把access_token存入缓存中的(它的有效期是2个小时)
if($accessTokenData['errcode'] != 0 || $accessTokenData == null){//判断有没有拿到有效的值,如果没有拿到,那它就走一次获取access_token的方法。
$this->getAccessToken(); //获取access_token的方法
}
$access_token = $accessTokenData['access_token'];
$this->access_token = $access_token;
}
public function getAccessToken(){
$url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid='. $this->corpid .'&corpsecret=' . $this->corpsecret;
$accessTokenData = sendRequest($url);
Cache::set('accessTokenData',$accessTokenData,7200);
}
public function index(){ //这儿是对接每个功能的。当然,这个也可以放到前端去弄。跟前面获取基础数据是一样的原理。
$access_token = $this->access_token;
$data = array(
'touser' => '@all',
'msgtype' => 'text',
'agentid' => null,//企业应用ID INT
'text' => array(
'content' => 'hello xiaobing'
),
'enable_id_trans' => 0,
'enable_duplicate_check' => 0,
'duplicate_check_interval' => 1800
);
$res = send(json_encode($data),$access_token); //send调用的是在公共函数里的方法,注意data需要转成json
var_dump($res);
}
public function getBaseData(){
$url = input('post.url') . $this->access_token;
$res = sendRequest($url);
return json_decode($res);
}
}