因为只需要获取 open id,不用去让用户授权一次。代码和一些处理逻辑还参考了 ruby china 的另一个帖子,但忘记链接了
在公众号里点了按钮到 check_openid 的路由下,页面空白,也没有报错啥的,检查了 log 里没有我想要的 openid 出现...我把微信里的回调 url 改成了 get_code 的路由,依然日志里没有我想要的东西..不知道到底哪一步有问题。
参考的这个文档:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html#.E7.AC.AC.E4.B8.80.E6.AD.A5.EF.BC.9A.E7.94.A8.E6.88.B7.E5.90.8C.E6.84.8F.E6.8E.88.E6.9D.83.EF.BC.8C.E8.8E.B7.E5.8F.96code
-
公众号花了 300 块,是有这个接口权限的,安全域名我也添加了服务器的域名。
不知道若没有花 300 块是否就没有这个接口的使用权限
没有调试成功的原因是:在 wx 文档里说安全域名不能有前缀 http 或 https,于是我误以为回调 redirect_uri 也不能要,这个“我以为”就是调试不成功的原因,加上 http 或 https 就可以了。回调路由就是 get_code 或 check_openid。
```ruby
class Api::WxpaymentsController < ApplicationController
# get_code function exists for testing, could be dumped
respond_to :json
def get_code
code = params[:code]
state = params[:state]
Rails.logger.info("=====")
Rails.logger.info(code)
Rails.logger.info ("*****")
Rails.logger.info (state)
api_render_result(t, E_SUCCESS)
return
end
def check_openid
if session[:openid].blank?
code = params[:code]
if code.nil?
# with state params
# redirect_to "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#WXPAY_APPID}&redirect_uri=#REDIRECT_URL}&response_type=code&scope=snsapi_base&state=#REDIRECT_URL}#wechat_redirect{"
# without state
redirect_to "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#WXPAY_APPID}&redirect_uri=#REDIRECT_URL2}&response_type=code&scope=snsapi_base#wechat_redirect{"
end
begin
url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=#WXPAY_APPID}&secret=#WXPAY_SECRET}&code=#code}&grant_type=authorization_code{"
session[:openid] = JSON.parse(URI.parse(url).read)["openid"]
rescue Exception => e
#
end
end
if session[:openid]
Rails.logger.info("Get the openid ~!--->#{session[:openid]}")
Rails.logger.info("Get the code ~!--->#{code}")
end
# api_render_result(t, E_SUCCESS)
end
end