eric_weixin 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6775d0e610f51738e488e722f58f34a0db552ab3
4
- data.tar.gz: ca0e47cab7ee7cad6429a901c0f37d9ca198ae57
3
+ metadata.gz: 04e1abdd9c635cd4590d5c0195ad1ffdfdb7403c
4
+ data.tar.gz: 334908139a06070d009af276bb0854879b59c431
5
5
  SHA512:
6
- metadata.gz: 80a532952c4b832ae691ee11c997bad009cc2f11562f703e432774ace11802f0c18b9e0ddf08bfe7de2fcd7f746a122d271667ea9c8fdf76a3083de70c7e8662
7
- data.tar.gz: 55e468000e92ac97b1b5bfc03ce86a9a70937efd913b63e9b62b25195c77519bf02eb1f6700ce66d3990c2ffb870f20bf468f91ec0de75d9f564dd4807742d10
6
+ metadata.gz: baf9f37558801003173f17a46ba2c44356e9cd45da49bf7d957e4675560c01e53df73f28e5ef85ea0b42ffa9159d3fb352b927c5d46ddf56e2679256e53bb1e2
7
+ data.tar.gz: e1231514d5bca951aa94c7072b53e5b675f0551da1ae183f0ef5b6c394c12075ce8096424e29d66c601c2961d9220c408709d9637abd8b1e3c6f0ef9fb7a7429
data/README.rdoc CHANGED
@@ -3,9 +3,11 @@
3
3
  目前EricWeixin已封装了认证服务号80%以上的接口,并且有一套后台管理界面与功能自成体系。
4
4
  * 官网暂无。
5
5
  * 大部分功能正在研发中。
6
+ * 要求数据库支持 utf8mb4 编码格式。 用于表情存储。 mysql 要求在 5.5及以上版本。
6
7
 
7
8
  == requirements
8
9
  从大的情况来看,基本上适用于rails4.1.4及以上版本。我自己则是在4.1.4版本上进行研发。
10
+ Gem 中使用了delayed_job 作为队列机制,用来加快响应速度。 在项目中需要配置好队列。具体可参考:
9
11
  细节待更新。
10
12
 
11
13
  ==使用方式
@@ -31,6 +33,8 @@
31
33
  * 微信小店商品刷新 /eric_weixin/cms/weixin/xiaodian/products
32
34
  * 微信用户展示 /eric_weixin/cms/weixin/weixin_users
33
35
 
36
+ ===客户展示链接
37
+ * 查看"我的订单" eric_weixin/weixin/orders?openid=<OPENID>
34
38
 
35
39
  ===微信小店的初始化
36
40
  * 首先对所经营的分类进行归类,并且把腾讯分类同步至数据库。为了避免分类过多,一般只同步自己行业的大类,大类编号请自查,如儿童玩具大类,食品类两类更新如下:
@@ -48,11 +52,16 @@ EricWeixin::Xiaodian::Order.get_order_list_and_update nil, nil ,nil ,'公众账
48
52
  * 先在项目根目录新建一个名字叫ca的目录,并设置权限,让应用程序可读。 ca目录用于存放微信官方密钥证书,主要用于发红包过程中的通信加密。
49
53
  * 在weixin_public_account中设置:mch_id: 商户号, mch_key:在商户后台写的32位的那个密码,host_name_wich_schema: 当前域名,在回调时需要参考此参数。
50
54
  * 调用方式:
51
- EricWeixin::RedpackOrder.create_redpack_order wishing: 'xxx',
52
- client_ip: '127.0.0.1', # 换成自己服务器ip
53
- act_name: '过年送红包',
54
- remark: '一起开心一下,祝新年快乐',
55
- send_name: 'U果源',
56
- re_openid: openid, # 收红包人的openid
57
- total_amount: 100 # 金额: 单位(分)
58
- * 定时获取红包信息:使用EricWeixin::RedpackOrder的实例调用 get_info 信息。
55
+ EricWeixin::RedpackOrder.create_redpack_order wishing: 'xxx',
56
+ client_ip: '127.0.0.1', # 换成自己服务器ip
57
+ act_name: '过年送红包',
58
+ remark: '一起开心一下,祝新年快乐',
59
+ send_name: 'U果源',
60
+ re_openid: openid, # 收红包人的openid
61
+ total_amount: 100 # 金额: 单位(分)
62
+ * 定时获取红包信息:使用EricWeixin::RedpackOrder的实例调用 get_info 信息。
63
+
64
+ ===队列配置
65
+ * 队列配置详情: https://github.com/collectiveidea/delayed_job。
66
+ * 可以起多个任务:
67
+
@@ -0,0 +1,72 @@
1
+ .xiaodian_orders{
2
+ width: 100%;
3
+ margin: 0px;
4
+ height: 100%;
5
+ background-color: #f2f2f2;
6
+ .no_xiaodian_order{
7
+ display: table;
8
+ height: 100%;
9
+ width: 100%;
10
+ text-align: center;
11
+ .no_order_suggestion{
12
+ display: table-cell;
13
+ vertical-align: middle;
14
+ }
15
+ }
16
+ .xiaodian_order{
17
+ font-size: 12px;
18
+ background: white;
19
+ border-bottom: 1px solid #e7e7e7;
20
+ margin-bottom: .8rem;
21
+ padding: .17rem .4rem;
22
+ img{
23
+ float: left;
24
+ width: 90px;
25
+ }
26
+ .product_info-list{
27
+
28
+ .product_info-title{
29
+ overflow: hidden;
30
+ .product_info-name{
31
+ float: left;
32
+ font-size: 16px;
33
+ }
34
+ .product_info-time{
35
+ float: right;
36
+ color: #999;
37
+ }
38
+ }
39
+ .product_info-description{
40
+ overflow: hidden;
41
+ .product_info-part{
42
+ float: left;
43
+ color: #999;
44
+ margin-right: 10px;
45
+ }
46
+ }
47
+
48
+ }
49
+ .user_info-list{
50
+ overflow: hidden;
51
+ .user_info-user{
52
+ overflow: hidden;
53
+ .user_info-part{
54
+ float: left;
55
+ width: 50%;
56
+ }
57
+ }
58
+ .user_info-address{
59
+ float: left;
60
+ }
61
+
62
+ }
63
+ .delivery_info-list{
64
+ overflow: hidden;
65
+ .delivery_info-part{
66
+ float: left;
67
+ width: 50%;
68
+ }
69
+ }
70
+ }
71
+ }
72
+
@@ -23,7 +23,7 @@ class EricWeixin::Cms::Weixin::MediaNewsController < EricWeixin::Cms::BaseContro
23
23
  options[:weixin_public_account_id] = params[:public_account_id]
24
24
  options[:nickname] = params[:nickname]
25
25
  @weixin_users = ::EricWeixin::WeixinUser.where(weixin_public_account_id: params[:public_account_id])
26
- @weixin_users = @weixin_users.where("nickname like ?", "%#{CGI::escape(params[:nickname])}%") unless params[:nickname].blank?
26
+ @weixin_users = @weixin_users.where("nickname like ?", "%#{params[:nickname]}%") unless params[:nickname].blank?
27
27
  render partial: 'select_user'
28
28
  rescue Exception=>e
29
29
  dispose_exception e
@@ -22,4 +22,28 @@ class EricWeixin::Cms::Weixin::WeixinUsersController < EricWeixin::Cms::BaseCont
22
22
  user.reload
23
23
  render text: user.remark
24
24
  end
25
+
26
+ def quick_get_user_infos
27
+ public_account = ::EricWeixin::PublicAccount.find(params[:public_account_id])
28
+ if public_account.blank?
29
+ flash[:alert] = '未指定公众账号'
30
+ redirect_to action: :index
31
+ return
32
+ end
33
+ public_account.delay(:priority => 10).rebuild_users_simple
34
+ flash[:success] = '已经把快速更新微信用户信息任务添加到队列任务中'
35
+ redirect_to action: :index
36
+ end
37
+
38
+ def batch_update_user_infos
39
+ public_account = ::EricWeixin::PublicAccount.find(params[:public_account_id])
40
+ if public_account.blank?
41
+ flash[:alert] = '未指定公众账号'
42
+ redirect_to action: :index
43
+ return
44
+ end
45
+ public_account.delay(:priority => 10).update_users
46
+ flash[:success] = '已经把批量更新微信用户信息任务添加到队列任务中'
47
+ redirect_to action: :index
48
+ end
25
49
  end
@@ -1,8 +1,6 @@
1
1
  class EricWeixin::Cms::Weixin::Xiaodian::OrdersController < EricWeixin::Cms::BaseController
2
2
  def index
3
- @orders = EricWeixin::Xiaodian::Order.all
4
- @orders = @orders.where("order_create_time >= ?", params[:start_date].to_time.change(hour:0,min:0,sec:0).to_i) unless params[:start_date].blank?
5
- @orders = @orders.where("order_create_time <= ?", params[:end_date].to_time.change(hour:23,min:59,sec:59).to_i) unless params[:end_date].blank?
3
+ @orders = EricWeixin::Xiaodian::Order.order_query params
6
4
  @orders = @orders.order(order_create_time: :desc).paginate(per_page: params[:per_page]||6, page: params[:page]||1)
7
5
  end
8
6
 
@@ -27,7 +25,42 @@ class EricWeixin::Cms::Weixin::Xiaodian::OrdersController < EricWeixin::Cms::Bas
27
25
  end
28
26
 
29
27
  def download_orders
30
- file_name = EricWeixin::Xiaodian::Order.get_excel_of_orders params.permit(:start_date, :end_date)
28
+ file_name = EricWeixin::Xiaodian::Order.get_excel_of_orders params.permit(:start_date, :end_date, :deliver_status, :buyer_nick, :receiver_name, :receiver_mobile)
31
29
  send_file file_name
32
30
  end
31
+
32
+ def update_hb_infos
33
+ EricWeixin::RedpackOrder.delay(priority: 10).update_info_from_wx params[:public_account_id]
34
+ flash[:success] = '已经将更新红包任务放到队列'
35
+ redirect_to action: :index
36
+ end
37
+
38
+ def update_order_infos
39
+ # 默认更新本月订单
40
+ params[:start_date] ||= Time.now.beginning_of_month
41
+ params[:end_date] ||= Time.now.end_of_month
42
+ params[:start_date] = params[:start_date].to_date.change(hour:0,min:0,sec:0)
43
+ params[:end_date] = params[:end_date].to_date.change(hour:23,min:59,sec:59)
44
+
45
+ EricWeixin::Xiaodian::Order.delay(priority: 10).update_order_infos params[:start_date], params[:end_date]
46
+ flash[:success] = '已经将更新订单信息的任务放到队列'
47
+ redirect_to action: :index
48
+ end
49
+
50
+ def update_delivery_info_by_excel
51
+ begin
52
+ if params[:file].blank?
53
+ flash[:alert] = '请先选择文件,再更新快递单信息'
54
+ redirect_to action: :index
55
+ return
56
+ end
57
+ flash[:success] = EricWeixin::Xiaodian::Order.update_delivery_info_by_excel params[:file]
58
+ redirect_to action: :index
59
+ rescue Exception=> e
60
+ dispose_exception e
61
+ flash[:alert] = get_notice_str
62
+ redirect_to action: :index
63
+ end
64
+ end
65
+
33
66
  end
@@ -0,0 +1,8 @@
1
+ class EricWeixin::Wz::Xiaodian::OrdersController < ApplicationController
2
+ def index
3
+ @orders = ::EricWeixin::Xiaodian::Order.all
4
+ @orders = @orders.where("openid = ?", params[:openid]).order('order_create_time DESC') unless params[:openid].blank?
5
+ @orders = @orders.paginate(page: params[:page]||1, per_page: 10)
6
+ render :layout => false
7
+ end
8
+ end
@@ -95,7 +95,7 @@ class EricWeixin::CustomsServiceRecord < ActiveRecord::Base
95
95
 
96
96
  unless options[:nick_name].blank?
97
97
  records = records.joins('LEFT JOIN weixin_users ON weixin_users.openid = weixin_customs_service_records.openid')
98
- records = records.where("weixin_users.nickname like ?", "%#{CGI::escape(options[:nick_name])}%")
98
+ records = records.where("weixin_users.nickname like ?", "%#{options[:nick_name]}%")
99
99
  end
100
100
 
101
101
  records
@@ -17,7 +17,7 @@ class EricWeixin::MediaNews < ActiveRecord::Base
17
17
  # "thumb_media_id" => article.media_resource.media_id,
18
18
  # "author" => article.author,
19
19
  # "content_source_url" => article.content_source_url,
20
- # "content" => CGI::escape(article.content).force_encoding("UTF-8"),
20
+ # "content" => article.content.force_encoding("UTF-8"),
21
21
  # "digest" => article.digest,
22
22
  # "show_cover_pic" => if article.show_cover_pic then 1 else 0 end
23
23
  # }
@@ -52,7 +52,7 @@ class EricWeixin::MediaNews < ActiveRecord::Base
52
52
  "thumb_media_id" => article.media_resource.media_id,
53
53
  "author" => article.author,
54
54
  "content_source_url" => article.content_source_url,
55
- "content" => CGI::escape(article.content.gsub("\"","'")),
55
+ "content" => article.content.gsub("\"","'"),
56
56
  "digest" => article.digest,
57
57
  "show_cover_pic" => if article.show_cover_pic then 1 else 0 end
58
58
  }
@@ -98,6 +98,50 @@ class EricWeixin::PublicAccount < ActiveRecord::Base
98
98
  end
99
99
  end
100
100
 
101
+ # 更新数据库现有的微信用户信息,用了微信的批量获取用户数据的接口
102
+ # ===参数说明
103
+ # 无
104
+ # ===调用示例
105
+ # ::EricWeixin::PublicAccount.first.update_users
106
+ def update_users
107
+ openids = self.weixin_users.pluck(:openid, :language)
108
+ index = 0
109
+ while index <= openids.count
110
+ params = {}
111
+ openid_arr = []
112
+ openids[index..index+99].each do |op|
113
+ openid_arr << {
114
+ :openid => op[0],
115
+ :lang => op[1]
116
+ }
117
+ end
118
+ index += 100
119
+ params[:user_list] = openid_arr
120
+ token = ::EricWeixin::AccessToken.get_valid_access_token public_account_id: self.id
121
+ response = RestClient.post "https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=#{token}", params.to_json
122
+ response = JSON.parse response.body
123
+ response["user_info_list"].each do |user_info|
124
+ user = EricWeixin::WeixinUser.find_or_create_by(openid: user_info["openid"], weixin_public_account_id: self.id)
125
+ if user_info["subscribe"] == 1
126
+ user_params = user_info.select{|k,v|["subscribe",
127
+ "openid",
128
+ "nickname",
129
+ "sex",
130
+ "language",
131
+ "city",
132
+ "province",
133
+ "country",
134
+ "headimgurl",
135
+ "subscribe_time",
136
+ "remark"].include?(k) && !v.blank?}
137
+ user.update_attributes user_params
138
+ else
139
+ user.update_attributes subscribe: 0
140
+ end
141
+ end unless response["user_info_list"].blank?
142
+ end unless openids.count == 0
143
+ end
144
+
101
145
  # 获取用户列表,并把最新的用户信息存到数据库.
102
146
  # ===参数说明
103
147
  # * next_openid #拉取列表的后一个用户的 next_openid,用户列表未拉取完时存在。
@@ -111,6 +155,7 @@ class EricWeixin::PublicAccount < ActiveRecord::Base
111
155
  RestClient.get "https://api.weixin.qq.com/cgi-bin/user/get?access_token=#{token}&next_openid=#{next_openid}"
112
156
  end
113
157
  response = JSON.parse response.body
158
+ pp response
114
159
  if response["count"].to_i > 0
115
160
  response["data"]["openid"].each do |openid|
116
161
  ::EricWeixin::WeixinUser.create_weixin_user self.id, openid
@@ -133,13 +178,12 @@ class EricWeixin::PublicAccount < ActiveRecord::Base
133
178
  RestClient.get "https://api.weixin.qq.com/cgi-bin/user/get?access_token=#{token}&next_openid=#{next_openid}"
134
179
  end
135
180
  response = JSON.parse response.body
181
+ pp response
136
182
  if response["count"].to_i > 0
137
183
  response["data"]["openid"].each do |openid|
138
184
  users = ::EricWeixin::WeixinUser.where openid: openid
139
185
  if users.blank?
140
-
141
186
  ::EricWeixin::WeixinUser.create_weixin_user self.id, openid
142
-
143
187
  end
144
188
  end
145
189
  tmp_next_openid = response["next_openid"]
@@ -51,7 +51,7 @@ class EricWeixin::RedpackOrder < ActiveRecord::Base
51
51
 
52
52
  # 定时使用 redpack_order 实例变量来完善补充红包信息。
53
53
  def get_info
54
- return unless self.redpacks.blank?
54
+ # return if self.redpacks.blank?
55
55
  EricWeixin::RedpackOrder.transaction do
56
56
  options = {}
57
57
  options[:mch_billno] = self.mch_billno
@@ -90,4 +90,13 @@ class EricWeixin::RedpackOrder < ActiveRecord::Base
90
90
  end
91
91
  end
92
92
 
93
+ # 指定公众号,从微信服务器更新红包信息
94
+ # EricWeixin::RedpackOrder.update_info_from_wx 1
95
+ def self.update_info_from_wx public_account_id
96
+ self.where("detail_id is null and weixin_public_account_id = ? ", public_account_id).each do |r_o|
97
+ r_o.get_info
98
+ end
99
+ return
100
+ end
101
+
93
102
  end
@@ -41,7 +41,7 @@ class EricWeixin::ReplyMessageRule < ActiveRecord::Base
41
41
  #处理来自微信端客户所有的处理。
42
42
  def process_rule(receive_message, public_account)
43
43
  receive_message_log = receive_message.clone
44
- receive_message_log[:Content] = CGI::escape(receive_message_log[:Content]) if not receive_message_log[:Content].blank?
44
+ receive_message_log[:Content] = receive_message_log[:Content] if not receive_message_log[:Content].blank?
45
45
  business_type = "#{receive_message[:MsgType]}~#{receive_message[:Event]}"
46
46
 
47
47
  #兼容腾讯的一个坑....有的是MsgId, 有的是MsgID
@@ -195,6 +195,7 @@ class EricWeixin::ReplyMessageRule < ActiveRecord::Base
195
195
  ::EricWeixin::MediaNews.update_media_news_after_sending receive_message
196
196
  ::Weixin::Process.message_send_job_finish receive_message
197
197
  ''
198
+
198
199
  #暂时识别不了的消息
199
200
  else
200
201
  "暂时未处理的场景".to_logger
@@ -1,5 +1,5 @@
1
1
  class EricWeixin::WeixinUser < ActiveRecord::Base
2
- SEX = {1=>'男' , 2=>'女', 0=>'未知'}
2
+ SEX = {1 => '男', 2 => '女', 0 => '未知'}
3
3
  self.table_name = 'weixin_users'
4
4
  belongs_to :member_info
5
5
  belongs_to :weixin_public_account, :class_name => '::EricWeixin::PublicAccount', :foreign_key => 'weixin_public_account_id'
@@ -22,7 +22,7 @@ class EricWeixin::WeixinUser < ActiveRecord::Base
22
22
  @target_user = @target_user.where("created_at > ? AND created_at < ?", user[:created_at_start], user[:created_at_end]) unless user[:created_at_start].blank? || user[:created_at_end].blank?
23
23
  @target_user = @target_user.where("updated_at > ? AND updated_at < ?", user[:updated_at_start], user[:updated_at_end]) unless user[:updated_at_start].blank? || user[:updated_at_end].blank?
24
24
  @target_user = @target_user.where("subscribe = ?", user[:subscribe]) unless user[:subscribe].blank?
25
- @target_user = @target_user.where("nickname = ?", CGI::escape(user[:nickname])) unless user[:nickname].blank?
25
+ @target_user = @target_user.where("nickname = ?", user[:nickname]) unless user[:nickname].blank?
26
26
  @target_user = @target_user.where("sex = ?", user[:sex]) unless user[:sex].blank?
27
27
  @target_user = @target_user.where("language = ?", user[:language]) unless user[:language].blank?
28
28
  @target_user = @target_user.where("city = ?", user[:city]) unless user[:city].blank?
@@ -38,7 +38,7 @@ class EricWeixin::WeixinUser < ActiveRecord::Base
38
38
  end
39
39
 
40
40
  def nickname
41
- CGI::unescape(self.attributes["nickname"]) rescue '无法正常显示'
41
+ self.attributes["nickname"]
42
42
  end
43
43
 
44
44
  ##
@@ -63,7 +63,6 @@ class EricWeixin::WeixinUser < ActiveRecord::Base
63
63
  end
64
64
 
65
65
  class << self
66
-
67
66
  # ===业务说明:创建、更新微信用户.
68
67
  # * 微信用户在关注、取消关注时更新用户信息。
69
68
  # * 当用户关注微信时,创建用户。
@@ -79,28 +78,42 @@ class EricWeixin::WeixinUser < ActiveRecord::Base
79
78
  def create_weixin_user(public_account_id, openid, channel=nil)
80
79
  is_new = false
81
80
  public_account = ::EricWeixin::PublicAccount.find_by_id(public_account_id)
81
+ weixin_user = ::EricWeixin::WeixinUser.where(openid: openid, weixin_public_account_id: public_account.id).first
82
82
  ::EricWeixin::ReplyMessageRule.transaction do
83
83
  is_new = false
84
- weixin_user = ::EricWeixin::WeixinUser.where(openid: openid, weixin_public_account_id: public_account.id).first
85
84
  if weixin_user.blank?
86
85
  is_new = true
87
86
  weixin_user = ::EricWeixin::WeixinUser.new openid: openid,
88
- weixin_public_account_id: public_account.id
87
+ weixin_public_account_id: public_account.id
89
88
  weixin_user.save!
90
89
  is_new = true
91
90
  end
92
- end #因为后续更新用户信息消耗时间较长,在这里必须得提交一次,以便二次创建用户。
93
- wx_user_data = public_account.get_user_data_from_weixin_api openid
94
- weixin_user.update_attributes(wx_user_data.select{|k,v| ["subscribe", "openid", "nickname", "sex", "language", "city", "province", "country", "headimgurl", "subscribe_time", "remark"].include? k })
95
- if not channel.blank?
96
- weixin_user.first_register_channel = channel if weixin_user.first_register_channel.blank?
97
- weixin_user.last_register_channel = channel
98
- weixin_user.save!
99
- end
100
- return weixin_user, is_new
91
+ end
92
+
93
+ ::EricWeixin::WeixinUser.delay(:priority => -10).get_info public_account_id, openid
94
+ if not channel.blank?
95
+ weixin_user.first_register_channel = channel if weixin_user.first_register_channel.blank?
96
+ weixin_user.last_register_channel = channel
97
+ weixin_user.save!
98
+ end
99
+ return weixin_user, is_new
100
+ end
101
+
101
102
 
103
+ # 调腾讯接口,完善用户具体信息。
104
+ def get_info public_account_id, openid
105
+ public_account = ::EricWeixin::PublicAccount.find_by_id(public_account_id)
106
+ wx_user_data = public_account.get_user_data_from_weixin_api openid
107
+ weixin_user = ::EricWeixin::WeixinUser.where(openid: openid, weixin_public_account_id: public_account.id).first
108
+ pp wx_user_data["subscribe"]
109
+ if wx_user_data["subscribe"] == 0
110
+ weixin_user.update_attributes(wx_user_data.select { |k, v| ["subscribe"].include? k })
111
+ else
112
+ weixin_user.update_attributes(wx_user_data.select { |k, v| ["subscribe", "openid", "nickname", "sex", "language", "city", "province", "country", "headimgurl", "subscribe_time", "remark"].include? k })
113
+ end
102
114
  end
103
115
 
116
+
104
117
  # ===获取用户详情.
105
118
  # 根据公众账号id和openid获取公众账号详细信息,最后返回json。
106
119
  # ===输入参数说明
@@ -112,7 +125,6 @@ class EricWeixin::WeixinUser < ActiveRecord::Base
112
125
  token = ::EricWeixin::AccessToken.get_valid_access_token public_account_id: public_account_id
113
126
  response = RestClient.get "https://api.weixin.qq.com/cgi-bin/user/info?access_token=#{token}&openid=#{openid}&lang=zh_CN"
114
127
  response = JSON.parse response.body
115
- response["nickname"] = CGI::escape(response["nickname"]) if not response["nickname"].blank?
116
128
  response
117
129
  end
118
130
 
@@ -123,11 +135,22 @@ class EricWeixin::WeixinUser < ActiveRecord::Base
123
135
  csv << ["订阅状态", "openid", "昵称", "性别", "语言", "城市", "省份", "国家", "订阅时间"]
124
136
  weixin_users.each do |weixin_user|
125
137
  user_fields = []
126
- user_fields << (weixin_user.follow_status ? '订阅': '取消订阅')
138
+ user_fields << (weixin_user.follow_status ? '订阅' : '取消订阅')
127
139
  user_fields << weixin_user.openid
128
140
  user_fields << weixin_user.nickname
129
- user_fields << case weixin_user.sex when 1 then '男' when 2 then '女' else '未知' end
130
- user_fields << case weixin_user.language when 'zh_CN' then '简体中文' when 'zh_TW' then '繁体中文' when 'en' then '英文' else '其它' end
141
+ user_fields << case weixin_user.sex when 1 then
142
+ '' when 2 then
143
+ '女'
144
+ else
145
+ '未知'
146
+ end
147
+ user_fields << case weixin_user.language when 'zh_CN' then
148
+ '简体中文' when 'zh_TW' then
149
+ '繁体中文' when 'en' then
150
+ '英文'
151
+ else
152
+ '其它'
153
+ end
131
154
  user_fields << weixin_user.city
132
155
  user_fields << weixin_user.province
133
156
  user_fields << weixin_user.country
@@ -161,7 +184,7 @@ class EricWeixin::WeixinUser < ActiveRecord::Base
161
184
  def custom_query options
162
185
  users = self.all
163
186
  users = users.where(subscribe: options[:subscribe]) unless options[:subscribe].blank?
164
- users = users.where("nickname like ?", "%#{CGI::escape(options[:nickname])}%") unless options[:nickname].blank?
187
+ users = users.where("nickname like ?", "%#{options[:nickname]}%") unless options[:nickname].blank?
165
188
  users = users.where(sex: options[:sex]) unless options[:sex].blank?
166
189
  users = users.where(city: options[:city]) unless options[:city].blank?
167
190
  users = users.where(province: options[:province]) unless options[:province].blank?