之前做过微信开发里面有段微信页面的授权请求,具体代码如下:
if session[:phone_unionid].blank? || session[:phone_unionid].nil?
code = params[:code]
# 如果code参数为空,则为认证第一步,重定向到微信认证
if code.nil?
redirect_to "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{player_weixin_config.appid}&redirect_uri=#{request.url}&response_type=code&scope=snsapi_userinfo&state=#{request.url}#wechat_redirect" and return
end
#如果code参数不为空,则认证到第二步,通过code获取openid,并保存到session中
begin
url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=#{player_weixin_config.appid}&secret=#{player_weixin_config.appsecret}&code=#{code}&grant_type=authorization_code"
result=JSON.parse(URI.parse(url).read)
result=JSON.parse(response_body)
openid = result["openid"]
access_token=result["access_token"]
rescue Exception => e
Rails.logger.debug("get open id error")
end
end
之前在 rails4 中这段代码运行的好好的,升级了 rails5 之后,出现了错误 SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed,经过排除最后定位到 URI 问题,但是始终找不到原因,最后只能使用 Typhoeus 库解决了。具体替换代码
result=JSON.parse(URI.parse(url).read)替换成
response=Typhoeus::Request.get(url)
response_body=response.response_body