因为只需要获取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。
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) endend