下面是封装好的一个类库,可以直接拿去使用,传进access_token即可
<?php
class Lib_TemplateMessageClient
{
const API_LIBRARY_LIST = 'https://api.weixin.qq.com/cgi-bin/wxopen/template/library/list';
const API_LIBRARY_GET = 'https://api.weixin.qq.com/cgi-bin/wxopen/template/library/get';
const API_TEMPLATE_ADD = 'https://api.weixin.qq.com/cgi-bin/wxopen/template/add';
const API_TEMPLATE_DEL = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/del';
const API_TEMPLATE_SEND = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send';
const API_TEMPLATE_LIST = 'https://api.weixin.qq.com/cgi-bin/wxopen/template/list';
const API_SERVICE_MESSAGE = 'https://api.weixin.qq.com/cgi-bin/message/template/send';
protected $message = [
'touser' => '', // 用户的openid
'template_id' => '', // 模板id
'url' => '', // 跳转的小程序链接【具体说明可看小程序文档】
'data' => [], // 内容【具体说明看文档】
'form_id' => '', // 小程序推送需要到,公众号不需要
'miniprogram' => '', // 看文档
];
protected $required = ['touser', 'template_id'];
protected $accessToken = '';
public function __construct($accessToken = null)
{
$this->accessToken = $accessToken ? $accessToken : '';
}
/**
* 获取小程序模板库标题列表
* @param int $offset
* @param int $count
* @return mixed
*/
public function getLibraryList($offset, $count)
{
return $this->httpPost(self::API_LIBRARY_LIST, compact('offset', 'count'));
}
/**
* 获取模板库某个模板标题下关键词库
* @param string $id
* @return mixed
*/
public function get($id)
{
return $this->httpPost(self::API_LIBRARY_GET, compact('id'));
}
/**
* 组合模板并添加至帐号下的个人模板库
* @param string $id
* @param array $keyword
* @return mixed
*/
public function add($id, $keyword = array())
{
$params = [
'id' => $id,
'keyword_id_list' => $keyword,
];
return $this->httpPost(self::API_TEMPLATE_ADD, $params);
}
/**
* 删除帐号下的某个模板
* @param string $templateId
* @return mixed
*/
public function delete($templateId)
{
$params = [
'template_id' => $templateId,
];
return $this->httpPost(self::API_TEMPLATE_DEL, $params);
}
/**
* 获取帐号下已存在的模板列表
* @param int $offset
* @param int $count
* @return mixed
*/
public function getTemplates($offset, $count)
{
return $this->httpPost(self::API_TEMPLATE_LIST, compact('offset', 'count'));
}
/**
* 发送小程序模版消息
* @param array $data // 具体内容可看小程序或公众号模板
* @return mixed
*/
public function send($data = array())
{
$params = $this->formatMessage($data);
$this->restoreMessage();
return $this->httpPost(self::API_TEMPLATE_SEND, $params);
}
/**
* 发送公众号模版消息
* @param array $data // 具体内容可看小程序或公众号模板
* @return mixed
*/
public function sendServiceMessage($data = array())
{
$params = $this->formatMessage($data);
$this->restoreMessage();
return $this->httpPost(self::API_SERVICE_MESSAGE, $params);
}
protected function restoreMessage()
{
$this->message = (new ReflectionClass(__CLASS__))->getDefaultProperties()['message'];
}
protected function formatMessage($data = array())
{
$params = array_merge($this->message, $data);
foreach ($params as $key => $value) {
if (in_array($key, $this->required, true) && empty($value) && empty($this->message[$key])) {
throw new InvalidArgumentException(sprintf('Attribute "%s" can not be empty!', $key));
}
$params[$key] = empty($value) ? $this->message[$key] : $value;
}
$params['data'] = $this->formatData($params['data'] ? $params['data'] : array());
return $params;
}
protected function formatData($data = array())
{
$formatted = [];
foreach ($data as $key => $value) {
if (is_array($value)) {
if (isset($value['value'])) {
$formatted[$key] = $value;
continue;
}
if (count($value) >= 2) {
$value = [
'value' => $value[0],
'color' => $value[1],
];
}
} else {
$value = [
'value' => strval($value),
];
}
$formatted[$key] = $value;
}
return $formatted;
}
public function httpGet($url, $query = array())
{
$accessToken = [
'access_token' => $this->accessToken
];
$params = array_merge($query, $accessToken);
return App_Func::curl($url, $params, 'GET');
}
public function httpPost($url, $data = array())
{
$url = $url . '?access_token=' . $this->accessToken;
return App_Func::curlRaw($url, $data);
}
}
有帮助到的小伙伴动动你的小指点个关注点个赞 ~