微信公众号-模板消息通用接口封装
近期做了微信公众号的消息通知,微信方面模板越来越规范化,跟测试的平台相差甚远(fuck,谁让人家要办硬)。
话不多说,进入代码
class OfficialSystem
{
public $tmplateConf;
private $accessToken; //微信accessToken
public function __construct( $tmplateConf ,$accessToken ){
$this->tmplateConf = $tmplateConf;
$this->accessToken = $accessToken;
}
/**
* 返回结果
* @param $error bool 1 代表错误,0 无错误
* @parame $msg string 返回信息
* @param $data Array 返回内容
* @param $isJson bool 1 返回json, 0 否
**/
public function returnResult( $error,$msg ,$data=[],$isJson=0 ){
$result = [
\'error\' => $error,
\'msg\' => $msg,
\'data\' => $data,
];
if( $isJson ){
echo json_encode($result);
exit();
}
return $result;
}
/**
* 发送消息
* @param $modelId sting 微信模板id
* @param $touser string 微信openid(公众号)
* @param $url string 跳转地址
* @param $miniPagepath string 小程序跳转路径
* @param $miniAppid string 小程序Appid
* @param $list Array 模板数据,如:[ [\'value\'=>\'您好,您有新的订单\',\'color\'=>\'blue\',...] ]
**/
public function Sendmsg( $modelId,$touser,$url,$miniPagepath,$miniAppid,$list=[] ){
if( empty($modelId) || empty($touser) || empty($list) ) $this->returnResult(1,\'参数缺失\');
$template_id = !empty( $this->tmplateConf[$modelId] ) ? $this->tmplateConf[$modelId]:$this->returnResult(1,\'模板错误\');
//模板消息内容 数组第一个作为标题,最后一个作为备注
$data = [];
foreach ($list as $k=>$v){
$key = $k==0 ? \'first\':"keyword".$k;
if( !isset( $list[$k+1] ) ) $key = \'remark\';
$data[$key] = [
\'value\' => $v[\'value\'],
\'color\' => !empty($v[\'color\'])? $v[\'color\']:\'#173177\',
];
}
$sends = $this->sendModelMsg($touser,$template_id,$url,$miniAppid,$miniPagepath,$data);
$this->returnResult(0,\'success\',$sends);
}
/**
* @param $touser 用户openid
* @param $template_id
* @param $url
* @param $miniAppid
* @param $miniPagepath 小程序跳转地址
* @param $data 模板数据
*/
public function sendModelMsg( $touser,$template_id,$url=\'\',$miniAppid=\'\',$miniPagepath=\'\',$data ){
$interfaceUrl = \'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=\'.$this->accessToken;
$params = [
\'touser\' => $touser,
\'template_id\' => $template_id,
\'url\' => $url,
\'miniprogram\' => [ \'appid\'=>$miniAppid,\'path\'=>$miniPagepath ] ,
\'data\' => $data,
];
$sends = $this->httpPost($interfaceUrl,json_encode($params));
$sends = json_decode($sends,1);
if( $sends&&$sends[\'errmsg\']!=\'ok\' ){
$this->returnResult(1,\'消息发送失败\',$sends);
}
return $sends;
}
/**
* 获取用户信息
* @param $openid openid
* @return mixed
*/
public function getUserInfo( $openid=\'\' ){
$interfaceUrl = \'https://api.weixin.qq.com/cgi-bin/user/info?access_token=\'.$this->accessToken.\'&openid=\'.$openid;
$info = $this->httpGet( $interfaceUrl );
$result = json_decode($info,1);
return $result;
}
/**
* @param $touser
* @param $msgtype
* @param $msgContent
*/
public function sendCustomMsg( $touser,$msgtype,$msgContent){
// $params = [];
// $params[\'touser\'] = $touser;
// $params[\'msgtype\'] = $msgtype;
// $params["$msgtype"] = $msgContent;
// $params = json_encode($params);
$params = \'{"touser":"\'.$touser.\'","msgtype":"\'.$msgtype.\'","text":{\'.$msgContent.\'}}\';
$interfaceUrl = \'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=\'.$this->accessToken;
$sends = $this->httpPost($interfaceUrl,$params);//var_dump($params,json_encode($params),$sends);die;
$sends = json_decode($sends,1);
return $sends;
}
private function httpGet($url) {
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/x-www-form-urlencoded",
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;die;
} else {
return $response;
}
}
private function httpPost($url,$param){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => $param,
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/json",
\'Content-Length:\' . strlen($param)
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
return "cURL Error #:" . $err;
} else {
return $response;
}
}
调用事例:
$tmplateConf = [
\'1\' => \'mnscOp2RHpQtDCt7OpZBLoDTU2fjJ_W75_Mat4rnfxM\', //订货通知模板
\'2\' => \'DL4EAD47KT1tggbL2OR8iRAYLORI64V4YEM8mjQfSWU\', //入库通知模板
];
$accessToken = \'o9BuWjkDBvLGV_nch9wPU_-KRp7M\';
$OfficialSystem = new OfficialSystem($tmplateConf,$accessToken);
//消息内容
$list = [
[\'value\'=>\'您好,您有新的订单\',\'color\'=>\'blue\'],
[\'value\'=>\'P201809010001\',\'color\'=>\'\'],
[\'value\'=>\'服务中心店\',\'color\'=>\'\'],
[\'value\'=>\'2018-06-01 10:30:30\',\'color\'=>\'\'],
[\'value\'=>\'点击进入详情\',\'color\'=>\'\'],
];
$modelId = 1;
$touser = \'o9BuWjkDBvLGV_nch9wPU_-KRp7M\';
$url = \'http://www.cnblogs.com/followyou\';
$sends = Sendmsg( $modelId,$touser,$url,$miniPagepath=\'\',$miniAppid=\'\',$list);
var_dump($sends);
成功返回:
"errcode": "0",
"errmsg": "ok",
"msgid": "325381129559375872"
仅供参考,代码也就这样哈!