'tp', 'value' => 'b_m'//bind_merchant ] ]; $weapp_path = qrcode('', 'app/pages/setting/authorization', $qrcode_data, $dir, 'weapp'); return [ 'url' => $weapp_path ]; } catch (AdminException $e) { Log::write('获取推广微信小程序二维码error' . $e->getMessage() . $e->getFile() . $e->getLine() . 'params:'); throw new AdminException($e->getMessage() . $e->getFile() . $e->getLine() . 'params:'); } } /** * 网页授权 * @param string $url * @param string $scopes * @return array */ public function getWechatUrl() { $key = (new CoreScanService())->scan(ScanDict::ADMIN_MERCHANT_BIND_WECHAT, [], 300); $url = (new CoreWechatServeService())->scan( $key, 300)['url'] ?? ''; return [ 'url' => $url, ]; } public function sendBindSms($mobile) { $type = 'bind_merchant'; $code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT);// 生成4位随机数,左侧补0 (new \app\service\core\notice\NoticeService())->send('verify_code', ['code' => $code, 'mobile' => $mobile]); //将验证码存入缓存 $key = md5(uniqid('', true)); $cache_tag_name = "admin_mobile_key" . $mobile . $type; $this->clearMobileCode($mobile, $type); Cache::tag($cache_tag_name)->set($key, ['mobile' => $mobile, 'code' => $code, 'type' => $type], 600); Log::write('bind_merchant--mobile:' . $mobile . ':send_bind_sms_code:' . $code); return [ 'key' => $key, 'mobile' => $mobile, ]; } public function clearMobileCode($mobile, $type) { $cache_tag_name = "admin_mobile_key" . $mobile . $type; Cache::tag($cache_tag_name)->clear(); } /** * 校验手机验证码 * @param string $mobile * @return true */ public function checkMobileCode($params) { $mobile = $params['mobile'] ?? ''; if (empty($mobile)) throw new AuthException('MOBILE_NEEDED'); $mobile_key = $params['mobile_key']; $mobile_code = $params['mobile_code']; if (empty($mobile_key) || empty($mobile_code)) throw new AuthException('MOBILE_CAPTCHA_ERROR'); $cache = Cache::get($mobile_key); if (empty($cache)) throw new AuthException('MOBILE_CAPTCHA_ERROR'); $temp_mobile = $cache['mobile']; $temp_code = $cache['code']; $temp_type = $cache['type']; if ($temp_mobile != $mobile || $temp_code != $mobile_code) throw new AuthException('MOBILE_CAPTCHA_ERROR'); (new CoreNoticeBindMerchantService())->bindAccount($mobile, BindMerchantDict::SMS); $this->clearMobileCode($temp_mobile, $temp_type); return true; } /** * 绑定商户通知账户 * @return int[] */ public function merchantBindInfo() { $return = [ 'wechat_openid' => '', 'weapp_openid' => '', 'mobile' => '', ]; $bind_info = (new CoreNoticeBindMerchantService())->getInfo(); if (!empty($bind_info['wechat_openid'])) { $return['wechat_openid'] = $bind_info['wechat_openid']; } if (!empty($bind_info['weapp_openid'])) { $return['weapp_openid'] = $bind_info['weapp_openid']; } if (!empty($bind_info['mobile'])) { $return['mobile'] = $bind_info['mobile']; } return $return; } /** * 解绑商户通知账户 * @param $data * @return bool */ public function unBindMerchant($data) { return (new CoreNoticeBindMerchantService())->unBindAccount($data); } }