using LYFZ.Weixin.SDK;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace LYFZ.WXLibrary
{
///
/// 开放平台 配置信息
///
public class OpenPlatformConfig
{
public OpenPlatformConfig()
{
}
///
/// 微信后台专用测试公众号APPID (wx570bc396a51b8ff8)
///
public static string MicroLetterTestAPPID { get; } = "wx570bc396a51b8ff8";
///
/// 微信后台专用测试公众号 (gh_76705a519b76)
///
public static string MicroLetterTestUsername { get; } = "gh_76705a519b76";
///
/// 授权回调地址 AuthorizeCallback
///
public static string Redirect_uri { get; set; } = "http://kf.lyfz.net/AuthorizeCallback.aspx";
///
/// 第三方开放平台的AppID
///
public static string OpenAppID { get; set; } = "wxab4873842bdb30b6";
///
/// 第三方开放平台的AppSecret
///
public static string OpenAppSecret { get; set; } = "dcda055876be4b0e6133058216aaa930";
///
/// 公众号消息校验Token
///
public static string OpenToken { get; set; } = "WMHEDRD4NWZACPCXZ8JYXOOC";
///
/// 公众号消息加解密Key
///
public static string OpenEncodingAESKey { get; set; } = "BZy405POqT7Jg4QgSyyAEq0Ve4Ih4QyNCSJMswSG6kI";
static string _component_verify_ticket = "";
///
/// Component_verify_ticket
///
public static string Component_verify_ticket
{
get
{
if (string.IsNullOrEmpty(OpenPlatformConfig._component_verify_ticket))
{
OpenPlatformConfig._component_verify_ticket = OpenPlatformConfig.ReadComponent_verify_ticket();
}
return OpenPlatformConfig._component_verify_ticket;
}
set { OpenPlatformConfig._component_verify_ticket = value; }
}
static string Component_verify_ticketFilename = LYFZ.WinAPI.CustomPublicMethod.BasePath + "\\Temp\\Component_verify_ticket.txt";
public static bool SaveComponent_verify_ticket(string _Component_verify_ticket)
{
try
{
if (!Directory.Exists(System.IO.Path.GetDirectoryName(Component_verify_ticketFilename)))
Directory.CreateDirectory(System.IO.Path.GetDirectoryName(Component_verify_ticketFilename));
File.WriteAllText(Component_verify_ticketFilename, _Component_verify_ticket, Encoding.UTF8);
}
catch
{
return false;
}
return true;
}
public static string ReadComponent_verify_ticket()
{
try
{
if (System.IO.File.Exists(Component_verify_ticketFilename))
{
return File.ReadAllText(Component_verify_ticketFilename, Encoding.UTF8);
}
else
{
return "";
}
}
catch
{
return "";
}
}
static Dictionary _AuthorizedAPPIDHandleList = new Dictionary();
///
/// 已授权公众号的授权信息处理集合
///
public static Dictionary AuthorizedAPPIDHandleList
{
get { return OpenPlatformConfig._AuthorizedAPPIDHandleList; }
set { OpenPlatformConfig._AuthorizedAPPIDHandleList = value; }
}
///
/// 获取令牌时的时间
///
private static DateTime GetAccessToken_Time;
///
/// 过期时间为7200秒
///
private static int Expires_Period = 7200;
private static string mComponent_Access_Token = "";
///
/// 获取新的有效Component_Access_Token令牌
///
public static string Component_Access_Token
{
get
{
// 如果为空,或者过期,需要重新获取;
if (string.IsNullOrEmpty(mComponent_Access_Token) || HasExpired())
{
// 获取;
LYFZ.WXLibrary.CommonHandleClass.WriteLog("开始请求获取新的有效Component_Access_Token令牌", "-2");
mComponent_Access_Token = GetComponent_AccessToken(OpenAppID, OpenAppSecret, Component_verify_ticket);
}
return mComponent_Access_Token;
}
}
///
///
///
static string _pre_auth_code = "";
///
/// 获取预授权码pre_auth_code
/// 该API用于获取预授权码。预授权码用于公众号授权时的第三方平台方安全验证。
///
public static string Pre_auth_code
{
get
{
// 如果为空,或者过期,需要重新获取;
if (string.IsNullOrEmpty(_pre_auth_code) || HasExpiredPreAuthCode())
{
// 获取;
LYFZ.WXLibrary.CommonHandleClass.WriteLog("开始请求获取预授权码pre_auth_code", "-2");
_pre_auth_code = GetComponent_PreAuthCode(OpenAppID);
}
return _pre_auth_code;
}
}
///
/// 获取预授权码pre_auth_code
///
///
///
///
private static string GetComponent_PreAuthCode(string appId)
{
try
{
Dictionary dic = new Dictionary
{
{"component_appid",appId},
};
string json = (new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(dic);
string retmsg = "";
var retObj = BasicAPI.GetApi_Component_PreAuthCode(OpenPlatformConfig.Component_Access_Token, json, out retmsg);
LYFZ.WXLibrary.CommonHandleClass.WriteLog("请求获取预授权码返回信息:" + retmsg, "-2");
if (retObj != null)
{
string retPreAuthCode = retObj.pre_auth_code.Trim();
if (retPreAuthCode.Trim().Length > 0)
{
Get_PreAuthCode_Time = DateTime.Now;
Expires_Period_PreAuthCode = Convert.ToInt32(retObj.expires_in);
return retPreAuthCode;
}
else
{
Get_PreAuthCode_Time = DateTime.MinValue;
}
}
else
{
Get_PreAuthCode_Time = DateTime.MinValue;
LYFZ.WXLibrary.CommonHandleClass.WriteLog("获取预授权码pre_auth_code时出错:" + retmsg, "-2");
}
}
catch (Exception ex)
{
Get_PreAuthCode_Time = DateTime.MinValue;
LYFZ.WXLibrary.CommonHandleClass.WriteLog("请求获取预授权码时出错:" + ex.Message, "-2");
}
return "";
}
///
/// 预授权码Pre_auth_code过期时间为600秒
///
private static int Expires_Period_PreAuthCode = 600;
///
/// 获取预授权码Pre_auth_code时的时间
///
private static DateTime Get_PreAuthCode_Time;
///
/// 判断预授权码Pre_auth_code是否过期 (有效期为)
///
/// bool
private static bool HasExpiredPreAuthCode()
{
if (Get_PreAuthCode_Time != null)
{
//过期时间,允许有一定的误差,二分钟。获取时间消耗
if (DateTime.Now > Get_PreAuthCode_Time.AddSeconds(Expires_Period_PreAuthCode).AddSeconds(-520))
{
return true;
}
}
return false;
}
///
/// 清除mAccessToken
///
public static void ClearAccessToken()
{
mComponent_Access_Token = "";
}
///
/// 获取开放平台的接口令牌
///
///
///
///
private static string GetComponent_AccessToken(string appId, string appSecret, string component_verify_ticket)
{
try
{
Dictionary dic = new Dictionary
{
{"component_appid",appId},
{"component_appsecret",appSecret},
{"component_verify_ticket",component_verify_ticket}
};
string json = (new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(dic);
/* string formatmsg = "{"
+ "\"component_appid\":\"" + sAppID + "\" ,"
+ "\"component_appsecret\": \"" + sAppSecret + "\","
+ "\"component_verify_ticket\": \"" + component_verify_ticket + "\" "
+"\"}";*/
//获取第三方平台access_token
string retmsg = "";
var retObj = BasicAPI.GetApi_Component_Token(json, out retmsg);
LYFZ.WXLibrary.CommonHandleClass.WriteLog("请求获取新的有效Component_Access_Token令牌返回信息:" + retmsg, "-2");
if (retObj != null)
{
string retComponent_access_token = retObj.component_access_token.Trim();
if (retComponent_access_token.Trim().Length > 0)
{
GetAccessToken_Time = DateTime.Now;
Expires_Period = Convert.ToInt32(retObj.expires_in);
return retComponent_access_token;
}
else
{
GetAccessToken_Time = DateTime.MinValue;
}
}
else
{
GetAccessToken_Time = DateTime.MinValue;
LYFZ.WXLibrary.CommonHandleClass.WriteLog("获取开放平台的接口令牌时出错:" + retmsg, "-2");
}
}
catch (Exception ex)
{
GetAccessToken_Time = DateTime.MinValue;
LYFZ.WXLibrary.CommonHandleClass.WriteLog("请求获取新的有效Component_Access_Token令牌时出错:" + ex.Message, "-2");
}
return "";
}
///
/// 判断Access_token是否过期
///
/// bool
private static bool HasExpired()
{
if (GetAccessToken_Time != null)
{
//过期时间,允许有一定的误差,五分钟。获取时间消耗
if (DateTime.Now > GetAccessToken_Time.AddSeconds(Expires_Period).AddSeconds(-300))
{
return true;
}
}
return false;
}
///
/// 是否转到多客户
///
///
///
public static bool IsTransmitService(string message)
{
bool ret = false;
if (message.ToLower().Contains("kf")
|| message.ToLower().Contains("客服")
|| message.ToLower().Contains("你好")
|| message.ToLower().Contains("您好")
|| message.ToLower().Contains("投诉")
|| message.ToLower().Contains("在吗")
|| message.ToLower().Contains("ni hao")
|| message.ToLower().Contains("ning hao")
|| message.ToLower().Contains("请问"))
{
ret = true;
}
return ret;
}
}
}