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 @@
-
+
邀请码:{{course.invite_code}}
- 分享邀请码 + 分享邀请码
1.将此页面分享给好友,邀请好友加入班级
2.通过微信扫一扫加入班级
3.输入邀请码加入班级
diff --git a/public/javascripts/wechat/controllers/invite_code.js b/public/javascripts/wechat/controllers/invite_code.js index b21653b1e..1b92f592c 100644 --- a/public/javascripts/wechat/controllers/invite_code.js +++ b/public/javascripts/wechat/controllers/invite_code.js @@ -15,4 +15,20 @@ app.controller('InviteCodeController', ['$scope','$http', '$routeParams','config } ); + vm.share = function(){ + window.WeixinJSBridge.invoke('sendAppMessage',{ + 'appid': 'wxf694495398c7d470', // 公众号appID + 'type': 'link', // 非必填,music,vido或link,默认为link。 + 'data_url': '', // 非必填,连接地址,如音乐的mp3数据地址,供内置播放器使用 + 'img_url': 'http://pnewsapp.tc.qq.com/newsapp_bt/0/9963967/640', // 缩略图地址 + 'img_height':370, // 缩略图高度 + 'img_width':550, // 缩略图宽度 + 'link':'http://view.inews.qq.com/a/WXN2013101101385701', // 链接地址 + 'desc':'desc', // 描述 + 'title':'title' // 标题 + },function(res){ + //alert(res.err_msg); + }); + } + }]);