forked from Gitlink/forgeplus
61 lines
1.8 KiB
Ruby
61 lines
1.8 KiB
Ruby
module WechatOauth::Service
|
|
module_function
|
|
|
|
def request(method, url, params)
|
|
WechatOauth.logger.info("[WechatOauth] [#{method.to_s.upcase}] #{url} || #{params}")
|
|
|
|
client = Faraday.new(url: WechatOauth.base_url)
|
|
response = client.public_send(method, url, params)
|
|
result = JSON.parse(response.body)
|
|
|
|
WechatOauth.logger.info("[WechatOauth] [#{response.status}] #{result}")
|
|
|
|
if result['errcode'].present? && result['errcode'].to_s != '0'
|
|
raise WechatOauth::Error.new(result['errcode'], result['errmsg'])
|
|
end
|
|
|
|
result
|
|
end
|
|
|
|
# https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html
|
|
# response:
|
|
# {
|
|
# "access_token":"ACCESS_TOKEN",
|
|
# "expires_in":7200,
|
|
# "refresh_token":"REFRESH_TOKEN",
|
|
# "openid":"OPENID",
|
|
# "scope":"SCOPE",
|
|
# "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
|
|
# }
|
|
def access_token(code)
|
|
params = {
|
|
appid: WechatOauth.appid,
|
|
secret: WechatOauth.secret,
|
|
code: code,
|
|
grant_type: 'authorization_code'
|
|
}
|
|
|
|
request(:get, '/sns/oauth2/access_token', params)
|
|
end
|
|
|
|
# https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Authorized_Interface_Calling_UnionID.html
|
|
# response:
|
|
# {
|
|
# "openid":"OPENID",
|
|
# "nickname":"NICKNAME",
|
|
# "sex":1,
|
|
# "province":"PROVINCE",
|
|
# "city":"CITY",
|
|
# "country":"COUNTRY",
|
|
# "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
|
|
# "privilege":[
|
|
# "PRIVILEGE1",
|
|
# "PRIVILEGE2"
|
|
# ],
|
|
# "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
|
|
#
|
|
# }
|
|
def user_info(access_token, openid)
|
|
request(:get, '/sns/userinfo', access_token: access_token, openid: openid)
|
|
end
|
|
end |