You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.1 KiB
74 lines
2.1 KiB
<?php |
|
/** |
|
* @copyright ©2018 浙江禾匠信息科技 |
|
* @author Lu Wei |
|
* @link http://www.zjhejiang.com/ |
|
* Created by IntelliJ IDEA |
|
* Date Time: 2018/7/3 16:26 |
|
*/ |
|
|
|
|
|
namespace app\models\tplmsg; |
|
|
|
use Curl\Curl; |
|
use luweiss\wechat\Wechat; |
|
|
|
class WechatTemplateMessageSender |
|
{ |
|
/** @var Wechat $wechat */ |
|
private $wechat; |
|
private $curl; |
|
|
|
public function __construct($wechat) |
|
{ |
|
$this->wechat = $wechat; |
|
} |
|
|
|
public function send($data) |
|
{ |
|
$access_token = $this->wechat->getAccessToken(); |
|
$api = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={$access_token}"; |
|
$data = json_encode($data, JSON_UNESCAPED_UNICODE); |
|
$raw = $this->httpPost($api, $data); |
|
$res = json_decode($raw, true); |
|
if (!$res) { |
|
throw new TplmsgException("模板消息发送失败,服务器返回内容出错,服务器返回内容:{$raw}"); |
|
} |
|
if ($res['errcode'] && $res['errcode'] !== 0) { |
|
throw new TplmsgException("模板消息发送失败,错误信息:code={$res['errcode']},msg={$res['errmsg']},data={$data}"); |
|
} |
|
return true; |
|
} |
|
|
|
|
|
private function httpGet($url, $data = null) |
|
{ |
|
$curl = $this->getCurl(); |
|
$curl->get($url, $data); |
|
if ($curl->error_code) { |
|
throw new TplmsgException("模板消息发送失败,网络出错:{$curl->error_message}"); |
|
} |
|
return $curl->response; |
|
} |
|
|
|
private function httpPost($url, $data = null) |
|
{ |
|
$curl = $this->getCurl(); |
|
$curl->post($url, $data); |
|
if ($curl->error_code) { |
|
throw new TplmsgException("模板消息发送失败,网络出错:{$curl->error_message}"); |
|
} |
|
return $curl->response; |
|
} |
|
|
|
private function getCurl() |
|
{ |
|
if ($this->curl) { |
|
return $this->curl; |
|
} |
|
$this->curl = new Curl(); |
|
$this->curl->setOpt(CURLOPT_SSL_VERIFYPEER, false); |
|
$this->curl->setOpt(CURLOPT_SSL_VERIFYHOST, false); |
|
return $this->curl; |
|
} |
|
}
|
|
|