QQ.EntityClass.QPayCreateOrder qPayCreate = new QQ.EntityClass.QPayCreateOrder();
qPayCreate.appid = Appid;// appid 应用id
qPayCreate.mch_id = mch_id;//商户号
qPayCreate.body = HttpUtility.UrlEncode("杰巴网络-赞赏", System.Text.Encoding.UTF8);//商品描述
qPayCreate.nonce_str = Guid.NewGuid().ToString("N");//随机字符串
qPayCreate.fee_type = "CNY";//人民币
qPayCreate.total_fee = 1;//分为单位
qPayCreate.spbill_create_ip = "123.12.12.123";
qPayCreate.trade_type = "NATIVE";//支付场景
qPayCreate.notify_url = "https://www.jiebainc.com";
qPayCreate.out_trade_no = Guid.NewGuid().ToString("N");
//请求报文 生成
string xmlstr = QQ.Qpay.QPayCreateOrder.QPayCreateOrderXmlStr(qPayCreate, mch_key);
//返回报文
string result = QQ.Qpay.QPayCreateOrder.CreateOrderSend(xmlstr);
//xml 转实体类
var enresult = CoreHelper.Helper.XmlHelper.ToResponseObject<QQ.EntityClass.QPayOrderCreateSuccess>(result);
public static string QPayCreateOrderXmlStr(EntityClass.QPayCreateOrder qPayCreateOrder,string seckey="")
{
Dictionary<string, object> dic = new Dictionary<string, object>();
foreach (var item in qPayCreateOrder.GetType().GetProperties())
{
if (item.GetValue(qPayCreateOrder)!=null)
{
dic.Add(item.Name, item.GetValue(qPayCreateOrder));
}
}
//签名
string sign = CoreHelper.Encrypt.MD5.EncryptMD5(getParamSrc(dic) + "key=" + seckey,Encoding.Default).ToUpper();
qPayCreateOrder.sign = sign;
string xmlbody = XmlSerialize(qPayCreateOrder);
return xmlbody;
}
public static string CreateOrderSend(string data)
{
try
{
string result=CoreHelper.Helper.HttpRequest.HttpPost(Config.Payqq + "/cgi-bin/pay/qpay_unified_order.cgi", data, Encoding.Default);
return result;
}
catch (Exception ex)
{
return "";
}
}
#region XML string --> object
/// <summary>
/// Convert xml message to object
/// </summary>
/// <param name="type"></param>
/// <param name="xmlStr"></param>
/// <returns></returns>
public static T ToResponseObject<T>(string xmlStr) where T : new()
{
try
{
//T obj = default(T);
T obj = new T();
var repType = typeof(T);
XmlDocument document = new XmlDocument();
document.LoadXml(xmlStr); //加载Xml文件
XmlElement node = document.DocumentElement; //xml的根标签
var nodeList = document.ChildNodes;
var properties = repType.GetProperties();
foreach (var itemProp in properties)
{
#region current type is List
if (itemProp.PropertyType.FullName.Contains("System.Collections.Generic.List"))
{
object array = new object();
var arryLength = 0;
var notNullLength = 0;
var arryType = itemProp.PropertyType.UnderlyingSystemType;
var objList = itemProp.GetValue(obj, null) as System.Collections.IEnumerable;
var enumt = objList.GetEnumerator();
//enumt.
var currentType = itemProp.PropertyType.GetGenericArguments()[0];
foreach (XmlNode xmlitem in node.ChildNodes)
{
if (xmlitem.Name == itemProp.Name)
{
arryLength++;
}
}
if (arryLength > 0)
{
var arrayModel = arryType.InvokeMember("Set", System.Reflection.BindingFlags.CreateInstance, null, array, new object[] { arryLength }) as System.Collections.IList;
foreach (XmlNode item in node.ChildNodes)
{
//current type is array
if (item.Name == itemProp.Name)
{
var model = currentType.Assembly.CreateInstance(currentType.FullName); // arryType.GetElementType().Assembly.CreateInstance(currentType.FullName);
SetArray(item.ChildNodes, model, true);
arrayModel.Add(model);
//arrayModel[notNullLength] = model;
notNullLength++;
}
}
itemProp.SetValue(obj, arrayModel, null);
}
continue;
}
#endregion
var baseType = itemProp.PropertyType.BaseType.Name;
if (baseType == "Array")
{
#region Current type is Array
object array = new object();
var arryLength = 0;
var notNullLength = 0;
var arryType = itemProp.PropertyType.UnderlyingSystemType;
foreach (XmlNode xmlitem in node.ChildNodes)
{
if (xmlitem.Name == itemProp.Name)
{
arryLength++;
}
}
if (arryLength > 0)
{
var arrayModel = arryType.InvokeMember("Set", System.Reflection.BindingFlags.CreateInstance, null, array, new object[] { arryLength }) as System.Collections.IList;
foreach (XmlNode item in node.ChildNodes)
{
//current type is array
if (item.Name == itemProp.Name)
{
var model = arryType.GetElementType().Assembly.CreateInstance(arryType.GetElementType().FullName);
SetArray(item.ChildNodes, model);
arrayModel[notNullLength] = model;
notNullLength++;
}
}
itemProp.SetValue(obj, arrayModel, null);
}
#endregion
continue;
}
else
{
#region Current type isn't Array
foreach (XmlNode item in node.ChildNodes)
{
#region Current type is Number
if (itemProp.Name == item.Name && (itemProp.PropertyType == typeof(long) || itemProp.PropertyType == typeof(int) || itemProp.PropertyType == typeof(string)))
{
if (itemProp.PropertyType == typeof(int) || itemProp.PropertyType == typeof(long))
{
if (!string.IsNullOrEmpty(item.InnerText))
{
if (itemProp.PropertyType == typeof(int))
{
itemProp.SetValue(obj, Convert.ToInt32(item.InnerText), null);
}
else
{
itemProp.SetValue(obj, Convert.ToInt64(item.InnerText), null);
}
}
else
{
itemProp.SetValue(obj, 0, null);
}
}
else
{
itemProp.SetValue(obj, item.InnerText, null);
}
}
#endregion
#region Current type is Model
if (itemProp.PropertyType != typeof(long) && itemProp.PropertyType != typeof(string) && itemProp.PropertyType != typeof(int) && itemProp.PropertyType.Name == item.Name && item.HasChildNodes && item.FirstChild.NodeType == System.Xml.XmlNodeType.Element)
{
var modelType = itemProp.PropertyType.UnderlyingSystemType;
var model = modelType.Assembly.CreateInstance(modelType.FullName);
SetArray(item.ChildNodes, model);
itemProp.SetValue(obj, model, null);
}
#endregion
}
#endregion
continue;
}
}
repType = obj.GetType();
return obj;
}
catch (Exception ex)
{
throw ex;
}
}
#endregion