using System;
using System.Text.RegularExpressions;
using System.Web;
using Wisdom.JPClient.WeiXin.Utility;
namespace Wisdom.JPClient.WeiXin.Lib
{
public sealed class WxHelper
{
//我的测试号
//public const string APPID = "wx6596bfb9388cc63c";
//public const string APPSECRET = "eb0c0d643d4e7bd3a43b61fd1031a2f2";
//慧视通 公众号
public static string APPID = ThisSession.WxConfig.APPID;
public static string APPSECRET = ThisSession.WxConfig.APPSECRET;
public static string GetCodeUrl(string redirect_url)
{
string url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect", APPID, redirect_url);
return url;
}
public static WxWebToken GetWebToken(string code)
{
if (string.IsNullOrEmpty(code)) { return null; }
string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", APPID, APPSECRET, code);
string responseText = HttpClientHelper.HttpGet(new Uri(url));
if (string.IsNullOrEmpty(responseText)) { throw new Exception("GetWebToken()错误"); }
WxWebToken token = JsonHelper.DeserializeObject<WxWebToken>(responseText);
return token;
}
public static WxWebToken RefreshWebToken(string refresh_token)
{
if (string.IsNullOrEmpty(refresh_token)) { return null; }
string url = string.Format("https://api.weixin.qq.com/sns/oauth2/refresh_token?appid={0}&grant_type=refresh_token&refresh_token={1}", APPID, refresh_token);
string responseText = HttpClientHelper.HttpGet(new Uri(url));
if (string.IsNullOrEmpty(responseText)) { throw new Exception("RefreshWebToken()错误"); }
WxWebToken token = JsonHelper.DeserializeObject<WxWebToken>(responseText);
return token;
}
public static WxWebUser GetWebUserInfo(string access_token, string openid)
{
if (string.IsNullOrEmpty(access_token) || string.IsNullOrEmpty(openid)) { return null; }
string url = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN", access_token, openid);
string responseText = HttpClientHelper.HttpGet(new Uri(url));
if (string.IsNullOrEmpty(responseText)) { throw new Exception("GetWebUserInfo()错误"); }
WxWebUser user = JsonHelper.DeserializeObject<WxWebUser>(responseText);
return user;
}
public static WxBaseToken GetWxBaseToken()
{
string cacheKey = "WxBaseToken.config";
System.Web.Caching.Cache cache = System.Web.HttpRuntime.Cache;
object obj = cache.Get(cacheKey);
if (obj == null)
{
string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", APPID, APPSECRET);
string responseText = HttpClientHelper.HttpGet(new Uri(url));
if (string.IsNullOrEmpty(responseText)) { throw new Exception("GetWxBaseToken()错误"); }
WxBaseToken token = JsonHelper.DeserializeObject<WxBaseToken>(responseText);
if (!string.IsNullOrEmpty(token.access_token))
{
cache.Insert(cacheKey, token, null, DateTime.Now.AddSeconds(token.expires_in - 200), System.Web.Caching.Cache.NoSlidingExpiration);
}
return token;
}
return (WxBaseToken)obj;
}
public static WxJsApiTicket GetWxJsApiTicket(string access_token)
{
string cacheKey = "WxJsApiTicket.config";
System.Web.Caching.Cache cache = System.Web.HttpRuntime.Cache;
object obj = cache.Get(cacheKey);
if (obj == null)
{
string url = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", access_token);
string responseText = HttpClientHelper.HttpGet(new Uri(url));
if (string.IsNullOrEmpty(responseText)) { throw new Exception("GetWxJsApiTicket()错误"); }
WxJsApiTicket jsApi = JsonHelper.DeserializeObject<WxJsApiTicket>(responseText);
if (!string.IsNullOrEmpty(jsApi.ticket))
{
cache.Insert(cacheKey, jsApi, null, DateTime.Now.AddSeconds(jsApi.expires_in - 200), System.Web.Caching.Cache.NoSlidingExpiration);
}
return jsApi;
}
return (WxJsApiTicket)obj;
}
public static bool IsWxBrowser(HttpRequest request)
{
string userAgent = request.Headers["User-Agent"];
if (string.IsNullOrEmpty(userAgent)) { return true; }
Regex regex = new Regex(@"micromessenger");
return regex.IsMatch(userAgent.ToLower());
}
}
public class WxWebToken
{
public string access_token { get; set; }
public int expires_in { get; set; }
public string refresh_token { get; set; }
public string openid { get; set; }
public string scope { get; set; }
public string unionid { get; set; }
}
public class WxWebUser
{
public string openid { get; set; }
public string nickname { get; set; }
public int sex { get; set; }
public string province { get; set; }
public string city { get; set; }
public string country { get; set; }
public string headimgurl { get; set; }
public string unionid { get; set; }
}
public class WxBaseToken
{
private int _expires_in = 7200;
public string access_token { get; set; }
public int expires_in { get { return _expires_in; } set { _expires_in = value; } }
}
public class WxJsApiTicket
{
private int _expires_in = 7200;
public int errcode { get; set; }
public string errmsg { get; set; }
public string ticket { get; set; }
public int expires_in { get { return _expires_in; } set { _expires_in = value; } }
}
}
<?xml version="1.0" encoding="utf-8"?>
<!--
有关如何配置 ASP.NET 应用程序的详细信息,请访问
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<configSections>
<section name="LogText" type=" " />
</configSections>
<appSettings>
<add key="DbHelperProvider" value="System.Data.SqlClient" />
<add key="DbHelperConnectionString" value="Data Source=172.16.0.251;Initial Catalog=DB_JP_BaseInfo00;User ID=sa;Password=weisheng;" />
<add key="Wisdom_DTMIS_New_ServiceUser" value="Admin"/>
<add key="Wisdom_DTMIS_New_ServicePwd" value="919616"/>
<!--用于调用短信接口-->
<add key="Wisdom_Host_Interface_Url" value="http://api.elianche.com/v1.1/"/>
<!--E连车接口调用用户名-->
<add key="Wisdom_Host_Interface_UserName" value="txc"/>
<!--E连车接口调用密码-->
<add key="Wisdom_Host_Interface_PassWord" value="txc"/>
<!--E连车接口来源类型-->
<add key="Wisdom_Host_Interface_SourceType" value="2"/>
<!--E连车接口短信模板ID-->
<add key="Wisdom_Host_Interface_MsgTmpId" value="3704"/>
<add key="WxPay_NoticUrl" value="http://hstwx.wisdom-gps.com:52539/Order/ResultNotify.aspx"/>
<!--客户端上传的教练图片地址(客户端对应api地址) -->
<add key="CoachPicUrl" value="http://172.16.0.251:1232/UploadFiles/Coach/"/>
</appSettings>
<LogText Path="lg" DebugEnabled="true" InfoEnabled="true" WarnEnabled="true" ErrorEnabled="true" FatalEnabled="true" />
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.webServer>
<defaultDocument>
<files>
<clear/>
<add value="index.aspx"/>
</files>
</defaultDocument>
<modules>
<add name="WebAppAuthModule" type="Wisdom.JPClient.WeiXin.Web.WebAppAuthModule, Wisdom.JPClient.WeiXin.Web"/>
</modules>
</system.webServer>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="WebServiceSoap" />
</basicHttpBinding>
<customBinding>
<binding name="WebServiceSoap12">
<textMessageEncoding messageVersion="Soap12" />
<httpTransport />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://172.16.0.251:1233/WebService/WebService.asmx" binding="basicHttpBinding"
bindingConfiguration="WebServiceSoap" contract="JP_Service.WebServiceSoap"
name="WebServiceSoap" />
</client>
</system.serviceModel>
</configuration>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Wisdom.JPClient.WeiXin.Lib;
using Wisdom.JPClient.WeiXin.Utility;
namespace Wisdom.JPClient.WeiXin.Web
{
public class WebAppAuthModule : IHttpModule
{
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(Application_BeginRequest);
context.AcquireRequestState += new EventHandler(Application_AcquireRequestState);
context.Error += new EventHandler(Application_Error);
}
public void Application_BeginRequest(object sender, EventArgs e)
{
//UrlParamsModule.Execute(sender, e);
//SWFUploadModule.Execute(sender, e);
}
public void Application_AcquireRequestState(object sender, EventArgs e)
{
HttpContext context = ((HttpApplication)sender).Context;
if (context.Session == null) { return; }
//if (string.isnullorempty(thissession.wxopenid))
//{
// string path = context.request.apprelativecurrentexecutionfilepath.tolower();
// list<string> pathlist = new list<string>();
// pathlist.add("~/index.aspx");
// pathlist.add("~/order/resultnotify.aspx");
// if (!pathlist.any(x => path.contains(x)))
// {
// //context.response.redirect("~/frame/notfound.html");
// wxmodule.execute(context);
// }
//}
GZipModule.Execute(sender, e);
}
public void Application_Error(object sender, EventArgs e)
{
HttpContext context = ((HttpApplication)sender).Context;
Exception ex = context.Server.GetLastError().GetBaseException();
if (ex == null || ex.TargetSite.Name == "GetFileInfo") { return; }
context.Response.Redirect("~/frame/error.html");
//Logger.WriteExceptionLog(ex);
//int result = 0; string message = string.Empty;
//if (WebAppContext.IsAjaxRequest())
//{
// if (ex is EBaseException)
// {
// result = DataTypeParse.ToInt(ex.Message);
// switch ((EBaseExceptionType)result)
// {
// case EBaseExceptionType.ParameterError: { message = "参数错误"; } break;
// case EBaseExceptionType.ActivitySiteNotExist: { message = "站点活动不存在"; } break;
// case EBaseExceptionType.ActivitySiteFinalQuantityBuZu: { message = "数量不足"; } break;
// }
// }
// else
// {
// message = ex.Message;
// }
// StringBuilder responseBuilder = new StringBuilder();
// responseBuilder.AppendFormat("\"result\":{0},", result);
// responseBuilder.AppendFormat("\"message\":\"{0}\"", JsonHelper.CheckJsonSafechar(message));
// string responseText = WebContext.AddJson(responseBuilder.ToString());
// context.Response.Clear();
// context.Response.StatusCode = 400;
// context.Response.Write(responseText);
// context.Response.Flush();
// context.Server.ClearError();
//}
//else
//{
// message = "~/error.html";
// if (ex is EBaseException)
// {
// switch ((EBaseExceptionType)DataTypeParse.ToInt(ex.Message))
// {
// case EBaseExceptionType.WxBrowserError: { message = "~/browser.html"; } break;
// case EBaseExceptionType.ActivityNotExist:
// case EBaseExceptionType.ConsigneeNotExist:
// case EBaseExceptionType.OrderNotExist: { message = "~/notfound.html"; } break;
// }
// }
// context.Response.Redirect(message);
//}
}
}
}