2025-03-28 09:49:56 +08:00

1018 lines
30 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Net;
using System.Reflection;
using System.Security.Cryptography;
using System.Text;
using System.Web;
using System.Web.Script.Serialization;
namespace PayService
{
public class Common
{
public enum RetCode
{
= 100,
= 101,
= 102,
= 103,
= 104,
= 105,
= 106,
= 201,
= 202,
= 203,
, = 204,
= 205,
= 206,
= 300,
退 = 301,
= 302,
= 303,
= 304,
= 305,
= 999
}
public enum RetCode_Check
{
= 100,
= 101,
= 201,
退 = 300,
= 301,
= 302,
= 303,
= 304,
= 999
}
#region
//客户号
//private const string custom_no = "linkea-test";
////校验码秘钥
//private const string shaCode = "DAD7640691B9FAD3665217887F384B6F";
//AppCode
private const string app_key = "100083";
//app_secret 秘钥
private const string app_secret = "457fbfa0-0076-44c2-b45b-2b3aa84d6750";
//工作秘钥
private const string work_key = "D905EEAD570840AC96A34DEB42A29B67";
////Ksn
//private const string ksn = "66660000000001";
////渠道号
//private const string channel_no = "ALIPAY";
////微信 WECHAT_PAY
////交易类型
//private const string paysEnum = "ALIPAY";
//请求Url
private const string postUrl = "http://gateway.ringou.cn/opengw/router/rest.htm";
//http://101.68.65.38:7002/opengw/router/rest.htm";
#endregion
public static String Get_Http(String a_strUrl, int timeout)
{
string strResult;
try
{
HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(a_strUrl);
myReq.Timeout = timeout;
HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();
Stream myStream = HttpWResp.GetResponseStream();
StreamReader sr = new StreamReader(myStream, Encoding.UTF8);
StringBuilder strBuilder = new StringBuilder();
while (-1 != sr.Peek())
{
strBuilder.Append(sr.ReadLine());
}
strResult = strBuilder.ToString();
}
catch (Exception exp)
{
strResult = "错误:" + exp.Message;
}
return strResult;
}
public static string GetSha256(string str)
{
SHA256 sha256 = new SHA256CryptoServiceProvider();//建立一个SHA256
byte[] source = Encoding.UTF8.GetBytes(str);//将字符串转为Byte[]
byte[] crypto = sha256.ComputeHash(source);//进行SHA256加密
string byteStr = string.Empty;
if (crypto != null || crypto.Length > 0)
{
foreach (var item in crypto)
{
byteStr += string.Format("{0:X2}", item);
}
}
return byteStr;
}
public static string GetMD5(string s)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] t = md5.ComputeHash(Encoding.GetEncoding("utf-8").GetBytes(s));
StringBuilder sb = new StringBuilder(32);
for (int i = 0; i < t.Length; i++)
{
sb.Append(t[i].ToString("x").PadLeft(2, '0'));
}
return sb.ToString();
}
#region BubbleSort
public static string[] BubbleSort(string[] r)
{
int i, j;
string temp;
bool exchange;
for (i = 0; i < r.Length; i++)
{
exchange = false;
for (j = r.Length - 2; j >= i; j--)
{
if (String.CompareOrdinal(r[j + 1], r[j]) < 0)
{
temp = r[j + 1];
r[j + 1] = r[j];
r[j] = temp;
exchange = true;
}
}
if (!exchange)
{
break;
}
}
return r;
}
#endregion
#region CreatUrl
public static string CreatUrl(string Amount, string dynamic_id, string out_trade_no, string payType, string subject = "牵软网络")
{
int i;
string custom_no = "", shaCode = "", ksn = "", channel_no = "", paysEnum = "";
switch (payType)
{
case "ALIPAY":
custom_no = "linkea-qianruan-alipay";
//校验码秘钥
shaCode = "9DACF5FBDCF7EE8D5CFFC32E80ADFF51";
//Ksn
ksn = "678804280000001";
//渠道号
channel_no = "ALIPAY";
//交易类型
paysEnum = "ALIPAY";
break;
case "WECHAT_PAY":
custom_no = "linkea-qianruan-wechat";
//校验码秘钥
shaCode = "3C9D77299B35012BC02BDAB8B1000C29";
//Ksn
ksn = "678804280000002";
//渠道号
channel_no = "WECHAT_PAY";
//交易类型
paysEnum = "WECHAT_PAY";
break;
}
//构造数组;
string[] Oristr ={
"access_token=",
"app_key="+ app_key,
"channel_no="+payType,
"check_code="+ GetSha256(custom_no + payType + Amount + shaCode),
"custom_no="+ custom_no,
"dynamic_id="+dynamic_id,
"dynamic_id_type="+ "bar_code",
"format="+ "json",
"ksn="+ ksn,
"method="+ "linkea.pays.thirdpay.createAndPay",
"out_trade_no="+ out_trade_no,
"pays_enum="+ payType,
"product_code="+ "BARCODE_PAY_OFFLINE",
"subject="+ subject,
"timestamp="+ System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
"total_fee="+ Amount,
"v="+"1.1",
"work_key="+ work_key,
"sign_method=md5"
};
//进行排序;
string[] Sortedstr = BubbleSort(Oristr);
//构造待md5摘要字符串
StringBuilder prestr = new StringBuilder();
for (i = 0; i < Sortedstr.Length; i++)
{
if (i == Sortedstr.Length - 1)
{
prestr.Append(Sortedstr[i]);
}
else
{
prestr.Append(Sortedstr[i] + "&");
}
}
//生成Md5摘要
string jiami = app_secret + prestr.ToString().Replace("=", "").Replace("&", "") + app_secret;
string sign = GetMD5(jiami);
//构造支付Url
char[] delimiterChars = { '=' };
StringBuilder parameter = new StringBuilder();
parameter.Append(postUrl + "?");
for (i = 0; i < Sortedstr.Length; i++)
{
parameter.Append(Sortedstr[i].Split(delimiterChars)[0] + "=" + HttpUtility.UrlEncode(Sortedstr[i].Split(delimiterChars)[1]) + "&");
}
parameter.Append("&sign=" + sign.ToUpper());
//返回支付Url
return parameter.ToString();
}
#endregion
#region trade_query
public static string trade_query(string out_trade_no, string PAYTYPE)
{
string custom_no = "", shaCode = "", ksn = "", channel_no = "", paysEnum = "";
switch (PAYTYPE)
{
case "ALIPAY":
custom_no = "linkea-qianruan-alipay";
//校验码秘钥
shaCode = "9DACF5FBDCF7EE8D5CFFC32E80ADFF51";
//Ksn
ksn = "678804280000001";
//渠道号
channel_no = "ALIPAY";
//交易类型
paysEnum = "ALIPAY";
break;
case "WECHAT_PAY":
custom_no = "linkea-qianruan-wechat";
//校验码秘钥
shaCode = "3C9D77299B35012BC02BDAB8B1000C29";
//Ksn
ksn = "678804280000002";
//渠道号
channel_no = "WECHAT_PAY";
//交易类型
paysEnum = "WECHAT_PAY";
break;
}
string[] Oristr ={
"channel_no="+ PAYTYPE,
"app_key="+ app_key,
"check_code="+ GetSha256(custom_no + PAYTYPE + shaCode),
"custom_no="+custom_no,
"format="+ "json",
"work_key=" +work_key,
"ksn="+ksn,
"method="+ "linkea.pays.thirdpay.query",
"out_trade_no="+out_trade_no,
"pays_enum="+PAYTYPE,
"timestamp="+ System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
"sign_method=md5",
"v="+"1.1"
};
//进行排序;
Oristr = BubbleSort(Oristr);
StringBuilder prestr = new StringBuilder();
for (int i = 0; i < Oristr.Length; i++)
{
if (i == Oristr.Length - 1)
{
prestr.Append(Oristr[i]);
}
else
{
prestr.Append(Oristr[i] + "&");
}
}
string jiami = app_secret + prestr.ToString().Replace("=", "").Replace("&", "") + app_secret;
string sign = GetMD5(jiami);
//构造
char[] delimiterChars = { '=' };
StringBuilder parameter = new StringBuilder();
parameter.Append(postUrl + "?");
for (int i = 0; i < Oristr.Length; i++)
{
parameter.Append(Oristr[i].Split(delimiterChars)[0] + "=" + HttpUtility.UrlEncode(Oristr[i].Split(delimiterChars)[1]) + "&");
}
parameter.Append("&sign=" + sign.ToUpper());
//返回支付Url
return parameter.ToString();
}
#endregion
}
#region ResultObject_response
public class ResultObject_response
{
public string result_code
{
get;
set;
}
public string result_msg
{
get;
set;
}
public string sign
{
get;
set;
}
}
#endregion
#region PayCreateObject
public class PayCreateObject
{
/// <summary>
/// 流水码
/// </summary>
public string trade_no
{
get;
set;
}
/// <summary>
/// 门店内码
/// </summary>
public string shopcode
{
get;
set;
}
/// <summary>
/// 机器内码
/// </summary>
public string machinecode
{
get;
set;
}
/// <summary>
/// 时间戳
/// </summary>
public string timestamp
{
get;
set;
}
/// <summary>
/// 金额
/// </summary>
public string amount
{
get;
set;
}
/// <summary>
/// 支付类型
/// </summary>
public string paymode
{
get;
set;
}
public string custom_no
{
get;
set;
}
public string trade_desc
{
get;
set;
}
public string signcode
{
get;
set;
}
}
#endregion
#region PayCreateResult
public class PayCreateResult
{
public string trade_no
{
get;
set;
}
//public string shopcode
//{
// get;
// set;
//}
//public string machinecode
//{
// get;
// set;
//}
//public string timestamp
//{
// get;
// set;
//}
public string trade_num
{
get;
set;
}
public string result_code
{
get;
set;
}
public string result_desc
{
get;
set;
}
}
#endregion
#region PayQueryObject
public class PayQueryObject
{
public string trade_no
{
get;
set;
}
public string shopcode
{
get;
set;
}
public string machinecode
{
get;
set;
}
public string timestamp
{
get;
set;
}
public string paymode
{
get;
set;
}
public string signcode
{
get;
set;
}
}
#endregion
#region PayQueryResult
public class PayQueryResult
{
public string trade_no
{
get;
set;
}
public string trade_num
{
get;
set;
}
public string result_code
{
get;
set;
}
public string result_desc
{
get;
set;
}
public List<string> result_data
{
get;
set;
}
}
#endregion
#region JsonHelper
public class JsonHelper
{
/// <summary>
/// DataSet转换为Json
/// </summary>
/// <param name="dataSet">DataSet对象</param>
/// <returns>Json字符串</returns>
public static string DataSetToJson(DataSet dataSet)
{
string jsonString = "{";
foreach (DataTable table in dataSet.Tables)
{
jsonString += "\"" + table.TableName + "\":" + DataTableToJson(table, table.TableName) + ",";
}
jsonString = jsonString.TrimEnd(',');
return jsonString + "}";
}
public static string ArrayToJson(string[] strs)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < strs.Length; i++)
{
sb.AppendFormat("'{0}':'{1}',", i + 1, strs[i]);
}
if (sb.Length > 0)
{
return ("{" + sb.ToString().TrimEnd(new char[] { ',' }) + "}");
}
return "";
}
public static string ArrayToJson<T>(List<T> list, string propertyname)
{
StringBuilder sb = new StringBuilder();
if (list.Count > 0)
{
sb.Append("[{\"");
sb.Append(propertyname);
sb.Append("\":[");
foreach (T t in list)
{
sb.Append("\"");
sb.Append(t.ToString());
sb.Append("\",");
}
return (sb.ToString().TrimEnd(new char[] { ',' }) + "]}]");
}
return "";
}
public static string DataRowToJson(DataRow dr)
{
StringBuilder sb = new StringBuilder();
sb.Append("{");
foreach (DataColumn dc in dr.Table.Columns)
{
sb.Append("\"");
sb.Append(dc.ColumnName);
sb.Append("\":\"");
if (((dr[dc] != null) && (dr[dc] != DBNull.Value)) && (dr[dc].ToString() != ""))
{
sb.Append(dr[dc]);
}
else
{
sb.Append("&nbsp;");
}
sb.Append("\",");
}
sb = sb.Remove(0, sb.Length - 1);
sb.Append("},");
return sb.ToString();
}
public static string DataTableToJson(DataTable dt, string dtName)
{
StringBuilder sb = new StringBuilder();
sb.Append("{\"");
sb.Append(dtName);
sb.Append("\":[");
if (DataTableHelper.IsExistRows(dt))
{
foreach (DataRow dr in dt.Rows)
{
sb.Append("{");
foreach (DataColumn dc in dr.Table.Columns)
{
sb.Append("\"");
sb.Append(dc.ColumnName);
sb.Append("\":\"");
if (((dr[dc] != null) && (dr[dc] != DBNull.Value)) && (dr[dc].ToString() != ""))
{
sb.Append(dr[dc].ToString().Replace("\\", "\\\\").Replace("\'", "\\\'").Replace("\t", " ").Replace("\r", " ").Replace("\n", "<br/>").Replace("\"", "'"));
//sb.Append(dr[dc].ToString().Replace("\"", "'").Replace("'","“")).Replace(@"\", "/");
}
else
{
sb.Append("&nbsp;");
}
sb.Append("\",");
}
sb = sb.Remove(sb.Length - 1, 1);
sb.Append("},");
}
sb = sb.Remove(sb.Length - 1, 1);
}
sb.Append("]}");
return JsonCharFilter(sb.ToString());
}
private static List<string> GetObjectProperty(object o)
{
List<string> propertyslist = new List<string>();
PropertyInfo[] propertys = o.GetType().GetProperties();
foreach (PropertyInfo p in propertys)
{
propertyslist.Add(string.Concat(new object[] { "\"", p.Name.ToString(), "\":\"", p.GetValue(o, null), "\"" }));
}
return propertyslist;
}
public static string HashtableToJson(Hashtable data, string dtName)
{
StringBuilder sb = new StringBuilder();
sb.Append("{\"");
sb.Append(dtName);
sb.Append("\":[{");
foreach (object key in data.Keys)
{
object value = data[key];
sb.Append("\"");
sb.Append(key);
sb.Append("\":\"");
if (!(string.IsNullOrEmpty(value.ToString()) || (value == DBNull.Value)))
{
sb.Append(value).Replace(@"\", "/");
}
else
{
sb.Append(" ");
}
sb.Append("\",");
}
sb = sb.Remove(sb.Length - 1, 1);
sb.Append("}]}");
return JsonCharFilter(sb.ToString());
}
public static string IListToJson<T>(IList<T> list, bool FlagBool = false)
{
StringBuilder sb = new StringBuilder();
sb.Append("[");
foreach (T t in list)
{
sb.Append(ObjectToJson<T>(t, FlagBool) + ",");
}
return (sb.ToString().TrimEnd(new char[] { ',' }) + "]");
}
public static string IListToJson<T>(IList<T> list, string ClassName)
{
StringBuilder sb = new StringBuilder();
sb.Append("{\"" + ClassName + "\":[");
foreach (T t in list)
{
sb.Append(ObjectToJson<T>(t) + ",");
}
return (sb.ToString().TrimEnd(new char[] { ',' }) + "]}");
}
private static string JsonCharFilter(string sourceStr)
{
return sourceStr;
}
public static string ListToJson<T>(List<T> objlist, string jsonName, bool ObjectName = true)
{
string result = string.Empty;
if (ObjectName)
{
result += "{";
if (jsonName.Equals(string.Empty))
{
object o = objlist[0];
jsonName = o.GetType().ToString();
result = result + "\"" + jsonName + "\":[";
}
else
{
result = result + "\"" + jsonName + "\":[";
}
}
else
{
result = "[";
}
bool firstline = true;
foreach (object oo in objlist)
{
if (!firstline)
{
result = result + "," + ObjectToJson(oo);
}
else
{
result = result + ObjectToJson(oo);
firstline = false;
}
}
if (ObjectName)
{
return (result + "]}");
}
else
{
return (result + "]");
}
}
private static string ObjectToJson(object o)
{
string result = "{";
List<string> ls_propertys = new List<string>();
ls_propertys = GetObjectProperty(o);
foreach (string str_property in ls_propertys)
{
if (result.Equals("{"))
{
result = result + str_property;
}
else
{
result = result + "," + str_property;
}
}
return (result + "}");
}
public static string ObjectToJson<T>(T t, bool FlagBool = false)
{
FlagBool = false;
StringBuilder sb = new StringBuilder();
string json = "";
if (t == null)
{
return json;
}
sb.Append("{");
PropertyInfo[] properties = t.GetType().GetProperties();
foreach (PropertyInfo pi in properties)
{
sb.Append("\"" + pi.Name.ToString() + "\"");
sb.Append(":");
if (FlagBool == true && pi.PropertyType.ToString() == "System.Boolean")
{
sb.Append(pi.GetValue(t, null));
}
else
{
sb.Append("\"" + pi.GetValue(t, null) + "\"");
}
sb.Append(",");
}
return (sb.ToString().TrimEnd(new char[] { ',' }) + "}");
}
public static string ObjectToJson<T>(T t, string ClassName)
{
StringBuilder sb = new StringBuilder();
sb.Append("{\"" + ClassName + "\":[");
string json = "";
if (t == null)
{
return json;
}
sb.Append("{");
PropertyInfo[] properties = t.GetType().GetProperties();
foreach (PropertyInfo pi in properties)
{
sb.Append("\"" + pi.Name.ToString() + "\"");
sb.Append(":");
sb.Append("\"" + pi.GetValue(t, null) + "\"");
sb.Append(",");
}
return (sb.ToString().TrimEnd(new char[] { ',' }) + "}]}");
}
public static string ObjectToJson<T>(IList<T> IL, string jsonName)
{
StringBuilder Json = new StringBuilder();
Json.Append("{\"" + jsonName + "\":[");
if (IL.Count > 0)
{
for (int i = 0; i < IL.Count; i++)
{
PropertyInfo[] pis = Activator.CreateInstance<T>().GetType().GetProperties();
Json.Append("{");
for (int j = 0; j < pis.Length; j++)
{
Json.Append(string.Concat(new object[] { "\"", pis[j].Name.ToString(), "\":\"", pis[j].GetValue(IL[i], null), "\"" }));
if (j < (pis.Length - 1))
{
Json.Append(",");
}
}
Json.Append("}");
if (i < (IL.Count - 1))
{
Json.Append(",");
}
}
}
Json.Append("]}");
return Json.ToString();
}
/// <summary>
/// JSON格式数组转化为对应的List<T>
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="JsonStr">JSON格式数组</param>
/// <returns></returns>
public static List<T> JSONStringToList<T>(string JsonStr)
{
JavaScriptSerializer Serializer = new JavaScriptSerializer();
//设置转化JSON格式时字段长度
List<T> objs = Serializer.Deserialize<List<T>>(JsonStr);
return objs;
}
public static Object Json2Obj(String json, Type t)
{
try
{
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(t);
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
return serializer.ReadObject(ms);
}
}
catch
{
return null;
}
}
/// <summary>
/// Json 字符串 转换为 DataTable数据集合
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static DataTable ToDataTable(string json)
{
DataTable dataTable = new DataTable(); //实例化
DataTable result;
try
{
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
ArrayList arrayList = javaScriptSerializer.Deserialize<ArrayList>(json);
if (arrayList.Count > 0)
{
foreach (Dictionary<string, object> dictionary in arrayList)
{
if (dictionary.Keys.Count == 0)
{
result = dataTable;
return result;
}
//Columns
if (dataTable.Columns.Count == 0)
{
foreach (string current in dictionary.Keys)
{
dataTable.Columns.Add(current, dictionary[current].GetType());
}
}
//Rows
DataRow dataRow = dataTable.NewRow();
foreach (string current in dictionary.Keys)
{
dataRow[current] = dictionary[current];
}
dataTable.Rows.Add(dataRow); //循环添加行到DataTable中
}
}
}
catch
{
}
result = dataTable;
return result;
}
/// <summary>
/// 将JSON解析成DataSet只限标准的JSON数据
/// 例如Json{t1:[{name:'数据name',type:'数据type'}]}
/// 或 Json{t1:[{name:'数据name',type:'数据type'}],t2:[{id:'数据id',gx:'数据gx',val:'数据val'}]}
/// </summary>
/// <param name="Json">Json字符串</param>
/// <returns>DataSet</returns>
public static DataSet JsonToDataSet(string Json)
{
try
{
DataSet ds = new DataSet();
JavaScriptSerializer JSS = new JavaScriptSerializer();
object obj = JSS.DeserializeObject(Json);
Dictionary<string, object> datajson = (Dictionary<string, object>)obj;
foreach (var item in datajson)
{
DataTable dt = new DataTable(item.Key);
object[] rows = (object[])item.Value;
foreach (var row in rows)
{
Dictionary<string, object> val = (Dictionary<string, object>)row;
DataRow dr = dt.NewRow();
foreach (KeyValuePair<string, object> sss in val)
{
if (!dt.Columns.Contains(sss.Key))
{
dt.Columns.Add(sss.Key.ToString());
dr[sss.Key] = sss.Value;
}
else
dr[sss.Key] = sss.Value;
}
dt.Rows.Add(dr);
}
ds.Tables.Add(dt);
}
return ds;
}
catch
{
return null;
}
}
}
#endregion
}