新手问题 [已解决] 微信支付不授权直接获取 open id 的方法

Catherine · 2016年02月01日 · 最后由 catherine 回复于 2016年02月02日 · 7311 次阅读
  • 因为只需要获取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

共收到 5 条回复
1楼 已删除
2楼 已删除

check_openid 的 redirect_to 那里要 return 一下

如三楼说的 return一下应该就没问题了

#3楼 @imconfused #4楼 @linyunjiang 谢谢,出错是在回调域名的格式上,需要加上前缀http or https

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册