From 1b76d816a06c309a24f8d3a6b7b9d28170f3f518 Mon Sep 17 00:00:00 2001 From: Zhuoqing Date: Sat, 7 Apr 2018 23:40:11 -0700 Subject: [PATCH 01/12] add initial files for QrReferral --- .gitignore | 4 + addons/QrReferral/Common.php | 75 +++++++++ addons/QrReferral/Config.php | 132 +++++++++++++++ addons/QrReferral/controller/Api.php | 215 +++++++++++++++++++++++++ addons/QrReferral/controller/Index.php | 40 +++++ addons/QrReferral/install.sql | 54 +++++++ addons/QrReferral/logo.png | Bin 0 -> 14613 bytes 7 files changed, 520 insertions(+) create mode 100644 .gitignore create mode 100755 addons/QrReferral/Common.php create mode 100755 addons/QrReferral/Config.php create mode 100755 addons/QrReferral/controller/Api.php create mode 100755 addons/QrReferral/controller/Index.php create mode 100755 addons/QrReferral/install.sql create mode 100755 addons/QrReferral/logo.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8dd6ec8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +config/database.php +runtime/ +.vscode/launch.json +data/sql.sql diff --git a/addons/QrReferral/Common.php b/addons/QrReferral/Common.php new file mode 100755 index 0000000..6bfdf8d --- /dev/null +++ b/addons/QrReferral/Common.php @@ -0,0 +1,75 @@ + $val) { + if (substr($val, 0, 1) == '@') { + $param[$key] = new \CURLFile(realpath(substr($val, 1))); + } + } + } + } + // 初始化curl + $ch = curl_init(); + // 设置超时 + curl_setopt($ch, CURLOPT_TIMEOUT_MS, intval($timeOutMs)); + + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); + + // 设置header + if ($type == 'file') { + $header[] = "content-type: multipart/form-data; charset=UTF-8"; + curl_setopt($ch, CURLOPT_HTTPHEADER, $header); + } elseif ($type == 'xml') { + curl_setopt($ch, CURLOPT_HEADER, false); + } else { + $header[] = "content-type: application/json; charset=UTF-8"; + curl_setopt($ch, CURLOPT_HTTPHEADER, $header); + } + + // curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); + curl_setopt($ch, CURLOPT_AUTOREFERER, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, $param); + // 要求结果为字符串且输出到屏幕上 + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + // 使用证书:cert 与 key 分别属于两个.pem文件 + if (isset($useCert['certPath']) && isset($useCert['keyPath'])) { + curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM'); + curl_setopt($ch, CURLOPT_SSLCERT, $useCert['certPath']); + curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM'); + curl_setopt($ch, CURLOPT_SSLKEY, $useCert['keyPath']); + } + + $res = curl_exec($ch); + $flat = curl_errno($ch); + $msg = ''; + if ($flat) { + $msg = curl_error($ch); + } + curl_close($ch); + if ($flat) { + $res = [ + 'curl_erron' => $flat, + 'curl_error' => $msg, + ]; + } else { + if ($return_array && !empty($res)) { + $res = $type == 'xml' ? FromXml($res) : json_decode($res, true); + } + } + + return $res; +} diff --git a/addons/QrReferral/Config.php b/addons/QrReferral/Config.php new file mode 100755 index 0000000..b6351dc --- /dev/null +++ b/addons/QrReferral/Config.php @@ -0,0 +1,132 @@ + '用户专属二维码海报', + 'addon' => 'QrReferral', + 'desc' => '用户专属二维码海报,追踪关注用户来源', + 'version' => '1.0', + 'author' => 'xinyuechinese', + 'logo' => 'logo.png', + 'menu_show' => '1', + 'entry_url' => '', // 如果这应用需要入口的,比较微信商城,那么填写入口,写法 应用名称/ 控制器/方法 + 'install_sql' => 'install.sql', // 数据库安装文件 + 'upgrade_sql' => '', //升级的数据库文件,如果目录存在这个文件,后台自动出现升级 + 'menu' => [ //后台菜单列表 + [ + 'name' => '临时码推广记录', + 'url' => 'QrReferral/Index/listTempScan', + 'icon' => '', + ], + ['name' => '临时二维码记录', + 'url' => 'QrReferral/Index/listTempQr', + 'icon' => '', + ], + ['name' => '永久码推广记录', + 'url' => 'QrReferral/Index/listPermScan', + 'icon' => '', + ], + ['name' => '永久二维码记录', + 'url' => 'QrReferral/Index/listPermQr', + 'icon' => '', + ], + ], + 'config' => array( // 应用配置参数 + array( + 'name' => 'sceneIdAdd', + 'title' => '用户推广二维码SceneId起始值:', + 'type' => 'text', + 'value' => '130000', + 'tip' => '用户推广二维码SceneId起始值', + ), + array( + 'name' => 'permSceneIdAdd', + 'title' => '永久推广二维码SceneId起始值:', + 'type' => 'text', + 'value' => '50000', + 'tip' => '永久推广二维码SceneId起始值', + ), + array( + 'name' => 'qrInsertX1', + 'title' => '图片中插入二维码位置X1:', + 'type' => 'text', + 'value' => '100', + 'tip' => '图片中插入二维码位置X1', + ), + array( + 'name' => 'qrInsertY1', + 'title' => '图片中插入二维码位置Y1:', + 'type' => 'text', + 'value' => '100', + 'tip' => '图片中插入二维码位置Y1', + ), + array( + 'name' => 'qrInsertX2', + 'title' => '图片中插入二维码位置X2:', + 'type' => 'text', + 'value' => '530', + 'tip' => '图片中插入二维码位置X2', + ), + array( + 'name' => 'qrInsertY2', + 'title' => '图片中插入二维码位置Y2:', + 'type' => 'text', + 'value' => '530', + 'tip' => '图片中插入二维码位置Y2', + ), + array( + 'name' => 'qrcodeWXToken', + 'title' => '借用服务号id', + 'type' => 'text', + 'value' => '', + 'tip' => '空为使用本身', + ), + array( + 'name' => 'qrUseAsyncGen', + 'title' => '使用异步任务生成二维码海报', + 'type' => 'text', + 'value' => '', + 'tip' => '缺省空为使用异步任务', + ), + array( + 'name' => 'qrScanResponse', + 'title' => '扫码回复消息', + 'type' => 'text', + 'value' => '感谢扫码QrReferaal', + 'tip' => '', + ), + array( + 'name' => 'qrResponseAsync', + 'title' => '服务号本身回复消息', + 'type' => 'text', + 'value' => '正在生成海报,请稍等', + 'tip' => '', + ), + array( + 'name' => 'qrPermResponseAsync', + 'title' => '永久码海报回复消息', + 'type' => 'text', + 'value' => '正在生成永久码海报,请稍等', + 'tip' => '', + ), + array( + 'name' => 'qrBorrowResponse', + 'title' => '借用服务号时回复消息', + 'type' => 'text', + 'value' => '正在生成海报,请等候30秒后再次请求领取', + 'tip' => '', + ), + array( + 'name' => 'qrAsyncPort', + 'title' => '异步任务端口', + 'type' => 'text', + 'value' => '', + 'tip' => '缺省空为使用当前网站任务端口,注意如果网站是https需要开针对127.0.0.1开放http并指定80端口', + ), + array( + 'name' => 'basePosterSitePath', + 'title' => '推广海报Site Path', + 'type' => 'text', + 'value' => '', + 'tip' => '空的话会使用内置海报. 限<500K', + ), + ), +); diff --git a/addons/QrReferral/controller/Api.php b/addons/QrReferral/controller/Api.php new file mode 100755 index 0000000..6a7e102 --- /dev/null +++ b/addons/QrReferral/controller/Api.php @@ -0,0 +1,215 @@ +where('origin_id', '=', $originalId)->find(); + if (!empty($mp['id'])) { + Cache::set($mpInfo, $mp, 3600); + return $mp['id']; + } else { + abort(500, lang('没有找到相应的公众号信息')); + } + } else { + return $mpinfoCahe['id']; + } + } + + public function message($msg = [], $param = []) + { + $config = getAddonInfo(); + $qrcodeWXToken = $config['qrcodeWXToken']; + $qrInsertX1 = $config['qrInsertX1']; + $qrInsertY1 = $config['qrInsertY1']; + $qrInsertX2 = $config['qrInsertX2']; + $qrInsertY2 = $config['qrInsertY2']; + $basePosterSitePath = $config['basePosterSitePath']; + $refOpenid = $dataArr['FromUserName']; + $wxToken = $dataArr['ToUserName']; + $umap['openid'] = $refOpenid; + $umap['token'] = $wxToken; + $umap['date_int'] = $this->getDateInt(time()); + $existInfo = Db::name('qr_referral')->where($umap)->find(); + if (isset($existInfo['qr_media_id']) && !empty($existInfo['qr_media_id'])) { + replyImage($existInfo['qr_media_id']); + return true; + } + //doesn't work for all cases. just hack it for wx triggering + $triggerPort = $config['qrAsyncPort']; + if (empty($triggerPort)) { + $triggerPort = $_SERVER['SERVER_PORT']; + } + $param = [ + 'qrcodeWXToken' => $qrcodeWXToken, + 'qrInsertX1' => $qrInsertX1, + 'qrInsertY1' => $qrInsertY1, + 'qrInsertX2' => $qrInsertX2, + 'qrInsertY2' => $qrInsertY2, + 'refOpenid' => $refOpenid, + 'wxToken' => $wxToken, + 'sceneIdAdd' => $config['sceneIdAdd'], + 'basePosterSitePath' => $basePosterSitePath, + ]; + if ($config['qrUseAsyncGen'] === 'false') { + $res = $this->addQrPoster($param); + if (empty($res['media_id'])) { + //problably should not return error to user + replyText($res['err']); + return true; + } + replyImage($res['media_id']); + } else { + //because https://127.0.0.1 most likely won't work due to cert issue. has to use http://127.0.0.1 + $triggerUrl = 'http://127.0.0.1:' . $triggerPort . '/asynctask.php/app/QrReferral/Api/asyncadd'; + $res = post_data($triggerUrl, $param, 'file', true, [], 2); + if (empty($qrcodeWXToken) || $qrcodeWXToken == $wxToken) { + replyText($config['qrResponseAsync']); + //return image in async message + } else { + replyText($config['qrBorrowResponse']); + //rely on user to request poster again to send + } + } + return true; + } + + public function asyncadd() + { + if (substr($_SERVER['SCRIPT_FILENAME'], -strlen('asynctask.php')) !== 'asynctask.php') { + echo (json_encode(['err' => 'not calling from async entry'])); + return true; + } + $input = [ + 'qrcodeWXToken' => input('qrcodeWXToken'), + 'qrInsertX1' => input('qrInsertX1'), + 'qrInsertY1' => input('qrInsertY1'), + 'qrInsertX2' => input('qrInsertX2'), + 'qrInsertY2' => input('qrInsertY2'), + 'refOpenid' => input('refOpenid'), + 'wxToken' => input('wxToken'), + 'sceneIdAdd' => intval(input('sceneIdAdd')), + 'basePosterSitePath' => input('basePosterSitePath'), + ]; + + $mediaRes = $this->addQrPoster($input); + if (empty($mediaRes['media_id'])) { + //TODO error logging + echo (json_encode($mediaRes)); + return true; + } + if (empty($input['qrcodeWXToken']) || $input['qrcodeWXToken'] == $input['wxToken']) { + //send back the poster with custom message + $wxMid = $this->getMidByOriginalId($input['wxToken']); + $wxObj = getWechatActiveObj($wxMid); + $data = [ + 'touser' => $input['refOpenid'], + 'msgtype' => 'image', + 'image' => [ + 'media_id' => $mediaRes['media_id'], + ], + ]; + //TODO error logging for send response + $wxObj->sendCustomMessage($data); + } + return true; + } + + private function addQrPoster($input) + { + $qrcodeWXToken = $input['qrcodeWXToken']; + $qrInsertX1 = $input['qrInsertX1']; + $qrInsertY1 = $input['qrInsertY1']; + $qrInsertX2 = $input['qrInsertX2']; + $qrInsertY2 = $input['qrInsertY2']; + $refOpenid = $input['refOpenid']; + $wxToken = $input['wxToken']; + $sceneIdAdd = intval($input['sceneIdAdd']); + $basePosterSitePath = $input['basePosterSitePath']; + + if (empty($qrcodeWXToken)) { + $qrcodeWXToken = $wxToken; + } + if (empty($qrcodeWXToken) || empty($refOpenid) || empty($wxToken)) { + return ['err' => 'invalid param']; + } + $umap['openid'] = $refOpenid; + $umap['token'] = $wxToken; + $umap['date_int'] = $this->getDateInt(time()); + $existInfo = Db::name('qr_referral')->where($umap)->find(); + if (isset($existInfo['qr_media_id']) && !empty($existInfo['qr_media_id'])) { + return ['media_id' => $existInfo['qr_media_id']]; + } + $umap['update_time'] = time(); + if (!isset($existInfo['id'])) { + $existInfo['id'] = Db::name('qr_referral')->insert($umap); + } + $qrcodeRetriveUrl = ''; + $wxQrMid = $this->getMidByOriginalId($qrcodeWXToken); + $wxQrObj = getWechatActiveObj($wxQrMid); + if (empty($existInfo['qr_ticket'])) { + $qrSceneId = $sceneIdAdd + $existInfo['id']; + $qrResponse = $wxQrObj->getQRCode($qrSceneId, 0, 2592000); + if (!$qrResponse) { + return ['err' => 'Error Get QrCode']; + } + Db::name('qr_referral')->where(['id' => $existInfo['id']])->update(['qr_ticket' => $qrResponse['ticket'], 'qr_url' => $qrResponse['url'], 'scene_id' => $qrSceneId]); + $existInfo['qr_ticket'] = $qrResponse['ticket']; + } + //TODO direct generate qrcode based on qr_url, we actually don't need to call wechat to download the image + $qrcodeDownloadurl = $wxQrObj->getQRUrl($existInfo['qr_ticket']); + $qrcode = file_get_contents($qrcodeDownloadurl); + if (!$qrcode) { + return ['err' => 'Error Get QrCode from ticket']; + } + $qrImg = imagecreatefromstring($qrcode); + if (!$qrImg) { + return ['err' => 'Error Get QrCode image']; + } + $baseImageFileName = __DIR__ . '/QrReferral_base.jpg'; + if (!empty($basePosterSitePath)) { + $baseImageFileName = realpath(ROOT_PATH . $basePosterSitePath); + } + $baseImageData = file_get_contents($baseImageFileName); + $dstImage = imagecreatefromstring($baseImageData); + if (!$dstImage) { + return ['err' => 'Error get base image']; + } + $pasteRes = imagecopyresized($dstImage, $qrImg, $qrInsertX1, $qrInsertY1, 0, 0, $qrInsertX2 - $qrInsertX1, $qrInsertY2 - $qrInsertY1, 430, 430); + if (!$pasteRes) { + return ['err' => 'Error paste QrCode image']; + } + $tmpImgFile = tempnam(sys_get_temp_dir(), 'QrReferralPoster'); + unlink($tmpImgFile); + $tmpImgFile = $tmpImgFile . '.jpg'; + $generateImgRes = imagejpeg($dstImage, $tmpImgFile); + if (!$generateImgRes) { + return ['err' => 'Error generating final image']; + } + //upload the image and reply + $wxMid = $this->getMidByOriginalId($wxToken); + $wxObj = getWechatActiveObj($wxMid); + $mediaRes = $wxObj->uploadMedia(['media' => '@' . $tmpImgFile], 'image'); + if (!$mediaRes) { + return ['err' => 'Error upload final image']; + } + Db::name('qr_referral')->where(['id' => $existInfo['id']])->update(['qr_media_id' => $mediaRes['media_id'], 'update_time' => time()]); + unlink($tmpImgFile); + return ['media_id' => $mediaRes['media_id']]; + } +} diff --git a/addons/QrReferral/controller/Index.php b/addons/QrReferral/controller/Index.php new file mode 100755 index 0000000..d063fff --- /dev/null +++ b/addons/QrReferral/controller/Index.php @@ -0,0 +1,40 @@ +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 LNkvXXu0mjfQ@TgK literal 0 HcmV?d00001 -- Gitee From bf1f83979ad27d0f8043bfa249f58010b0cbc583 Mon Sep 17 00:00:00 2001 From: Zhuoqing Date: Sun, 8 Apr 2018 00:33:07 -0700 Subject: [PATCH 02/12] support perm qr type --- addons/QrReferral/Config.php | 14 ++++ addons/QrReferral/controller/Api.php | 70 ++++++++++++------ .../QrReferral/controller/QrReferral_base.jpg | Bin 0 -> 208312 bytes 3 files changed, 63 insertions(+), 21 deletions(-) create mode 100755 addons/QrReferral/controller/QrReferral_base.jpg diff --git a/addons/QrReferral/Config.php b/addons/QrReferral/Config.php index b6351dc..6461772 100755 --- a/addons/QrReferral/Config.php +++ b/addons/QrReferral/Config.php @@ -35,6 +35,7 @@ return array( 'title' => '用户推广二维码SceneId起始值:', 'type' => 'text', 'value' => '130000', + 'placeholder' => '', 'tip' => '用户推广二维码SceneId起始值', ), array( @@ -42,6 +43,7 @@ return array( 'title' => '永久推广二维码SceneId起始值:', 'type' => 'text', 'value' => '50000', + 'placeholder' => '', 'tip' => '永久推广二维码SceneId起始值', ), array( @@ -49,6 +51,7 @@ return array( 'title' => '图片中插入二维码位置X1:', 'type' => 'text', 'value' => '100', + 'placeholder' => '', 'tip' => '图片中插入二维码位置X1', ), array( @@ -56,6 +59,7 @@ return array( 'title' => '图片中插入二维码位置Y1:', 'type' => 'text', 'value' => '100', + 'placeholder' => '', 'tip' => '图片中插入二维码位置Y1', ), array( @@ -63,6 +67,7 @@ return array( 'title' => '图片中插入二维码位置X2:', 'type' => 'text', 'value' => '530', + 'placeholder' => '', 'tip' => '图片中插入二维码位置X2', ), array( @@ -70,6 +75,7 @@ return array( 'title' => '图片中插入二维码位置Y2:', 'type' => 'text', 'value' => '530', + 'placeholder' => '', 'tip' => '图片中插入二维码位置Y2', ), array( @@ -77,6 +83,7 @@ return array( 'title' => '借用服务号id', 'type' => 'text', 'value' => '', + 'placeholder' => '', 'tip' => '空为使用本身', ), array( @@ -84,6 +91,7 @@ return array( 'title' => '使用异步任务生成二维码海报', 'type' => 'text', 'value' => '', + 'placeholder' => '', 'tip' => '缺省空为使用异步任务', ), array( @@ -91,6 +99,7 @@ return array( 'title' => '扫码回复消息', 'type' => 'text', 'value' => '感谢扫码QrReferaal', + 'placeholder' => '', 'tip' => '', ), array( @@ -98,6 +107,7 @@ return array( 'title' => '服务号本身回复消息', 'type' => 'text', 'value' => '正在生成海报,请稍等', + 'placeholder' => '', 'tip' => '', ), array( @@ -105,6 +115,7 @@ return array( 'title' => '永久码海报回复消息', 'type' => 'text', 'value' => '正在生成永久码海报,请稍等', + 'placeholder' => '', 'tip' => '', ), array( @@ -112,6 +123,7 @@ return array( 'title' => '借用服务号时回复消息', 'type' => 'text', 'value' => '正在生成海报,请等候30秒后再次请求领取', + 'placeholder' => '', 'tip' => '', ), array( @@ -119,6 +131,7 @@ return array( 'title' => '异步任务端口', 'type' => 'text', 'value' => '', + 'placeholder' => '', 'tip' => '缺省空为使用当前网站任务端口,注意如果网站是https需要开针对127.0.0.1开放http并指定80端口', ), array( @@ -126,6 +139,7 @@ return array( 'title' => '推广海报Site Path', 'type' => 'text', 'value' => '', + 'placeholder' => '', 'tip' => '空的话会使用内置海报. 限<500K', ), ), diff --git a/addons/QrReferral/controller/Api.php b/addons/QrReferral/controller/Api.php index 6a7e102..c3b282c 100755 --- a/addons/QrReferral/controller/Api.php +++ b/addons/QrReferral/controller/Api.php @@ -34,22 +34,38 @@ class Api public function message($msg = [], $param = []) { $config = getAddonInfo(); + $config = $config['mp_config']; $qrcodeWXToken = $config['qrcodeWXToken']; $qrInsertX1 = $config['qrInsertX1']; $qrInsertY1 = $config['qrInsertY1']; $qrInsertX2 = $config['qrInsertX2']; $qrInsertY2 = $config['qrInsertY2']; $basePosterSitePath = $config['basePosterSitePath']; - $refOpenid = $dataArr['FromUserName']; - $wxToken = $dataArr['ToUserName']; + $refOpenid = $msg['FromUserName']; + $wxToken = $msg['ToUserName']; $umap['openid'] = $refOpenid; - $umap['token'] = $wxToken; - $umap['date_int'] = $this->getDateInt(time()); - $existInfo = Db::name('qr_referral')->where($umap)->find(); + $umap['token'] = $wxToken; + $qrType = 'temp'; + $existInfo = Db::name('qr_referral_perm')->where($umap)->find(); if (isset($existInfo['qr_media_id']) && !empty($existInfo['qr_media_id'])) { - replyImage($existInfo['qr_media_id']); - return true; - } + $qrType = 'perm'; + //if not expired + if ($existInfo['update_time'] + 86400 > time()) { + replyImage($existInfo['qr_media_id']); + return true; + } + //clear current media id for resend + Db::name('qr_referral_perm')->where(['id' => $existInfo['id']])->save(['qr_media_id' => '', 'update_time' => time()]); + } + //then check normal table + if ($qrType == 'temp') { + $umap['date_int'] = $this->getDateInt(time()); + $existInfo = Db::name('qr_referral')->where($umap)->find(); + if (isset($existInfo['qr_media_id']) && !empty($existInfo['qr_media_id'])) { + replyImage($existInfo['qr_media_id']); + return true; + } + } //doesn't work for all cases. just hack it for wx triggering $triggerPort = $config['qrAsyncPort']; if (empty($triggerPort)) { @@ -61,9 +77,10 @@ class Api 'qrInsertY1' => $qrInsertY1, 'qrInsertX2' => $qrInsertX2, 'qrInsertY2' => $qrInsertY2, - 'refOpenid' => $refOpenid, + 'refOpenid' => $refOpenid, + 'qrType' => $qrType, 'wxToken' => $wxToken, - 'sceneIdAdd' => $config['sceneIdAdd'], + 'sceneIdAdd' => $qrType == 'perm' ? $config['permSceneIdAdd'] : $config['sceneIdAdd'], 'basePosterSitePath' => $basePosterSitePath, ]; if ($config['qrUseAsyncGen'] === 'false') { @@ -79,10 +96,10 @@ class Api $triggerUrl = 'http://127.0.0.1:' . $triggerPort . '/asynctask.php/app/QrReferral/Api/asyncadd'; $res = post_data($triggerUrl, $param, 'file', true, [], 2); if (empty($qrcodeWXToken) || $qrcodeWXToken == $wxToken) { - replyText($config['qrResponseAsync']); + replyText($qrType == 'perm' ? $config['qrPermResponseAsync'] : $config['qrResponseAsync']); //return image in async message } else { - replyText($config['qrBorrowResponse']); + replyText($qrType == 'perm' ? ($config['qrPermResponseAsync'] + '. 请等候30秒后再次请求领取') : $config['qrBorrowResponse']); //rely on user to request poster again to send } } @@ -101,7 +118,8 @@ class Api 'qrInsertY1' => input('qrInsertY1'), 'qrInsertX2' => input('qrInsertX2'), 'qrInsertY2' => input('qrInsertY2'), - 'refOpenid' => input('refOpenid'), + 'refOpenid' => input('refOpenid'), + 'qrType' => input('qrType'), 'wxToken' => input('wxToken'), 'sceneIdAdd' => intval(input('sceneIdAdd')), 'basePosterSitePath' => input('basePosterSitePath'), @@ -136,7 +154,8 @@ class Api $qrInsertX1 = $input['qrInsertX1']; $qrInsertY1 = $input['qrInsertY1']; $qrInsertX2 = $input['qrInsertX2']; - $qrInsertY2 = $input['qrInsertY2']; + $qrInsertY2 = $input['qrInsertY2']; + $qrType = $input['qrType']; $refOpenid = $input['refOpenid']; $wxToken = $input['wxToken']; $sceneIdAdd = intval($input['sceneIdAdd']); @@ -149,26 +168,35 @@ class Api return ['err' => 'invalid param']; } $umap['openid'] = $refOpenid; - $umap['token'] = $wxToken; - $umap['date_int'] = $this->getDateInt(time()); - $existInfo = Db::name('qr_referral')->where($umap)->find(); + $umap['token'] = $wxToken; + $umap['token'] = $wxToken; + if ($qrType == 'perm') { + $qrtableName = 'qr_referral_perm'; + $qrSceneType = 1; //QR_LIMIT_SCENE'; + } else { + $umap['date_int'] = $this->getDateInt(time()); + $qrtableName = 'qr_referral'; + $qrSceneType = 0; // 'QR_SCENE'; + } + //check again as the qr code may be generated by wechat retry request + $existInfo = Db::name($qrtableName)->where($umap)->find(); if (isset($existInfo['qr_media_id']) && !empty($existInfo['qr_media_id'])) { return ['media_id' => $existInfo['qr_media_id']]; } $umap['update_time'] = time(); if (!isset($existInfo['id'])) { - $existInfo['id'] = Db::name('qr_referral')->insert($umap); + $existInfo['id'] = Db::name($qrtableName)->insert($umap); } $qrcodeRetriveUrl = ''; $wxQrMid = $this->getMidByOriginalId($qrcodeWXToken); $wxQrObj = getWechatActiveObj($wxQrMid); if (empty($existInfo['qr_ticket'])) { $qrSceneId = $sceneIdAdd + $existInfo['id']; - $qrResponse = $wxQrObj->getQRCode($qrSceneId, 0, 2592000); + $qrResponse = $wxQrObj->getQRCode($qrSceneId, $qrSceneType, 2592000); if (!$qrResponse) { return ['err' => 'Error Get QrCode']; } - Db::name('qr_referral')->where(['id' => $existInfo['id']])->update(['qr_ticket' => $qrResponse['ticket'], 'qr_url' => $qrResponse['url'], 'scene_id' => $qrSceneId]); + Db::name($qrtableName)->where(['id' => $existInfo['id']])->update(['qr_ticket' => $qrResponse['ticket'], 'qr_url' => $qrResponse['url'], 'scene_id' => $qrSceneId]); $existInfo['qr_ticket'] = $qrResponse['ticket']; } //TODO direct generate qrcode based on qr_url, we actually don't need to call wechat to download the image @@ -208,7 +236,7 @@ class Api if (!$mediaRes) { return ['err' => 'Error upload final image']; } - Db::name('qr_referral')->where(['id' => $existInfo['id']])->update(['qr_media_id' => $mediaRes['media_id'], 'update_time' => time()]); + Db::name($qrtableName)->where(['id' => $existInfo['id']])->update(['qr_media_id' => $mediaRes['media_id'], 'update_time' => time()]); unlink($tmpImgFile); return ['media_id' => $mediaRes['media_id']]; } diff --git a/addons/QrReferral/controller/QrReferral_base.jpg b/addons/QrReferral/controller/QrReferral_base.jpg new file mode 100755 index 0000000000000000000000000000000000000000..0fa1fb9366d4cbf6698747b5acd8fad8bb2276dc GIT binary patch literal 208312 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 AhIgNixN3xO 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⋘ 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 P{J%5v?meiYiU9xFE-W+k literal 0 HcmV?d00001 -- Gitee From 41e3c4defcd5811684eae99283058cfb8b9089e2 Mon Sep 17 00:00:00 2001 From: Zhuoqing Date: Sun, 8 Apr 2018 00:57:20 -0700 Subject: [PATCH 03/12] add scan subscribe message handle --- addons/QrReferral/controller/Api.php | 123 +++++++++++++++++++-------- 1 file changed, 86 insertions(+), 37 deletions(-) diff --git a/addons/QrReferral/controller/Api.php b/addons/QrReferral/controller/Api.php index c3b282c..0529f62 100755 --- a/addons/QrReferral/controller/Api.php +++ b/addons/QrReferral/controller/Api.php @@ -32,6 +32,55 @@ class Api } public function message($msg = [], $param = []) + { + if (isset($msgData['Ticket'])) { + //扫码事件 + return $this->scanMessage($msg, $param); + } + //推广事件 + return $this->referralMessage($msg, $param); + } + + private function scanMessage($msg = [], $param = []) + { + $map['scene_id'] = ltrim($msg['EventKey'], 'qrscene_'); + //check the QrReferral first + $referralTbl = Db::name('qr_referral_perm'); + $qr = $referralTbl->where($map)->find(); + $subsTblName = 'qr_referral_subscribe_perm'; + if (empty($qr['openid'])) { + $referralTbl = Db::name('qr_referral'); + $qr = $referralTbl->where($map)->find(); + $subsTblName = 'qr_referral_subscribe'; + } + if (!empty($qr['openid'])) { + //increase subscribe scan count + if ($msg['Content'] == 'subscribe') { + $subsTbl = Db::name($subsTblName); + $subsMap['scan_openid'] = $msg['FromUserName']; + $subsInfo = $subsTbl->where($subsMap)->find(); + //only count the first time subscribe by our code. May need to change to check the real first subscribe + if (empty($subsInfo['create_openid'])) { + $subsTbl->insert([ + 'qr_referral_id' => intval($qr['id']), + 'scan_token' => get_token(), + 'scan_openid' => $msg['FromUserName'], + 'create_token' => $qr['token'], + 'create_openid' => $qr['openid'], + 'update_time' => time(), + ]); + $referralTbl->where(['id' => $qr['id']])->setInc('subscribe_cnt'); + } + } + $config = getAddonInfo(); + $config = $config['mp_config']; + replyText($config['qrScanResponse']); + return true; + } + return false; + } + + private function referralMessage($msg = [], $param = []) { $config = getAddonInfo(); $config = $config['mp_config']; @@ -44,28 +93,28 @@ class Api $refOpenid = $msg['FromUserName']; $wxToken = $msg['ToUserName']; $umap['openid'] = $refOpenid; - $umap['token'] = $wxToken; - $qrType = 'temp'; - $existInfo = Db::name('qr_referral_perm')->where($umap)->find(); + $umap['token'] = $wxToken; + $qrType = 'temp'; + $existInfo = Db::name('qr_referral_perm')->where($umap)->find(); if (isset($existInfo['qr_media_id']) && !empty($existInfo['qr_media_id'])) { - $qrType = 'perm'; - //if not expired - if ($existInfo['update_time'] + 86400 > time()) { - replyImage($existInfo['qr_media_id']); - return true; - } - //clear current media id for resend - Db::name('qr_referral_perm')->where(['id' => $existInfo['id']])->save(['qr_media_id' => '', 'update_time' => time()]); + $qrType = 'perm'; + //if not expired + if ($existInfo['update_time'] + 86400 > time()) { + replyImage($existInfo['qr_media_id']); + return true; + } + //clear current media id for resend + Db::name('qr_referral_perm')->where(['id' => $existInfo['id']])->save(['qr_media_id' => '', 'update_time' => time()]); } //then check normal table - if ($qrType == 'temp') { - $umap['date_int'] = $this->getDateInt(time()); - $existInfo = Db::name('qr_referral')->where($umap)->find(); - if (isset($existInfo['qr_media_id']) && !empty($existInfo['qr_media_id'])) { - replyImage($existInfo['qr_media_id']); - return true; - } - } + if ($qrType == 'temp') { + $umap['date_int'] = $this->getDateInt(time()); + $existInfo = Db::name('qr_referral')->where($umap)->find(); + if (isset($existInfo['qr_media_id']) && !empty($existInfo['qr_media_id'])) { + replyImage($existInfo['qr_media_id']); + return true; + } + } //doesn't work for all cases. just hack it for wx triggering $triggerPort = $config['qrAsyncPort']; if (empty($triggerPort)) { @@ -77,8 +126,8 @@ class Api 'qrInsertY1' => $qrInsertY1, 'qrInsertX2' => $qrInsertX2, 'qrInsertY2' => $qrInsertY2, - 'refOpenid' => $refOpenid, - 'qrType' => $qrType, + 'refOpenid' => $refOpenid, + 'qrType' => $qrType, 'wxToken' => $wxToken, 'sceneIdAdd' => $qrType == 'perm' ? $config['permSceneIdAdd'] : $config['sceneIdAdd'], 'basePosterSitePath' => $basePosterSitePath, @@ -99,7 +148,7 @@ class Api replyText($qrType == 'perm' ? $config['qrPermResponseAsync'] : $config['qrResponseAsync']); //return image in async message } else { - replyText($qrType == 'perm' ? ($config['qrPermResponseAsync'] + '. 请等候30秒后再次请求领取') : $config['qrBorrowResponse']); + replyText($qrType == 'perm' ? ($config['qrPermResponseAsync']+'. 请等候30秒后再次请求领取') : $config['qrBorrowResponse']); //rely on user to request poster again to send } } @@ -118,8 +167,8 @@ class Api 'qrInsertY1' => input('qrInsertY1'), 'qrInsertX2' => input('qrInsertX2'), 'qrInsertY2' => input('qrInsertY2'), - 'refOpenid' => input('refOpenid'), - 'qrType' => input('qrType'), + 'refOpenid' => input('refOpenid'), + 'qrType' => input('qrType'), 'wxToken' => input('wxToken'), 'sceneIdAdd' => intval(input('sceneIdAdd')), 'basePosterSitePath' => input('basePosterSitePath'), @@ -154,8 +203,8 @@ class Api $qrInsertX1 = $input['qrInsertX1']; $qrInsertY1 = $input['qrInsertY1']; $qrInsertX2 = $input['qrInsertX2']; - $qrInsertY2 = $input['qrInsertY2']; - $qrType = $input['qrType']; + $qrInsertY2 = $input['qrInsertY2']; + $qrType = $input['qrType']; $refOpenid = $input['refOpenid']; $wxToken = $input['wxToken']; $sceneIdAdd = intval($input['sceneIdAdd']); @@ -168,17 +217,17 @@ class Api return ['err' => 'invalid param']; } $umap['openid'] = $refOpenid; - $umap['token'] = $wxToken; - $umap['token'] = $wxToken; - if ($qrType == 'perm') { - $qrtableName = 'qr_referral_perm'; - $qrSceneType = 1; //QR_LIMIT_SCENE'; - } else { - $umap['date_int'] = $this->getDateInt(time()); - $qrtableName = 'qr_referral'; - $qrSceneType = 0; // 'QR_SCENE'; - } - //check again as the qr code may be generated by wechat retry request + $umap['token'] = $wxToken; + $umap['token'] = $wxToken; + if ($qrType == 'perm') { + $qrtableName = 'qr_referral_perm'; + $qrSceneType = 1; //QR_LIMIT_SCENE'; + } else { + $umap['date_int'] = $this->getDateInt(time()); + $qrtableName = 'qr_referral'; + $qrSceneType = 0; // 'QR_SCENE'; + } + //check again as the qr code may be generated by wechat retry request $existInfo = Db::name($qrtableName)->where($umap)->find(); if (isset($existInfo['qr_media_id']) && !empty($existInfo['qr_media_id'])) { return ['media_id' => $existInfo['qr_media_id']]; -- Gitee From 9e701636526b8afcfc4a6487380a0fece7516a68 Mon Sep 17 00:00:00 2001 From: Zhuoqing Date: Sun, 8 Apr 2018 09:57:27 -0700 Subject: [PATCH 04/12] add default qr scene type option --- addons/QrReferral/Config.php | 24 ++++++++++++++++++++++-- addons/QrReferral/controller/Api.php | 9 +++++---- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/addons/QrReferral/Config.php b/addons/QrReferral/Config.php index 6461772..30e35d3 100755 --- a/addons/QrReferral/Config.php +++ b/addons/QrReferral/Config.php @@ -79,6 +79,26 @@ return array( 'tip' => '图片中插入二维码位置Y2', ), array( + 'name' => 'qrDefaultSceneType', + 'title' => '缺省二维码场景类型', + 'type' => 'radio', + 'value' => 'temp', + 'value' => [ + 0 => [ + 'title' => '临时', + 'value' => 'temp', + 'checked' => '1' + ], + 1 => [ + 'title' => '永久', + 'value' => 'perm', + 'checked' => '0' + ] + ], + 'placeholder' => '', + 'tip' => '缺省使用临时二维码,推广效果好的粉丝可以单独为其分配永久二维码', + ), + array( 'name' => 'qrcodeWXToken', 'title' => '借用服务号id', 'type' => 'text', @@ -120,9 +140,9 @@ return array( ), array( 'name' => 'qrBorrowResponse', - 'title' => '借用服务号时回复消息', + 'title' => '借用服务号时附加回复消息', 'type' => 'text', - 'value' => '正在生成海报,请等候30秒后再次请求领取', + 'value' => '请等候30秒后再次请求领取', 'placeholder' => '', 'tip' => '', ), diff --git a/addons/QrReferral/controller/Api.php b/addons/QrReferral/controller/Api.php index 0529f62..d1ef7db 100755 --- a/addons/QrReferral/controller/Api.php +++ b/addons/QrReferral/controller/Api.php @@ -94,7 +94,7 @@ class Api $wxToken = $msg['ToUserName']; $umap['openid'] = $refOpenid; $umap['token'] = $wxToken; - $qrType = 'temp'; + $qrType = $config['qrDefaultSceneType'] == 'perm' ? 'perm' : 'temp'; $existInfo = Db::name('qr_referral_perm')->where($umap)->find(); if (isset($existInfo['qr_media_id']) && !empty($existInfo['qr_media_id'])) { $qrType = 'perm'; @@ -143,14 +143,15 @@ class Api } else { //because https://127.0.0.1 most likely won't work due to cert issue. has to use http://127.0.0.1 $triggerUrl = 'http://127.0.0.1:' . $triggerPort . '/asynctask.php/app/QrReferral/Api/asyncadd'; - $res = post_data($triggerUrl, $param, 'file', true, [], 2); + $res = post_data($triggerUrl, $param, 'file', true, [], 2); + $responseText = $qrType == 'perm' ? $config['qrPermResponseAsync'] : $config['qrResponseAsync']; if (empty($qrcodeWXToken) || $qrcodeWXToken == $wxToken) { - replyText($qrType == 'perm' ? $config['qrPermResponseAsync'] : $config['qrResponseAsync']); //return image in async message } else { - replyText($qrType == 'perm' ? ($config['qrPermResponseAsync']+'. 请等候30秒后再次请求领取') : $config['qrBorrowResponse']); + $responseText .= $config['qrBorrowResponse']; //rely on user to request poster again to send } + replyText($responseText); } return true; } -- Gitee From 7874e0cf7f2873c173c5095811d0d010e41da1e0 Mon Sep 17 00:00:00 2001 From: Zhuoqing Date: Sun, 8 Apr 2018 11:03:53 -0700 Subject: [PATCH 05/12] use rha mid instead of original token --- addons/QrReferral/controller/Api.php | 45 ++++++++-------------------- 1 file changed, 13 insertions(+), 32 deletions(-) diff --git a/addons/QrReferral/controller/Api.php b/addons/QrReferral/controller/Api.php index d1ef7db..8328d29 100755 --- a/addons/QrReferral/controller/Api.php +++ b/addons/QrReferral/controller/Api.php @@ -3,7 +3,6 @@ namespace addons\QrReferral\controller; use think\Db; -use think\facade\Cache; require_once __DIR__ . '/../Common.php'; @@ -14,23 +13,6 @@ class Api return intval($epochTime / 86400 / 2); } - private function getMidByOriginalId($originalId) - { - $mpInfo = 'mid_' . $originalId; - $mpinfoCahe = Cache::get($mpInfo); - if (empty($mpinfoCahe['id'])) { - $mp = Db::name('mp')->where('origin_id', '=', $originalId)->find(); - if (!empty($mp['id'])) { - Cache::set($mpInfo, $mp, 3600); - return $mp['id']; - } else { - abort(500, lang('没有找到相应的公众号信息')); - } - } else { - return $mpinfoCahe['id']; - } - } - public function message($msg = [], $param = []) { if (isset($msgData['Ticket'])) { @@ -54,16 +36,16 @@ class Api $subsTblName = 'qr_referral_subscribe'; } if (!empty($qr['openid'])) { - //increase subscribe scan count + //increase subscribe scan count if ($msg['Content'] == 'subscribe') { $subsTbl = Db::name($subsTblName); $subsMap['scan_openid'] = $msg['FromUserName']; - $subsInfo = $subsTbl->where($subsMap)->find(); - //only count the first time subscribe by our code. May need to change to check the real first subscribe + $subsInfo = $subsTbl->where($subsMap)->find(); + //only count the first time subscribe by our code. May need to change to check the real first subscribe if (empty($subsInfo['create_openid'])) { $subsTbl->insert([ 'qr_referral_id' => intval($qr['id']), - 'scan_token' => get_token(), + 'scan_token' => intval(input('mid')), 'scan_openid' => $msg['FromUserName'], 'create_token' => $qr['token'], 'create_openid' => $qr['openid'], @@ -91,9 +73,9 @@ class Api $qrInsertY2 = $config['qrInsertY2']; $basePosterSitePath = $config['basePosterSitePath']; $refOpenid = $msg['FromUserName']; - $wxToken = $msg['ToUserName']; + $wxToken = input('mid'); $umap['openid'] = $refOpenid; - $umap['token'] = $wxToken; + $umap['token'] = intval($wxToken); $qrType = $config['qrDefaultSceneType'] == 'perm' ? 'perm' : 'temp'; $existInfo = Db::name('qr_referral_perm')->where($umap)->find(); if (isset($existInfo['qr_media_id']) && !empty($existInfo['qr_media_id'])) { @@ -143,15 +125,15 @@ class Api } else { //because https://127.0.0.1 most likely won't work due to cert issue. has to use http://127.0.0.1 $triggerUrl = 'http://127.0.0.1:' . $triggerPort . '/asynctask.php/app/QrReferral/Api/asyncadd'; - $res = post_data($triggerUrl, $param, 'file', true, [], 2); - $responseText = $qrType == 'perm' ? $config['qrPermResponseAsync'] : $config['qrResponseAsync']; + $res = post_data($triggerUrl, $param, 'file', true, [], 2); + $responseText = $qrType == 'perm' ? $config['qrPermResponseAsync'] : $config['qrResponseAsync']; if (empty($qrcodeWXToken) || $qrcodeWXToken == $wxToken) { //return image in async message } else { $responseText .= $config['qrBorrowResponse']; //rely on user to request poster again to send } - replyText($responseText); + replyText($responseText); } return true; } @@ -183,7 +165,7 @@ class Api } if (empty($input['qrcodeWXToken']) || $input['qrcodeWXToken'] == $input['wxToken']) { //send back the poster with custom message - $wxMid = $this->getMidByOriginalId($input['wxToken']); + $wxMid = intval($input['wxToken']); $wxObj = getWechatActiveObj($wxMid); $data = [ 'touser' => $input['refOpenid'], @@ -218,8 +200,7 @@ class Api return ['err' => 'invalid param']; } $umap['openid'] = $refOpenid; - $umap['token'] = $wxToken; - $umap['token'] = $wxToken; + $umap['token'] = intval($wxToken); if ($qrType == 'perm') { $qrtableName = 'qr_referral_perm'; $qrSceneType = 1; //QR_LIMIT_SCENE'; @@ -238,7 +219,7 @@ class Api $existInfo['id'] = Db::name($qrtableName)->insert($umap); } $qrcodeRetriveUrl = ''; - $wxQrMid = $this->getMidByOriginalId($qrcodeWXToken); + $wxQrMid = intval($qrcodeWXToken); $wxQrObj = getWechatActiveObj($wxQrMid); if (empty($existInfo['qr_ticket'])) { $qrSceneId = $sceneIdAdd + $existInfo['id']; @@ -280,7 +261,7 @@ class Api return ['err' => 'Error generating final image']; } //upload the image and reply - $wxMid = $this->getMidByOriginalId($wxToken); + $wxMid = intval($wxToken); $wxObj = getWechatActiveObj($wxMid); $mediaRes = $wxObj->uploadMedia(['media' => '@' . $tmpImgFile], 'image'); if (!$mediaRes) { -- Gitee From b11970725015aad9ddce5981d6f82c0e6312a907 Mon Sep 17 00:00:00 2001 From: Zhuoqing Date: Sun, 8 Apr 2018 11:50:21 -0700 Subject: [PATCH 06/12] fix scan count and use mid in table --- addons/QrReferral/controller/Api.php | 19 +++++++++---------- addons/QrReferral/install.sql | 12 ++++++------ 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/addons/QrReferral/controller/Api.php b/addons/QrReferral/controller/Api.php index 8328d29..32b4b67 100755 --- a/addons/QrReferral/controller/Api.php +++ b/addons/QrReferral/controller/Api.php @@ -15,7 +15,7 @@ class Api public function message($msg = [], $param = []) { - if (isset($msgData['Ticket'])) { + if (isset($msg['Ticket'])) { //扫码事件 return $this->scanMessage($msg, $param); } @@ -27,23 +27,22 @@ class Api { $map['scene_id'] = ltrim($msg['EventKey'], 'qrscene_'); //check the QrReferral first - $referralTbl = Db::name('qr_referral_perm'); - $qr = $referralTbl->where($map)->find(); + $qrTblName = 'qr_referral_perm'; + $qr = Db::name($qrTblName)->where($map)->find(); $subsTblName = 'qr_referral_subscribe_perm'; if (empty($qr['openid'])) { - $referralTbl = Db::name('qr_referral'); - $qr = $referralTbl->where($map)->find(); + $qrTblName = 'qr_referral'; + $qr = Db::name($qrTblName)->where($map)->find(); $subsTblName = 'qr_referral_subscribe'; } if (!empty($qr['openid'])) { //increase subscribe scan count - if ($msg['Content'] == 'subscribe') { - $subsTbl = Db::name($subsTblName); + if (isset($msg['Event']) && $msg['Event'] == 'subscribe') { $subsMap['scan_openid'] = $msg['FromUserName']; - $subsInfo = $subsTbl->where($subsMap)->find(); + $subsInfo = Db::name($subsTblName)->where($subsMap)->find(); //only count the first time subscribe by our code. May need to change to check the real first subscribe if (empty($subsInfo['create_openid'])) { - $subsTbl->insert([ + Db::name($subsTblName)->insert([ 'qr_referral_id' => intval($qr['id']), 'scan_token' => intval(input('mid')), 'scan_openid' => $msg['FromUserName'], @@ -51,7 +50,7 @@ class Api 'create_openid' => $qr['openid'], 'update_time' => time(), ]); - $referralTbl->where(['id' => $qr['id']])->setInc('subscribe_cnt'); + Db::name($qrTblName)->where(['id' => $qr['id']])->setInc('subscribe_cnt'); } } $config = getAddonInfo(); diff --git a/addons/QrReferral/install.sql b/addons/QrReferral/install.sql index 61efd02..46151ca 100755 --- a/addons/QrReferral/install.sql +++ b/addons/QrReferral/install.sql @@ -1,7 +1,7 @@ CREATE TABLE IF NOT EXISTS `rh_qr_referral` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `openid` varchar(255) NOT NULL COMMENT 'openid', -`token` varchar(100) NOT NULL COMMENT 'mx 公众号 id token', +`token` int(10) NOT NULL COMMENT 'mx 公众号 id token', `date_int` int(10) unsigned NOT NULL COMMENT 'DateInInt', `qr_ticket` varchar(255) NULL COMMENT 'wx ticket', `qr_url` varchar(255) NULL COMMENT 'wx url', @@ -17,9 +17,9 @@ KEY `idx_scene` (`scene_id`) USING BTREE CREATE TABLE IF NOT EXISTS `rh_qr_referral_subscribe` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `qr_referral_id` int(10) unsigned NOT NULL COMMENT '二维码主键', -`scan_token` varchar(100) NOT NULL COMMENT 'scan mx 公众号 id token', +`scan_token` int(10) NOT NULL COMMENT 'scan mx 公众号 id token', `scan_openid` varchar(255) NOT NULL COMMENT 'scan_openid', -`create_token` varchar(100) NOT NULL COMMENT 'create mx 公众号 id token', +`create_token` int(10) NOT NULL COMMENT 'create mx 公众号 id token', `create_openid` varchar(255) NOT NULL COMMENT 'create_openid', `update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间', PRIMARY KEY (`id`), @@ -29,7 +29,7 @@ UNIQUE KEY `uk_user` (`scan_openid`) USING BTREE CREATE TABLE IF NOT EXISTS `rh_qr_referral_perm` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `openid` varchar(255) NOT NULL COMMENT 'openid', -`token` varchar(100) NOT NULL COMMENT 'mx 公众号 id token', +`token` int(10) NOT NULL COMMENT 'mx 公众号 id token', `qr_ticket` varchar(255) NULL COMMENT 'wx ticket', `qr_url` varchar(255) NULL COMMENT 'wx url', `scene_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'wx scene_id', @@ -44,9 +44,9 @@ KEY `idx_scene` (`scene_id`) USING BTREE CREATE TABLE IF NOT EXISTS `rh_qr_referral_subscribe_perm` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `qr_referral_id` int(10) unsigned NOT NULL COMMENT '二维码主键', -`scan_token` varchar(100) NOT NULL COMMENT 'scan mx 公众号 id token', +`scan_token` int(10) NOT NULL COMMENT 'scan mx 公众号 id token', `scan_openid` varchar(255) NOT NULL COMMENT 'scan_openid', -`create_token` varchar(100) NOT NULL COMMENT 'create mx 公众号 id token', +`create_token` int(10) NOT NULL COMMENT 'create mx 公众号 id token', `create_openid` varchar(255) NOT NULL COMMENT 'create_openid', `update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间', PRIMARY KEY (`id`), -- Gitee From 1d9225bba5ed9931fdc67ef1f43fcdacaf2c9337 Mon Sep 17 00:00:00 2001 From: Zhuoqing Date: Sun, 8 Apr 2018 15:18:34 -0700 Subject: [PATCH 07/12] add list view --- addons/QrReferral/controller/Index.php | 71 ++++++++++++++++--- addons/QrReferral/static/css/style.css | 0 addons/QrReferral/static/js/imgpreview.js | 20 ++++++ addons/QrReferral/view/index/listqr.html | 82 ++++++++++++++++++++++ addons/QrReferral/view/index/listscan.html | 74 +++++++++++++++++++ 5 files changed, 239 insertions(+), 8 deletions(-) create mode 100644 addons/QrReferral/static/css/style.css create mode 100644 addons/QrReferral/static/js/imgpreview.js create mode 100644 addons/QrReferral/view/index/listqr.html create mode 100644 addons/QrReferral/view/index/listscan.html diff --git a/addons/QrReferral/controller/Index.php b/addons/QrReferral/controller/Index.php index d063fff..3b10b6d 100755 --- a/addons/QrReferral/controller/Index.php +++ b/addons/QrReferral/controller/Index.php @@ -4,37 +4,92 @@ namespace addons\QrReferral\controller; use app\common\controller\Addon; use think\Db; -use think\facade\Cache; class Index extends Addon { public function listTempQr() { - + return $this->listQr('temp'); } public function listTempScan() { - + return $this->listScan('temp'); } public function listPermQr() { - + return $this->listQr('perm'); } public function listPermScan() { - + return $this->listScan('perm'); } - private function listQr() + private function listQr($qrType) { + $qrTableName = $qrType == 'perm' ? 'qr_referral_perm' : 'qr_referral'; + $dataQuery = Db::name($qrTableName)->alias('qr') + ->join('__MP_FRIENDS__ u', 'qr.openid=u.openid AND qr.token=u.mpid') + ->where('u.mpid', $this->mid) + ->field('qr.id, qr.openid, qr.token, u.id AS uid, nickname, headimgurl, qr.scene_id, qr.qr_ticket AS qr_img, qr.subscribe_cnt, qr.update_time'); + $nickname = ''; + if (!empty(input('nickname'))) { + //hoepfully the thinkphp 5 will handle sql injection for us? + $nickname = input('nickname'); + $dataQuery = $dataQuery->where('nickname', 'like', '%' . $nickname . '%'); + } + $forms = $dataQuery->order('qr.id DESC') + ->paginate(50); + $page = $forms->render(); + $data = []; + foreach ($forms as $key => $val) { + $data[$key] = $val; + $data[$key]['qr_img'] = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=' . $data[$key]['qr_img']; + $umap['openid'] = $data[$key]['openid']; + $umap['token'] = $data[$key]['token']; + $qrperm = Db::name('qr_referral_perm')->where($umap)->find(); + if (isset($qrperm['qr_ticket']) && !empty($qrperm['qr_ticket'])) { + $data[$key]['has_perm_qr'] = '有'; + } else { + $data[$key]['has_perm_qr'] = '无'; + } + } + $this->assign('nickname', $nickname); + $this->assign('page', $page); + $this->assign('qrType', $qrType); + $this->assign('data', $data); + return $this->fetch('listqr'); } - private function listScan() + private function listScan($qrType) { - + $qrTableName = $qrType == 'perm' ? 'qr_referral_subscribe_perm' : 'qr_referral_subscribe'; + $dataQuery = Db::name($qrTableName)->alias('qr') + ->join('__MP_FRIENDS__ u1', 'qr.scan_openid=u1.openid AND qr.scan_token=u1.mpid') + ->join('__MP_FRIENDS__ u2', 'qr.create_openid=u2.openid AND qr.create_token=u2.mpid') + ->where('qr.scan_token', $this->mid) + ->field('qr.id, u1.id AS scan_uid, u1.nickname AS scan_nickname, u1.headimgurl AS scan_headimgurl, qr.qr_referral_id, u2.id AS create_uid, u2.nickname AS create_nickname, u2.headimgurl AS create_headimgurl, qr.update_time'); + $nickname = ''; + if (!empty(input('nickname'))) { + //hoepfully the thinkphp 5 will handle sql injection for us? + $nickname = input('nickname'); + $dataQuery = $dataQuery->where('u1.nickname|u2.nickname', 'like', '%'. $nickname . '%'); + } + $forms = $dataQuery->order('qr.id DESC') + ->paginate(2); + $page = $forms->render(); + $data = []; + foreach ($forms as $key => $val) { + $data[$key] = $val; + } + + $this->assign('nickname', $nickname); + $this->assign('page', $page); + $this->assign('qrType', $qrType); + $this->assign('data', $data); + return $this->fetch('listscan'); } } diff --git a/addons/QrReferral/static/css/style.css b/addons/QrReferral/static/css/style.css new file mode 100644 index 0000000..e69de29 diff --git a/addons/QrReferral/static/js/imgpreview.js b/addons/QrReferral/static/js/imgpreview.js new file mode 100644 index 0000000..7d1b7d9 --- /dev/null +++ b/addons/QrReferral/static/js/imgpreview.js @@ -0,0 +1,20 @@ +this.imagePreview = function () { + $("img.preview").hover(function (e) { + $("body").append("

Image preview

"); + $("#preview") + .css("position", "absolute") + .css("top", (e.pageY + 10) + "px") + .css("left", (e.pageX + 10) + "px") + .fadeIn("fast"); + }, + function () { + $("#preview").remove(); + } + ); +}; + +// starting the script on page load +$(document).ready(function () { + imagePreview(); +}); + diff --git a/addons/QrReferral/view/index/listqr.html b/addons/QrReferral/view/index/listqr.html new file mode 100644 index 0000000..2ccf2c6 --- /dev/null +++ b/addons/QrReferral/view/index/listqr.html @@ -0,0 +1,82 @@ + + + + + + Title + {js href='/public/static/jquery/jquery-1.11.0.min.js' /} {js href='/public/static/layui/layui.js' /} {CSS href="/public/static/layui/css/layui.css" + /} {CSS href="__ADDONSTATIC__/css/style.css" /} {js href='__STATIC__/zclip/jquery.zclip.min.js' /} + + + +
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+ + + + + + + + + + + + + {if condition="($qrType == 'temp') "} + + {/if} + + + + {volist name="data" id="v" } + + + + + + + + + + + {if condition="($qrType == 'temp') "} + + {/if} + + {/volist} + +
二维码Id用户Id昵称头像场景Id二维码关注次数生成时间永久码操作
{$v.id}{$v.uid}{$v.nickname} + + {$v.scene_id} + + {$v.subscribe_cnt}{:date('Y-m-d H:i:s',$v.update_time)}{$v.has_perm_qr} + 分配永久码 +
+ {$page} +
+ {js href='__ADDONSTATIC__/js/imgpreview.js' /} + + + \ No newline at end of file diff --git a/addons/QrReferral/view/index/listscan.html b/addons/QrReferral/view/index/listscan.html new file mode 100644 index 0000000..03a2e12 --- /dev/null +++ b/addons/QrReferral/view/index/listscan.html @@ -0,0 +1,74 @@ + + + + + + Title + {js href='/public/static/jquery/jquery-1.11.0.min.js' /} {js href='/public/static/layui/layui.js' /} {CSS href="/public/static/layui/css/layui.css" + /} {CSS href="__ADDONSTATIC__/css/style.css" /} {js href='__STATIC__/zclip/jquery.zclip.min.js' /} + + + +
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + {volist name="data" id="v" } + + + + + + + + + + + + {/volist} + +
扫码Id扫码用户Id扫码用户昵称扫码用户头像二维码Id来源用户Id来源用户昵称来源用户头像时间
{$v.id}{$v.scan_uid}{$v.scan_nickname} + + {$v.qr_referral_id}{$v.create_uid}{$v.create_nickname} + + {:date('Y-m-d H:i:s',$v.update_time)}
+ {$page} +
+ {js href='__ADDONSTATIC__/js/imgpreview.js' /} + + + \ No newline at end of file -- Gitee From 1d6182da73d3e7c6c43d99c10d6f9b90d0bfd699 Mon Sep 17 00:00:00 2001 From: Zhuoqing Date: Sun, 8 Apr 2018 15:47:19 -0700 Subject: [PATCH 08/12] rename utils.js --- addons/QrReferral/static/js/{imgpreview.js => utils.js} | 8 ++++++++ 1 file changed, 8 insertions(+) rename addons/QrReferral/static/js/{imgpreview.js => utils.js} (71%) diff --git a/addons/QrReferral/static/js/imgpreview.js b/addons/QrReferral/static/js/utils.js similarity index 71% rename from addons/QrReferral/static/js/imgpreview.js rename to addons/QrReferral/static/js/utils.js index 7d1b7d9..ac4521a 100644 --- a/addons/QrReferral/static/js/imgpreview.js +++ b/addons/QrReferral/static/js/utils.js @@ -13,6 +13,14 @@ this.imagePreview = function () { ); }; +function assignPermQr(openid) { + layer.msg('分配永久码中...') + $.post("{:addonUrl('assignPermQr')}", { 'openid': openid }, function (res) { + layer.closeAll('loading'); + layer.msg(res.msg) + }) +} + // starting the script on page load $(document).ready(function () { imagePreview(); -- Gitee From 36638185ff6e1bb2e90f3130eec057d022747026 Mon Sep 17 00:00:00 2001 From: Zhuoqing Date: Sun, 8 Apr 2018 17:34:28 -0700 Subject: [PATCH 09/12] paginate issue and assign permQr --- addons/QrReferral/controller/Api.php | 4 +- addons/QrReferral/controller/Index.php | 80 +++++++++++++++------- addons/QrReferral/static/js/utils.js | 21 ++++-- addons/QrReferral/view/index/listqr.html | 12 ++-- addons/QrReferral/view/index/listscan.html | 7 +- 5 files changed, 84 insertions(+), 40 deletions(-) diff --git a/addons/QrReferral/controller/Api.php b/addons/QrReferral/controller/Api.php index 32b4b67..d849e6d 100755 --- a/addons/QrReferral/controller/Api.php +++ b/addons/QrReferral/controller/Api.php @@ -179,7 +179,7 @@ class Api return true; } - private function addQrPoster($input) + public function addQrPoster($input) { $qrcodeWXToken = $input['qrcodeWXToken']; $qrInsertX1 = $input['qrInsertX1']; @@ -215,7 +215,7 @@ class Api } $umap['update_time'] = time(); if (!isset($existInfo['id'])) { - $existInfo['id'] = Db::name($qrtableName)->insert($umap); + $existInfo['id'] = Db::name($qrtableName)->insertGetId($umap); } $qrcodeRetriveUrl = ''; $wxQrMid = intval($qrcodeWXToken); diff --git a/addons/QrReferral/controller/Index.php b/addons/QrReferral/controller/Index.php index 3b10b6d..a3ae908 100755 --- a/addons/QrReferral/controller/Index.php +++ b/addons/QrReferral/controller/Index.php @@ -2,6 +2,7 @@ namespace addons\QrReferral\controller; +use addons\QrReferral\controller\Api; use app\common\controller\Addon; use think\Db; @@ -27,6 +28,42 @@ class Index extends Addon return $this->listScan('perm'); } + public function assignPermQr() + { + $config = getAddonInfo(); + $config = $config['mp_config']; + $qrcodeWXToken = $config['qrcodeWXToken']; + $qrInsertX1 = $config['qrInsertX1']; + $qrInsertY1 = $config['qrInsertY1']; + $qrInsertX2 = $config['qrInsertX2']; + $qrInsertY2 = $config['qrInsertY2']; + $basePosterSitePath = $config['basePosterSitePath']; + $refOpenid = input('openid'); + $wxToken = input('mid'); + $qrType = 'perm'; + + $param = [ + 'qrcodeWXToken' => $qrcodeWXToken, + 'qrInsertX1' => $qrInsertX1, + 'qrInsertY1' => $qrInsertY1, + 'qrInsertX2' => $qrInsertX2, + 'qrInsertY2' => $qrInsertY2, + 'refOpenid' => $refOpenid, + 'qrType' => $qrType, + 'wxToken' => $wxToken, + 'sceneIdAdd' => $qrType == 'perm' ? $config['permSceneIdAdd'] : $config['sceneIdAdd'], + 'basePosterSitePath' => $basePosterSitePath, + ]; + $api = new Api(); + $res = $api->addQrPoster($param); + if (empty($res['media_id'])) { + ajaxMsg('0', $res['err']); + return false; + } + ajaxMsg('1', '操作成功'); + return true; + } + private function listQr($qrType) { $qrTableName = $qrType == 'perm' ? 'qr_referral_perm' : 'qr_referral'; @@ -40,22 +77,21 @@ class Index extends Addon $nickname = input('nickname'); $dataQuery = $dataQuery->where('nickname', 'like', '%' . $nickname . '%'); } - $forms = $dataQuery->order('qr.id DESC') - ->paginate(50); - $page = $forms->render(); - $data = []; - foreach ($forms as $key => $val) { - $data[$key] = $val; - $data[$key]['qr_img'] = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=' . $data[$key]['qr_img']; - $umap['openid'] = $data[$key]['openid']; - $umap['token'] = $data[$key]['token']; - $qrperm = Db::name('qr_referral_perm')->where($umap)->find(); - if (isset($qrperm['qr_ticket']) && !empty($qrperm['qr_ticket'])) { - $data[$key]['has_perm_qr'] = '有'; - } else { - $data[$key]['has_perm_qr'] = '无'; - } - } + $data = $dataQuery->order('qr.id DESC') + ->paginate(25, false, ['path' => $_SERVER['DOCUMENT_URI'] . $_SERVER['PATH_INFO'], 'query' => ['nickname' => $nickname]]) + ->each(function ($item, $key) { + $item['qr_img'] = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=' . $item['qr_img']; + $umap['openid'] = $item['openid']; + $umap['token'] = $item['token']; + $qrperm = Db::name('qr_referral_perm')->where($umap)->find(); + if (isset($qrperm['qr_ticket']) && !empty($qrperm['qr_ticket'])) { + $item['has_perm_qr'] = '有'; + } else { + $item['has_perm_qr'] = '无'; + } + return $item; + }); + $page = $data->render(); $this->assign('nickname', $nickname); $this->assign('page', $page); @@ -76,16 +112,12 @@ class Index extends Addon if (!empty(input('nickname'))) { //hoepfully the thinkphp 5 will handle sql injection for us? $nickname = input('nickname'); - $dataQuery = $dataQuery->where('u1.nickname|u2.nickname', 'like', '%'. $nickname . '%'); + $dataQuery = $dataQuery->where('u1.nickname|u2.nickname', 'like', '%' . $nickname . '%'); } - $forms = $dataQuery->order('qr.id DESC') - ->paginate(2); + $data = $dataQuery->order('qr.id DESC') + ->paginate(25, false, ['path' => $_SERVER['DOCUMENT_URI'] . $_SERVER['PATH_INFO'], 'query' => ['nickname' => $nickname]]); $page = $forms->render(); - $data = []; - foreach ($forms as $key => $val) { - $data[$key] = $val; - } - + $this->assign('nickname', $nickname); $this->assign('page', $page); $this->assign('qrType', $qrType); diff --git a/addons/QrReferral/static/js/utils.js b/addons/QrReferral/static/js/utils.js index ac4521a..e56a047 100644 --- a/addons/QrReferral/static/js/utils.js +++ b/addons/QrReferral/static/js/utils.js @@ -6,23 +6,30 @@ this.imagePreview = function () { .css("top", (e.pageY + 10) + "px") .css("left", (e.pageX + 10) + "px") .fadeIn("fast"); - }, + }, function () { $("#preview").remove(); } ); }; -function assignPermQr(openid) { - layer.msg('分配永久码中...') - $.post("{:addonUrl('assignPermQr')}", { 'openid': openid }, function (res) { +function assignPermQr(assignUrl, openid) { + layer.open({ + type: 3, + content: "分配永久码中..." + }); + $.post(assignUrl, { 'openid': openid }).done(function (res) { layer.closeAll('loading'); - layer.msg(res.msg) - }) + layer.msg(res.msg); + }).fail(function (res) { + layer.closeAll('loading'); + console.error(res); + layer.msg('Error'); + }); } // starting the script on page load $(document).ready(function () { imagePreview(); -}); +}); diff --git a/addons/QrReferral/view/index/listqr.html b/addons/QrReferral/view/index/listqr.html index 2ccf2c6..7882467 100644 --- a/addons/QrReferral/view/index/listqr.html +++ b/addons/QrReferral/view/index/listqr.html @@ -4,7 +4,7 @@ Title - {js href='/public/static/jquery/jquery-1.11.0.min.js' /} {js href='/public/static/layui/layui.js' /} {CSS href="/public/static/layui/css/layui.css" + {js href='/public/static/jquery/jquery-2.1.0.min.js' /} {js href='/public/static/layui/layui.js' /} {CSS href="/public/static/layui/css/layui.css" /} {CSS href="__ADDONSTATIC__/css/style.css" /} {js href='__STATIC__/zclip/jquery.zclip.min.js' /} @@ -62,21 +62,25 @@ {$v.has_perm_qr} {if condition="($qrType == 'temp') "} -
分配永久码 + {/if} {/volist} - {$page} + {$page|raw} {js href='__ADDONSTATIC__/js/imgpreview.js' /} + function permQr(openid) { + assignPermQr("{:addonUrl('assignPermQr')}", openid); + } + + {js href='__ADDONSTATIC__/js/utils.js' /} \ No newline at end of file diff --git a/addons/QrReferral/view/index/listscan.html b/addons/QrReferral/view/index/listscan.html index 03a2e12..2021367 100644 --- a/addons/QrReferral/view/index/listscan.html +++ b/addons/QrReferral/view/index/listscan.html @@ -4,7 +4,7 @@ Title - {js href='/public/static/jquery/jquery-1.11.0.min.js' /} {js href='/public/static/layui/layui.js' /} {CSS href="/public/static/layui/css/layui.css" + {js href='/public/static/jquery/jquery-2.1.0.min.js' /} {js href='/public/static/layui/layui.js' /} {CSS href="/public/static/layui/css/layui.css" /} {CSS href="__ADDONSTATIC__/css/style.css" /} {js href='__STATIC__/zclip/jquery.zclip.min.js' /} @@ -61,14 +61,15 @@ {/volist} - {$page} + {$page|raw} {js href='__ADDONSTATIC__/js/imgpreview.js' /} + + {js href='__ADDONSTATIC__/js/utils.js' /} \ No newline at end of file -- Gitee From c5af8dcf08a6513406dafb0ed187f9a8ce813eae Mon Sep 17 00:00:00 2001 From: Zhuoqing Date: Sun, 8 Apr 2018 17:35:01 -0700 Subject: [PATCH 10/12] async task entry point --- asynctask.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 asynctask.php diff --git a/asynctask.php b/asynctask.php new file mode 100644 index 0000000..6a8d884 --- /dev/null +++ b/asynctask.php @@ -0,0 +1,25 @@ + +// +---------------------------------------------------------------------- +namespace think; + +//keep executing the async task +//used for wechat qrscene hack +//for security this path should be configured to be local access only +ignore_user_abort(true); +//如果出现一片空白,请检查PHP版本 +//环境要求:PHP>=5.6 mysql 建议在5.5以上 +define('ENTR_PATH', ''); +define('ROOT_PATH', __DIR__ . '/'); +define('DS', DIRECTORY_SEPARATOR); +define('APP_PATH', __DIR__ . '/application/'); +define('ADDON_PATH', __DIR__ . '/addons/'); +define('ADDON_ROUTE', '/app/'); +define('EXTEND_PATH', ROOT_PATH . 'extend/'); +require __DIR__ . '/thinkphp/base.php'; +Container::get('app', [APP_PATH])->run()->send(); -- Gitee From 8a6b4131858c62aae5ca6fe9aea9689798b79910 Mon Sep 17 00:00:00 2001 From: Zhuoqing Date: Sun, 8 Apr 2018 17:45:14 -0700 Subject: [PATCH 11/12] fix --- addons/QrReferral/controller/Index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/QrReferral/controller/Index.php b/addons/QrReferral/controller/Index.php index a3ae908..28f3357 100755 --- a/addons/QrReferral/controller/Index.php +++ b/addons/QrReferral/controller/Index.php @@ -116,7 +116,7 @@ class Index extends Addon } $data = $dataQuery->order('qr.id DESC') ->paginate(25, false, ['path' => $_SERVER['DOCUMENT_URI'] . $_SERVER['PATH_INFO'], 'query' => ['nickname' => $nickname]]); - $page = $forms->render(); + $page = $data->render(); $this->assign('nickname', $nickname); $this->assign('page', $page); -- Gitee From 8ca4f8d45839c688694d85674fea6933edb76405 Mon Sep 17 00:00:00 2001 From: Zhuoqing Date: Sun, 8 Apr 2018 17:54:57 -0700 Subject: [PATCH 12/12] ignore uploads folder --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 8dd6ec8..b80f8ee 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ config/database.php runtime/ .vscode/launch.json data/sql.sql +uploads/ -- Gitee