|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在经过全球个人PC市场占有90%的微软对asp.net不断优化与整合后,asp.net与微软自身平台的动用上更加的高效,加上asp.net在应用上非常容易上手,相信asp.net仍会是最多客户选用的脚本语言,并会在未来几年继续领跑。接口付出宝的接口挪用很不便利,刚做好一个封装,完成了假造买卖和什物买卖。
办理计划中有三个项目和NDoc天生的文档,复杂的序列图:CommonAliPay,封装的付出宝接口。
TestAli,asp.net的测试项目
TestCommonAliPay,Nunit的测试项目。
挪用办法:
1、引进CommonAliPay.dll
2、完成付出宝服务接口的办法挪用体例:
AliPayap=newAliPay();
stringkey="";//填写本人的key
stringpartner="";//填写本人的Partner
StandardGoodsbp=newStandardGoods("trade_create_by_buyer",partner,key,"MD5","卡2",Guid.NewGuid().ToString(),2.551m,1,"hao_ding2000@yahoo.com.cn","hao_ding2000@yahoo.com.cn"
,"EMS",25.00m,"BUYER_PAY","1");
bp.Notify_Url="http://203.86.79.185/ali/notify.aspx";
ap.CreateStandardTrade("https://www.alipay.com/cooperate/gateway.do",bp,this);下面是通用的挪用体例。
上面是只撑持假造货品的体例:
stringkey="";//填写本人的key
stringpartner="";//填写本人的Partner
AliPayap=newAliPay();
DigitalGoodsbp=newDigitalGoods("create_digital_goods_trade_p",partner,key,"MD5","卡2",Guid.NewGuid().ToString(),2.551m,1,"hao_ding2000@yahoo.com.cn","hao_ding2000@yahoo.com.cn");
bp.Notify_Url="http://203.86.79.185/ali/notify.aspx";
ap.CreateDigitalTrade("https://www.alipay.com/cooperate/gateway.do",bp,this);3、完成付出宝关照接口办法的挪用(撑持假造和什物):
protectedvoidPage_Load(objectsender,EventArgse)
{
stringkey="";//填写本人的key
stringpartner="";//填写本人的Partner
AliPayap=newAliPay();
stringnotifyid=Request.Form["notify_id"];
Verifyv=newVerify("notify_verify",partner,notifyid);
ap.WaitSellerSendGoods+=newAliPay.ProcessNotifyEventHandler(ap_WaitSellerSendGoods);
ap.WaitBuyerPay+=newAliPay.ProcessNotifyEventHandler(ap_WaitBuyerPay);
ap.ProcessNotify(this,"https://www.alipay.com/cooperate/gateway.do",key,v,"utf-8");
}
voidap_WaitBuyerPay(objectsender,NotifyEventArgse)
{
////到场本人的处置逻辑
Log4net.log.Error("waitbuyerpayfire");
}
privatevoidap_WaitSellerSendGoods(objectsender,NotifyEventArgse)
{
//到场本人的处置逻辑
Log4net.log.Error("WaitSellerSendGoodsfire");
}付出宝的买卖形态都被界说成了相似称号的事务。
部分源代码剖析:
1、剖析Forms汇合到NotifyEventArgs类,由于前面此类的数据要用来做MD5Sign,以是一切值范例,不克不及存在初始值,如:int的0等。因而用Nullable范型。
privateNotifyEventArgsParseNotify(NameValueCollectionnv,objectobj)
{
PropertyInfo[]propertyInfos=obj.GetType().GetProperties(BindingFlags.Public|BindingFlags.Instance);
foreach(PropertyInfopiinpropertyInfos)
{
stringv=nv.Get(pi.Name.ToLower());
if(v!=null)
{
if(pi.PropertyType==typeof(string))
{
pi.SetValue(obj,v,null);
}
elseif(pi.PropertyType==typeof(int?))
{
pi.SetValue(obj,int.Parse(v),null);
}
elseif(pi.PropertyType==typeof(decimal?))
{
pi.SetValue(obj,decimal.Parse(v),null);
}
elseif(pi.PropertyType==typeof(DateTime?))
{
pi.SetValue(obj,DateTime.Parse(v),null);
}
elseif(pi.PropertyType==typeof(bool))
{
pi.SetValue(obj,bool.Parse(v),null);
}
else
{
//转型失利会抛出非常
pi.SetValue(obj,v,null);
}
}
}
return(NotifyEventArgs)obj;
}
2、从范例中猎取排序后的参数
/**////<summary>
///猎取排序后的参数
///</summary>
///<paramname="obj"></param>
///<returns></returns>
privateSortedList<string,string>GetParam(objectobj)
{
PropertyInfo[]propertyInfos=obj.GetType().GetProperties(BindingFlags.Public|BindingFlags.Instance);
SortedList<string,string>sortedList=newSortedList<string,string>(StringComparer.CurrentCultureIgnoreCase);
foreach(PropertyInfopiinpropertyInfos)
{
if(pi.GetValue(obj,null)!=null)
{
if(pi.Name=="Sign"||pi.Name=="Sign_Type")
{
continue;
}
sortedList.Add(pi.Name.ToLower(),pi.GetValue(obj,null).ToString());
}
}
returnsortedList;
}3、从SortedList中发生参数
privatestringGetUrlParam(SortedList<string,string>sortedList,boolisEncode)
{
StringBuilderparam=newStringBuilder();
StringBuilderencodeParam=newStringBuilder();
if(isEncode==false)
{
foreach(KeyValuePair<string,string>kvpinsortedList)
{
stringt=string.Format("{0}={1}",kvp.Key,kvp.Value);
param.Append(t+"&");
}
returnparam.ToString().TrimEnd(&);
}
else
{
foreach(KeyValuePair<string,string>kvpinsortedList)
{
stringet=string.Format("{0}={1}",HttpUtility.UrlEncode(kvp.Key),HttpUtility.UrlEncode(kvp.Value));
encodeParam.Append(et+"&");
}
returnencodeParam.ToString().TrimEnd(&);
}
}
J2EE比较成熟一点,一些比较出名的企业应用软件都是基于J2EE的。以后的发展就不好说了。不过java比较烦,学.net的话,微软把很多工具都封装好了,学起来可能容易一点。 |
|