ticket处理

This commit is contained in:
guange 2016-06-24 14:59:50 +08:00
parent e21f4e0b4d
commit 485d0e3743
6 changed files with 66 additions and 18 deletions

View File

@ -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|

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -2,12 +2,12 @@
<div class="qr-code-wrap">
<div class="qr-code-box">
<div class="share-class-name">{{course.name}}</div>
<div class="qr-img-wrap"><img src="/images/wechat/QR-code.jpg" width="152" class="qr-code-img" /></div>
<div class="qr-img-wrap"><img ng-src="https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={{course.qrcode}}" width="152" class="qr-code-img" /></div>
<div class="invitation-code-wrap">邀请码:{{course.invite_code}}</div>
</div>
</div>
<div class="share-code-wrap">
<a href="javascript:void(0);" class="share-code-btn">分享邀请码</a>
<a ng-click="share()" href="javascript:void(0);" class="share-code-btn">分享邀请码</a>
<div class="share-code-instruction"> 1.将此页面分享给好友,邀请好友加入班级<br />
2.通过微信扫一扫加入班级<br />
3.输入邀请码加入班级</div>

View File

@ -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);
});
}
}]);