#region Apache License Version 2.0 /*---------------------------------------------------------------- Copyright 2019 Jeffrey Su & Suzhou Senparc Network Technology Co.,Ltd. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Detail: https://github.com/JeffreySu/WeiXinMPSDK/blob/master/license.md ----------------------------------------------------------------*/ #endregion Apache License Version 2.0 /*---------------------------------------------------------------- Copyright (C) 2019 Senparc 文件名:AppStoreOAuth.cs 文件功能描述:AppStoreOAuth 创建标识:Senparc - 20150319 ----------------------------------------------------------------*/ using Senparc.CO2NET.Extensions; using Senparc.Weixin.CommonAPIs; using Senparc.Weixin.HttpUtility; using Senparc.Weixin.MP.CommonAPIs; namespace Senparc.Weixin.MP.AppStore { public static class AppStoreOAuth { private static string Domain { get { return Config.IsDebug ? "http://localhost:12222" : "http://www.weiweihi.com";//用于自动切换本地单元测试的请求地址 } } /// /// 获取验证地址 /// /// 正在使用此APP的weixinId /// 此App的唯一标识。可以在此APP的【开发接入】页面的【OAuth认证 设置】页面看到 /// /// /// /// public static string GetAuthorizeUrl(int weixinId, string clientId, string redirectUrl, string state, string responseType = "code") { var url = string.Format(Domain + "/OAuth2/Authorize?weixinId={0}&clientId={1}&RedirectUri={2}&response_type=code&state={3}", weixinId.ToString("d").AsUrlData(), clientId.AsUrlData(), redirectUrl.AsUrlData(), state.AsUrlData()); /* 这一步发送之后,客户会得到授权页面,无论同意或拒绝,都会返回redirectUrl页面。 * 如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。这里的code用于换取access_token(和通用接口的access_token不通用) * 若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE */ return url; } /// /// 获取AccessToken /// /// 此App的唯一标识。可以在此APP的【开发接入】页面的【OAuth认证 设置】页面看到 /// 对应此App的唯一标识的密码。可以在此APP的【开发接入】页面的【OAuth认证 设置】页面看到 /// code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。 /// /// public static OAuthAccessTokenResult GetAccessToken(string clientId, string clientSecret, string code, string grantType = "authorization_code") { var url = string.Format(Domain + "/OAuth2/AccessToken?clientId={0}&clientSecret={1}&code={2}&grantType={3}", clientId.AsUrlData(), clientSecret.AsUrlData(), code.AsUrlData(), grantType.AsUrlData()); return CommonJsonSend.Send(null, url, null, CommonJsonSendType.GET); } } }