鉴于之前在网上一直没有搜索到关于这块的内容,经过实际,特写此文章,仅供参考,如有错误,
敬请提出!
本次采用的 是一个开源的 微信 非官方 SDK(EasyWeChat),相关文档内容参考链接:
https://www.easywechat.com/docs/master
1.根据需要配置微信信息
public function __construct()
{
$this->options = [
'debug' => true,
'app_id' => Config::get('mp')['app_id'],
'secret' => Config::get('mp')['secret'],
'token' => Config::get('mp')['token'],
'aes_key' => Config::get('mp')['aes_key'],
'log' => [
'level' => 'debug',
'file' => '/tmp/easywechat.log',
],
];
}
2.生成二维码
a.临时二维码
//$id 为场景值,也可是参数
public function getTimeQrCode($id)
{
//1.获取ticket
$app = new Application($this->options);
$result = $app->qrcode->temporary($id, 6 * 24 * 3600);
$url = $app->qrcode->url($result['ticket']);
return $url;
}
b.永久二维码
//$id 为场景值,也可是参数
public function getForeverQrCode($id)
{
//1.获取ticket
$app = new Application($this->options);
$result = $app->qrcode->forever($id);
$url = $app->qrcode->url($result['ticket']);
return $url;
}
3.编写扫码关注事件(还有其它事件,暂不一样列举)
及再次扫码后微信回调的相关数据,都是推送到该服务器的地址,以下是进行图文回复的设置
public function server()
{
//扫码关注参数
$postArr = file_get_contents("php://input");
//防止sql注入
libxml_disable_entity_loader('true');
$postObj = simplexml_load_string($postArr, 'SimpleXMLElement', LIBXML_NOCDATA);
$log_model = new Data('kqLog');
$log['msg'] = $postArr;
$log['add_up_time'] = date('Y-m-d H:i:s', time());
$log_model->insertData($log);
$msg_type = $postObj->MsgType;
$app = new Application($this->options);
if ($msg_type == 'event') {
if (strtolower($postObj->Event) == 'subscribe') {//关注事件
$app->server->setMessageHandler(function ($message) {
$messageArray = json_decode($message, true);
$log_model = new Data('kqLog');
$log['msg'] = $message;
$log['add_up_time'] = date('Y-m-d H:i:s', time());
$log_model->insertData($log);
$scene_id = substr($messageArray['EventKey'],8);
$meeting_model = new Data('kqConference');
$meeting = $meeting_model->find(['id' => $scene_id], 'id,name,start_datetime');
$items = array(
'title' => $meeting['name'].'报名入口,点击进入',//标题
'description' => '',//描述
'url' => 'http://xxx.com/index/paymentList', ['id' => $scene_id]),//图文跳转地址
'image' => 'http://xxx.com/static/index/query_new/meet.png'//图片地址
);
$news = new News($items);
return $news;
});
$response = $app->server->serve();
$response->send();
} elseif(strtolower($postObj->Event) == 'scan') {//扫码事件
$app->server->setMessageHandler(function ($message) {
$messageArray = json_decode($message, true);
$log_model = new Data('kqLog');
$log['msg'] = $message;
$log['add_up_time'] = date('Y-m-d H:i:s', time());
$log_model->insertData($log);
$scene_id = $messageArray['EventKey'];
$meeting_model = new Data('kqConference');
$meeting = $meeting_model->find(['id' => $scene_id], 'id,name,start_datetime');
$items = array(
'title' => $meeting['name'].'报名入口,点击进入',
'description' => '',
'url' => 'http://' . $_SERVER['HTTP_HOST'] . url('index/html5/paymentList', ['id' => $scene_id]),
'image' =>'http://xxx.com/static/index/query_new/meet.png'
);
$news = new News($items);
return $news;
});
$response = $app->server->serve();
$response->send();
}
}
}