分享

[已解决] 微信支付不授权直接获取 open id 的方法 · Ruby China

 quasiceo 2016-11-06

微信支付不授权直接获取 open id 的方法

新手问题 · Catherine · 发布于 2016年2月01日 · 最后由 catherine 回复于 2016年2月02日 · 3282 次阅读
23196
  • 因为只需要获取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)

    end
end
共收到 5 条回复
1楼 已删除
2楼 已删除
13650
imconfused · #3 · 2016年2月02日

check_openid 的 redirect_to 那里要 return 一下

24536
linyunjiang · #4 · 2016年2月02日

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

23196
Catherine · #5 · 2016年2月02日

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约