441 lines
17 KiB
Plaintext
441 lines
17 KiB
Plaintext
<%@ WebHandler Language="C#" Class="urlData" %>
|
||
|
||
using System;
|
||
using System.Web;
|
||
using System.Runtime.Serialization.Json;
|
||
using Newtonsoft.Json;
|
||
using Newtonsoft.Json.Linq;
|
||
using System.Web.Services.Protocols;
|
||
using System.Security.Cryptography;
|
||
using System.Text;
|
||
using System.Web.SessionState;
|
||
using System.Data;
|
||
using System.Collections.Generic;
|
||
using System.IO.Compression;
|
||
using System.Drawing;
|
||
using System.Drawing.Imaging;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using Facebook;
|
||
using System.Net;
|
||
using System.Collections.Specialized;
|
||
|
||
public class urlData : IHttpHandler, IReadOnlySessionState {
|
||
|
||
public void ProcessRequest (HttpContext context) {
|
||
result objRet = new result();
|
||
DataContractJsonSerializer json = new DataContractJsonSerializer(objRet.GetType());
|
||
context.Response.ContentType = "application/json;charset=utf-8";
|
||
context.Response.AddHeader("Access-Control-Allow-Origin", "*");
|
||
|
||
string acceptEncoding = context.Request.Headers["Accept-Encoding"].ToString().ToUpperInvariant();
|
||
if (!String.IsNullOrEmpty(acceptEncoding))
|
||
{
|
||
if (acceptEncoding.Contains("GZIP"))
|
||
{
|
||
//输出流头部GZIP压缩
|
||
context.Response.AppendHeader("Content-encoding", "gzip");
|
||
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
|
||
}
|
||
else if (acceptEncoding.Contains("DEFLATE"))
|
||
{
|
||
//输出流头部DEFLATE压缩
|
||
context.Response.AppendHeader("Content-encoding", "deflate");
|
||
context.Response.Filter = new DeflateStream(context.Response.Filter, CompressionMode.Compress);
|
||
}
|
||
}
|
||
|
||
string method = (context.Request["method"] == null) ? "" : context.Request["method"].ToString();
|
||
string project_uid = (context.Request["project_uid"] == null) ? "" : context.Request["project_uid"].ToString();
|
||
string url_uid = (context.Request["url_uid"] == null) ? "" : context.Request["url_uid"].ToString();
|
||
string url_descript = (context.Request["url_descript"] == null) ? "" : context.Request["url_descript"].ToString();
|
||
string url_directToUrl = (context.Request["url_directToUrl"] == null) ? "" : context.Request["url_directToUrl"].ToString();
|
||
string url_Code = (context.Request["url_Code"] == null) ? "" : context.Request["url_Code"].ToString();
|
||
string url_gifTag = (context.Request["url_gifTag"] == null) ? "N" : context.Request["url_gifTag"].ToString();
|
||
string url_gifLink = (context.Request["url_gifLink"] == null) ? "" : context.Request["url_gifLink"].ToString();
|
||
string url_fbTag = (context.Request["url_fbTag"] == null) ? "N" : context.Request["url_fbTag"].ToString();
|
||
string url_fbTitle = (context.Request["url_fbTitle"] == null) ? "" : context.Request["url_fbTitle"].ToString();
|
||
string url_fbDescript = (context.Request["url_fbDescript"] == null) ? "" : context.Request["url_fbDescript"].ToString();
|
||
string url_fbPixel = (context.Request["url_fbPixel"] == null) ? "N" : context.Request["url_fbPixel"].ToString();
|
||
string url_fbPixelCode = (context.Request["url_fbPixelCode"] == null) ? "" : context.Request["url_fbPixelCode"].ToString();
|
||
string url_googleAds = (context.Request["url_googleAds"] == null) ? "N" : context.Request["url_googleAds"].ToString();
|
||
string url_googleAwConversionId = (context.Request["url_googleAwConversionId"] == null) ? "" : context.Request["url_googleAwConversionId"].ToString();
|
||
string url_playBtn = (context.Request["url_playBtn"] == null) ? "N" : context.Request["url_playBtn"].ToString();
|
||
string pic_data = (context.Request["pic_data"] == null) ? "" : context.Request["pic_data"].ToString();
|
||
string url_uploadFile = (context.Request["url_uploadFile"] == null) ? "N" : context.Request["url_uploadFile"].ToString();
|
||
string url_uploadFileClientName = (context.Request["url_uploadFileClientName"] == null) ? "" : context.Request["url_uploadFileClientName"].ToString();
|
||
string url_uploadFileLinkName = (context.Request["url_uploadFileLinkName"] == null) ? "" : context.Request["url_uploadFileLinkName"].ToString();
|
||
string url_uploadFileType = (context.Request["url_uploadFileType"] == null) ? "" : context.Request["url_uploadFileType"].ToString();
|
||
string url_photoId = "";
|
||
|
||
authPermission objAuth = new authPermission();
|
||
|
||
if (!objAuth.isLogin())
|
||
{
|
||
objRet.ret = "no";
|
||
objRet.err_code = "0001";
|
||
objRet.message = "尚未登入,請登入後使用";
|
||
json.WriteObject(context.Response.OutputStream, objRet);
|
||
return;
|
||
}
|
||
|
||
if (method == "")
|
||
{
|
||
objRet.ret = "no";
|
||
objRet.err_code = "0999";
|
||
objRet.message = "沒有Method,無法使用";
|
||
json.WriteObject(context.Response.OutputStream, objRet);
|
||
return;
|
||
}
|
||
|
||
string errmsg = "";
|
||
|
||
if (method != "add") {
|
||
if (url_uid == "") {
|
||
errmsg += "沒有系統編號!\n";
|
||
}
|
||
}
|
||
|
||
if (errmsg.Length > 0) {
|
||
objRet.ret = "no";
|
||
objRet.err_code = "0005";
|
||
objRet.message = errmsg;
|
||
json.WriteObject(context.Response.OutputStream, objRet);
|
||
return;
|
||
}
|
||
|
||
if (method == "get")
|
||
{
|
||
urlObj objUrl = new urlObj(url_uid);
|
||
|
||
objRet.ret = "yes";
|
||
objRet.data = objUrl;
|
||
json.WriteObject(context.Response.OutputStream, objRet);
|
||
return;
|
||
}
|
||
|
||
if (method == "delete")
|
||
{
|
||
if (url_uid == "") {
|
||
errmsg += "沒有系統編號!\n";
|
||
objRet.ret = "no";
|
||
objRet.err_code = "0005";
|
||
objRet.message = errmsg;
|
||
json.WriteObject(context.Response.OutputStream, objRet);
|
||
return;
|
||
}
|
||
|
||
string delQuotationString = string.Format("update url set url_isRevoke = 'Y' where project_uid = '{0}' and url_uid = '{1}'", project_uid, url_uid);
|
||
autoExecSQL objDel = new autoExecSQL(delQuotationString);
|
||
|
||
if (objDel.effectDataCount > 0)
|
||
{
|
||
objRet.ret = "yes";
|
||
}
|
||
else {
|
||
objRet.ret = "no";
|
||
objRet.err_code = "0033";
|
||
objRet.message = "無短網址被刪除,請重新整理後重新刪除!";
|
||
}
|
||
|
||
json.WriteObject(context.Response.OutputStream, objRet);
|
||
return;
|
||
}
|
||
|
||
if (url_descript == "") {
|
||
errmsg += "沒有短網址說明!\n";
|
||
}
|
||
|
||
if (url_Code == "") {
|
||
errmsg += "沒有短網址碼!\n";
|
||
}
|
||
|
||
if (url_directToUrl == "") {
|
||
errmsg += "沒有目的地網址!\n";
|
||
}
|
||
|
||
if (project_uid == "") {
|
||
errmsg += "沒有專案代碼!\n";
|
||
}
|
||
|
||
if (url_gifTag == "Y") {
|
||
if (url_gifLink == "") {
|
||
errmsg += "沒有gif的網路連結位置!\n";
|
||
}
|
||
}
|
||
|
||
if (url_fbTag == "Y") {
|
||
if (pic_data == "")
|
||
{
|
||
errmsg += "沒有FB預覽圖片\n";
|
||
}
|
||
|
||
if (url_fbTitle == "")
|
||
{
|
||
errmsg += "沒有FB預覽標題!\n";
|
||
}
|
||
|
||
if (url_descript == "")
|
||
{
|
||
errmsg += "沒有FB預覽內容!\n";
|
||
}
|
||
}
|
||
|
||
if (errmsg.Length > 0) {
|
||
objRet.ret = "no";
|
||
objRet.err_code = "0005";
|
||
objRet.message = errmsg;
|
||
json.WriteObject(context.Response.OutputStream, objRet);
|
||
return;
|
||
}
|
||
|
||
if (method == "add") {
|
||
string checkString = string.Format("select * from url where url_Code Collate SQL_Latin1_General_CP1_CS_AS = '{0}'", url_Code);
|
||
autoBindDataTable checkSQL = new autoBindDataTable(checkString);
|
||
|
||
if (checkSQL.dataRows.Count > 0) {
|
||
objRet.ret = "no";
|
||
objRet.err_code = "0006";
|
||
objRet.message = "此短網址已經被使用了,請換一組短網址碼再試一次!";
|
||
json.WriteObject(context.Response.OutputStream, objRet);
|
||
return;
|
||
}
|
||
|
||
url_uid = globalClass.CreateRandomCode(32);
|
||
url_photoId = globalClass.CreateRandomCode(36);
|
||
|
||
urlObj objUrl = new urlObj();
|
||
objUrl.url_uid = url_uid;
|
||
objUrl.project_uid = project_uid;
|
||
objUrl.url_descript = url_descript;
|
||
objUrl.url_directToUrl = url_directToUrl;
|
||
objUrl.url_Code = url_Code;
|
||
objUrl.url_playBtn = url_playBtn;
|
||
objUrl.url_fbTag = url_fbTag;
|
||
objUrl.url_gifTag = url_gifTag;
|
||
objUrl.url_gifLink = url_gifLink;
|
||
objUrl.url_fbTitle = url_fbTitle;
|
||
objUrl.url_fbDescript = url_fbDescript;
|
||
objUrl.url_fbPixel = url_fbPixel;
|
||
objUrl.url_fbPixelCode = url_fbPixelCode;
|
||
objUrl.url_googleAds = url_googleAds;
|
||
objUrl.url_googleAwConversionId = url_googleAwConversionId;
|
||
objUrl.url_createUid = objAuth.user_uid;
|
||
objUrl.url_photoId = url_photoId;
|
||
objUrl.url_uploadFile = url_uploadFile;
|
||
objUrl.url_uploadFileClientName = url_uploadFileClientName;
|
||
objUrl.url_uploadFileLinkName = url_uploadFileLinkName;
|
||
objUrl.url_uploadFileType = url_uploadFileType;
|
||
|
||
string picChange = "N";
|
||
|
||
JToken jsonObj;
|
||
|
||
string base64Img = "";
|
||
|
||
|
||
try
|
||
{
|
||
jsonObj = JValue.Parse(pic_data);
|
||
picChange = jsonObj[0]["meta"]["picChange"].ToString();
|
||
base64Img = jsonObj[0]["output"]["image"].ToString();
|
||
}
|
||
catch {
|
||
|
||
}
|
||
|
||
if (picChange == "Y")
|
||
{
|
||
//base64Img = jsonObj[0]["output"]["image"].ToString();
|
||
objUrl.pic_image = globalClass.Base64ToImage(base64Img);
|
||
|
||
//if (objUrl.pic_image.Width > 702) {
|
||
// float ratoF = 702f / float.Parse(objUrl.pic_image.Width.ToString());
|
||
// int newW = Convert.ToInt32(objUrl.pic_image.Width * ratoF);
|
||
// int newH = Convert.ToInt32(objUrl.pic_image.Height * ratoF);
|
||
// objUrl.pic_image = globalClass.resizeImage(objUrl.pic_image, newW, newH);
|
||
//}
|
||
}
|
||
|
||
try
|
||
{
|
||
|
||
objUrl.updateData();
|
||
objRet.data = objUrl;
|
||
objRet.ret = "yes";
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
objRet.ret = "no";
|
||
objRet.err_code = "9999";
|
||
objRet.message = ex.Message;
|
||
}
|
||
|
||
|
||
json.WriteObject(context.Response.OutputStream, objRet);
|
||
return;
|
||
}
|
||
|
||
if (method == "edit") {
|
||
Boolean isChange = false;
|
||
|
||
urlObj objUrl = new urlObj(url_uid);
|
||
|
||
if (objUrl.url_Code == "") {
|
||
objRet.ret = "no";
|
||
objRet.err_code = "0009";
|
||
objRet.message = "無此url_uid資料!";
|
||
json.WriteObject(context.Response.OutputStream, objRet);
|
||
return;
|
||
}
|
||
|
||
if (objUrl.url_gifLink != url_gifLink) {
|
||
isChange = true;
|
||
}
|
||
|
||
if (objUrl.url_fbTag != url_fbTag) {
|
||
isChange = true;
|
||
}
|
||
|
||
if (objUrl.url_playBtn != url_playBtn) {
|
||
isChange = true;
|
||
}
|
||
|
||
if (objUrl.url_directToUrl != url_directToUrl) {
|
||
isChange = true;
|
||
}
|
||
|
||
if (objUrl.url_fbTitle != url_fbTitle) {
|
||
isChange = true;
|
||
}
|
||
|
||
if (objUrl.url_fbDescript != url_fbDescript) {
|
||
isChange = true;
|
||
}
|
||
|
||
string base64Img = "";
|
||
string picChange = "N";
|
||
JToken jsonObj;
|
||
|
||
try
|
||
{
|
||
jsonObj = JValue.Parse(pic_data);
|
||
picChange = jsonObj[0]["meta"]["picChange"].ToString();
|
||
}
|
||
catch {
|
||
jsonObj = null;
|
||
}
|
||
|
||
if (picChange == "Y")
|
||
{
|
||
isChange = true;
|
||
base64Img = jsonObj[0]["output"]["image"].ToString();
|
||
objUrl.pic_image = globalClass.Base64ToImage(base64Img);
|
||
|
||
//if (objUrl.pic_image.Width > 702) {
|
||
// float ratoF = 702f / float.Parse(objUrl.pic_image.Width.ToString());
|
||
// int newW = Convert.ToInt32(objUrl.pic_image.Width * ratoF);
|
||
// int newH = Convert.ToInt32(objUrl.pic_image.Height * ratoF);
|
||
// objUrl.pic_image = globalClass.resizeImage(objUrl.pic_image, newW, newH);
|
||
//}
|
||
}
|
||
|
||
objUrl.url_descript = url_descript;
|
||
objUrl.url_directToUrl = url_directToUrl;
|
||
objUrl.url_playBtn = url_playBtn;
|
||
objUrl.url_gifTag = url_gifTag;
|
||
objUrl.url_gifLink = url_gifLink;
|
||
objUrl.url_fbTag = url_fbTag;
|
||
objUrl.url_fbTitle = url_fbTitle;
|
||
objUrl.url_fbDescript = url_fbDescript;
|
||
objUrl.url_fbPixel = url_fbPixel;
|
||
objUrl.url_fbPixelCode = url_fbPixelCode;
|
||
objUrl.url_googleAds = url_googleAds;
|
||
objUrl.url_googleAwConversionId = url_googleAwConversionId;
|
||
objUrl.url_uploadFileLinkName = url_uploadFileLinkName;
|
||
objUrl.url_uploadFile = url_uploadFile;
|
||
objUrl.url_uploadFileClientName = url_uploadFileClientName;
|
||
objUrl.url_uploadFileType = url_uploadFileType;
|
||
|
||
if (objUrl.updateData())
|
||
{
|
||
if (isChange) {
|
||
try
|
||
{
|
||
string AppID = "563584377383502";
|
||
string AppSecret = "0a8211ad839ec0ffbd5955ef3d4709ec";
|
||
|
||
WebClient wc = new WebClient(); //每次重新取一次token
|
||
|
||
string result = wc.DownloadString("https://graph.facebook.com/oauth/access_token?client_id=" + AppID + "&client_secret=" + AppSecret + "&grant_type=client_credentials");//自動取得發文授權碼
|
||
dynamic resultJson = JValue.Parse(result);
|
||
string access_token = resultJson["access_token"];
|
||
|
||
string url = string.Format("https://graph.facebook.com/?id={0}&scrape=true", HttpUtility.UrlEncode(objUrl.url_shortUrl));
|
||
|
||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
||
request.Method = "POST";
|
||
//request.ContentType = "application/x-www-form-urlencoded";
|
||
|
||
//必須透過ParseQueryString()來建立NameValueCollection物件,之後.ToString()才能轉換成queryString
|
||
NameValueCollection postParams = System.Web.HttpUtility.ParseQueryString(string.Empty);
|
||
|
||
postParams.Add("access_token", access_token);
|
||
|
||
//Console.WriteLine(postParams.ToString());// 將取得"version=1.0&action=preserveCodeCheck&pCode=pCode&TxID=guid&appId=appId", key和value會自動UrlEncode
|
||
//要發送的字串轉為byte[]
|
||
byte[] byteArray = Encoding.UTF8.GetBytes(postParams.ToString());
|
||
using (Stream reqStream = request.GetRequestStream())
|
||
{
|
||
reqStream.Write(byteArray, 0, byteArray.Length);
|
||
}//end using
|
||
|
||
//API回傳的字串
|
||
string responseStr = "";
|
||
//發出Request
|
||
using (WebResponse response = request.GetResponse())
|
||
{
|
||
using (StreamReader sr = new StreamReader(response.GetResponseStream(),Encoding.UTF8))
|
||
{
|
||
responseStr = sr.ReadToEnd();
|
||
}//end using
|
||
}
|
||
|
||
dynamic resultStrJson = JValue.Parse(responseStr);
|
||
}
|
||
catch
|
||
{
|
||
|
||
}
|
||
}
|
||
|
||
objRet.ret = "yes";
|
||
objRet.data = objUrl;
|
||
json.WriteObject(context.Response.OutputStream, objRet);
|
||
return;
|
||
}
|
||
else {
|
||
objRet.ret = "no";
|
||
objRet.message = objUrl.update_result;
|
||
objRet.data = objUrl;
|
||
json.WriteObject(context.Response.OutputStream, objRet);
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
|
||
public class result
|
||
{
|
||
public string ret = "no";
|
||
public string err_code = "0000";
|
||
public string message = "";
|
||
public urlObj data = new urlObj();
|
||
}
|
||
|
||
public bool IsReusable {
|
||
get {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
} |