Class: EricWeixin::TwoDimensionCode
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- EricWeixin::TwoDimensionCode
- Defined in:
- app/models/eric_weixin/two_dimension_code.rb
Class Method Summary collapse
-
.get_long_time_two_dimension_code(options) ⇒ Object
获取永久性二维码对象.
-
.get_short_time_two_dimension_code(options) ⇒ Object
获取临时二维码对象.
-
.short_url(options) ⇒ Object
长URL转短URL.
Instance Method Summary collapse
Class Method Details
.get_long_time_two_dimension_code(options) ⇒ Object
获取永久性二维码对象. 典型使用场景如下: 1.第一步调用此方法先创建/获取二维码对象。 2.使用二维码对象获取二维码下载、展示链接。 如:two_dimension_code.image_url 3.尽情享受带参数的永久二维码吧,很简单,有木有?
参数描述:
-
app_id 微信app_id
-
scene_str 场景值,字符串长度不能超过64位,亦不能为空。
-
action_info 场景值描述(可选)
调用示例:
::EricWeixin::TwoDimensionCode.get_long_time_two_dimension_code app_id: 'wx51729870d9012531', scene_str: 'abc', action_info: 'hello'
::EricWeixin::TwoDimensionCode.get_long_time_two_dimension_code app_id: 'wx51729870d9012531', scene_str: 'bus'
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'app/models/eric_weixin/two_dimension_code.rb', line 37 def self.get_long_time_two_dimension_code BusinessException.raise '场景值不能为空' if [:scene_str].blank? BusinessException.raise '场景值不能超过64字符' if [:scene_str].length > 63 ::EricWeixin::TwoDimensionCode.transaction do public_account = ::EricWeixin::PublicAccount.find_by_weixin_app_id [:app_id] BusinessException.raise 'app_id不存在' if public_account.blank? codes = public_account.two_dimension_codes.where scene_str: [:scene_str], action_name: "QR_LIMIT_STR_SCENE" code = if codes.blank? code = ::EricWeixin::TwoDimensionCode.new weixin_public_account_id: public_account.id, action_name: "QR_LIMIT_STR_SCENE", action_info: [:action_info], scene_str: [:scene_str], expire_at: Time.now.chinese_format code.save! code else codes[0] end if not code.ticket.blank? return code #永久性二维码,不需要再次进行更新。 end token = ::EricWeixin::AccessToken.get_valid_access_token_by_app_id app_id: [:app_id] url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=#{token}" json = {:action_name => 'QR_LIMIT_STR_SCENE', :action_info => { :scene => { :scene_str => [:scene_str] } }}.to_json response = RestClient.post url, json response = JSON.parse response.body pp response code.ticket = response["ticket"] code.url = response["url"] code.save! code end end |
.get_short_time_two_dimension_code(options) ⇒ Object
获取临时二维码对象. 典型使用场景如下: 1.第一步调用此方法先创建/获取二维码对象。 2.使用二维码对象获取二维码下载、展示链接。 如:two_dimension_code.image_url 3.尽情享受带参数的永久二维码吧,很简单,有木有?
参数描述:
-
app_id 微信app_id
-
scene_id 场景值,应该是一个数字
-
expire_seconds 过期时间,默认为604800秒,可选
调用示例:
::EricWeixin::TwoDimensionCode.get_short_time_two_dimension_code app_id: 'wx51729870d9012531', scene_id: 1, expire_seconds: 3600
::EricWeixin::TwoDimensionCode.get_short_time_two_dimension_code app_id: 'wx51729870d9012531', scene_id: 2300
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'app/models/eric_weixin/two_dimension_code.rb', line 90 def self.get_short_time_two_dimension_code BusinessException.raise '场景值不能为空' if [:scene_id].blank? ::EricWeixin::TwoDimensionCode.transaction do public_account = ::EricWeixin::PublicAccount.find_by_weixin_app_id [:app_id] BusinessException.raise 'app_id不存在' if public_account.blank? #查询有效期内的临时二维码 codes = public_account.two_dimension_codes.where ["scene_id = ? and action_name = ? and expire_at > ?", [:scene_id], "QR_SCENE", Time.now.chinese_format ] code = if codes.blank? code = ::EricWeixin::TwoDimensionCode.new weixin_public_account_id: public_account.id, action_name: "QR_SCENE", scene_id: [:scene_id], expire_at: (Time.now + ([:expire_seconds]||604800).to_i) code.save! code else codes[0] end if not code.ticket.blank? return code end token = ::EricWeixin::AccessToken.get_valid_access_token_by_app_id app_id: [:app_id] url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=#{token}" json = {:action_name => 'QR_SCENE', :expire_seconds => ([:expire_seconds]||604800).to_i, :action_info => { :scene => { :scene_id => [:scene_id] } }}.to_json response = RestClient.post url, json response = JSON.parse response.body pp response code.ticket = response["ticket"] code.url = response["url"] code.expire_at = Time.now + ([:expire_seconds]||604800).to_i code.save! code end end |
.short_url(options) ⇒ Object
长URL转短URL.
参数说明:
-
app_id 微信公众账号的app_id
-
url 需要转短url的链接
调用示例:
EricWeixin::TwoDimensionCode.short_url app_id: 'wx51729870d9012531', url: 'http://mp.wz.qq.com/wiki/10/165c9b15eddcfbd8699ac12b0bd89ae6.html'
144 145 146 147 148 149 150 |
# File 'app/models/eric_weixin/two_dimension_code.rb', line 144 def self.short_url access_token = ::EricWeixin::AccessToken.get_valid_access_token_by_app_id app_id: [:app_id] url = "https://api.weixin.qq.com/cgi-bin/shorturl?access_token=#{access_token}" response = RestClient.post url, {action: "long2short", long_url: [:url]}.to_json response = JSON.parse(response.body) response["short_url"] end |
Instance Method Details
#check_scene_str_length ⇒ Object
7 8 9 10 |
# File 'app/models/eric_weixin/two_dimension_code.rb', line 7 def check_scene_str_length return if self.scene_str.blank? BusinessException.raise '永久性二维码场景值不能超过64位' if self.scene_str.length > 64 end |
#encode_ticket ⇒ Object
12 13 14 |
# File 'app/models/eric_weixin/two_dimension_code.rb', line 12 def encode_ticket CGI::escape(self.ticket) end |
#image_url ⇒ Object
获取二维码网址.
参数说明
-
无。
调用示例
::EricWeixin::TwoDimensionCode.image_url
21 22 23 |
# File 'app/models/eric_weixin/two_dimension_code.rb', line 21 def image_url "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=#{self.encode_ticket}" end |