From 485d0e3743495ddda1e63d3b6d083bd11fed67a1 Mon Sep 17 00:00:00 2001 From: guange <8863824@gmail.com> Date: Fri, 24 Jun 2016 14:59:50 +0800 Subject: [PATCH] =?UTF-8?q?ticket=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/entities/course.rb | 1 + app/controllers/wechats_controller.rb | 47 ++++++++++++------- app/models/course.rb | 13 +++++ app/services/courses_service.rb | 3 ++ public/assets/wechat/invite_code.html | 4 +- .../wechat/controllers/invite_code.js | 16 +++++++ 6 files changed, 66 insertions(+), 18 deletions(-) diff --git a/app/api/mobile/entities/course.rb b/app/api/mobile/entities/course.rb index fc5c95ef5..487a75c4d 100644 --- a/app/api/mobile/entities/course.rb +++ b/app/api/mobile/entities/course.rb @@ -46,6 +46,7 @@ module Mobile course_expose :term course_expose :time course_expose :invite_code + course_expose :qrcode course_expose :updated_at course_expose :course_student_num expose :teacher, using: Mobile::Entities::User do |c, opt| diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 75a8bac92..120de197a 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -12,19 +12,8 @@ class WechatsController < ActionController::Base uw = user_binded?(request[:FromUserName]) if !uw return sendBind() - elsif (course = join_class(content, uw.user)) && course - news = (1..1).each_with_object([]) { |n, memo| memo << { title: '恭喜您成功加入班级,开始学习吧!', - content: "课程名称: #{course.name}\n班级名称: #{course.name}\n任课老师: #{course.teacher.show_name}\n进入班级,和小伙伴愉快的学习吧!"} } - return request.reply.news(news) do |article, n, index| # article is return object - url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{ROOT_URL+'/wechat/user_activities?id='+course.id.to_s}&response_type=code&scope=snsapi_base&state=myclass#wechat_redirect" - pic_url = "#{ROOT_URL}/images/wechat/class.jpg" - article.item title: "#{n[:title]}", - description: n[:content], - pic_url: pic_url, - url: url - end else - return request.reply.text "您的意见已收到,感谢您的反馈!" # Just echo + return join_class(content, uw.user) end rescue => e return request.reply.text e @@ -57,7 +46,16 @@ class WechatsController < ActionController::Base # When subscribe user scan scene_id in public account on :scan, with: 'scene_id' do |request, ticket| - request.reply.text "Subscribe user #{request[:FromUserName]} Ticket #{ticket}" + begin + uw = user_binded?(request[:FromUserName]) + if !uw + return sendBind() + else + return join_class({ticket: ticket}, uw.user) + end + rescue => e + return request.reply.text e + end end # When no any on :scan responder can match subscribe user scaned scene_id @@ -185,14 +183,31 @@ class WechatsController < ActionController::Base end end - def join_class(content, user) + def join_class(params, user) + course = nil + course = Course.where(qrcode: params[:ticket]) if params[:ticket] + course = Course.where(invite_code: params[:invite_code]) if params[:invite_code] + raise "课程不存在" if course.blank? + cs = CoursesService.new - status = cs.join_course({invite_code: content.upcase.strip}, user) + status = cs.join_course(course.invite_code, user) logger.info status if status[:state] != 0 raise CoursesService::JoinCourseError.message(status[:state]) end - status[:course] + + course = status[:course] + news = (1..1).each_with_object([]) { |n, memo| memo << { title: '恭喜您成功加入班级,开始学习吧!', + content: "课程名称: #{course.name}\n班级名称: #{course.name}\n任课老师: #{course.teacher.show_name}\n进入班级,和小伙伴愉快的学习吧!"} } + return request.reply.news(news) do |article, n, index| # article is return object + url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{ROOT_URL+'/wechat/user_activities?id='+course.id.to_s}&response_type=code&scope=snsapi_base&state=myclass#wechat_redirect" + pic_url = "#{ROOT_URL}/images/wechat/class.jpg" + article.item title: "#{n[:title]}", + description: n[:content], + pic_url: pic_url, + url: url + end + end ### controller method diff --git a/app/models/course.rb b/app/models/course.rb index d0266b381..b8ec4181d 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -466,6 +466,19 @@ class Course < ActiveRecord::Base code end + + def generate_qrcode + ticket = self.qrcode + if !ticket || ticket.size < 10 + response = Wechat.api.qrcode_create_scene(invite_code) + logger.debug "response = #{response}" + self.qrcode = response['ticket'] + save! && reload + ticket = qrcode + end + ticket + end + end diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb index 0eb699459..3c74c328c 100644 --- a/app/services/courses_service.rb +++ b/app/services/courses_service.rb @@ -165,6 +165,9 @@ class CoursesService #显示课程 def show_course(params,current_user) course = Course.find(params[:id]) + course.generate_invite_code + course.generate_qrcode + if course.school work_unit = course.school.name else diff --git a/public/assets/wechat/invite_code.html b/public/assets/wechat/invite_code.html index 116dad8da..6f56f7e86 100644 --- a/public/assets/wechat/invite_code.html +++ b/public/assets/wechat/invite_code.html @@ -2,12 +2,12 @@