///<summary>///反射出指定对象实例的所有属性值///</summary>///<paramname=”obj”>指定对象实例</param>///<returns></returns>privatestaticstring[]GetUrlParam(objectobj){PropertyInfo[]propertyInfos=obj.GetType().GetProperties(BindingFlags.Public|BindingFlags.Instance);stringurlParam=””;foreach(PropertyInfopiinpropertyInfos){if(pi.GetValue(obj,null)!=null){if(pi.Name==”Sign”||pi.Name==”Sign_Type”){continue;}//物流信息时if(pi.Name==”Logistics_Info”){LogisticsInfo[]logisticsInfoArray=((NormalTrade)obj).Logistics_Info;inti=0;foreach(LogisticsInfologisticsInfoinlogisticsInfoArray){if(logisticsInfo.Logistics_Type!=””){//物流参数的下标(第一种物流方式为””,第二种为”_1″,第三种为”_2″,以此类推)stringorderflag=””;if(i>0){orderflag=”_”+i;}urlParam+=”logistics_type”+orderflag+”=”+logisticsInfo.Logistics_Type+”&logistics_fee”+orderflag+”=”+logisticsInfo.Logistics_Fee+”&logistics_payment”+orderflag+”=”+logisticsInfo.Logistics_Payment+”&”;i++;}}}else{urlParam+=pi.Name.ToLower().Replace(“input_charset”,”_input_charset”)+”=”+pi.GetValue(obj,null).ToString()+”&”;}}}if(urlParam.EndsWith(“&”)){urlParam=urlParam.Substring(0,urlParam.Length-1);}returnurlParam.Split(‘&’);}在获得了相应的字符串数组信息之后,通过一个快速排序方法将这个字符串数组进行排序,即:QuickSort方法。当然在支付宝官方所给的示例子使用了冒泡算法,虽然能实现功能但效率上实在是不敢恭维。快速算法的实现代码如下所示:
#region(URL)参数快速排序///<summary>///把数组划分为两个部分///</summary>///<paramname=”arr”>划分的数组</param>///<paramname=”low”>数组低端上标</param>///<paramname=”high”>数组高端下标</param>///<returns></returns>publicstaticintPartition(string[]strArray,intlow,inthigh){//进行一趟快速排序,返回中心轴记录位置//arr[0]=arr[low];stringpivot=strArray[low];//把中心轴置于arr[0]while(low<high){while(low<high&&System.String.CompareOrdinal(strArray[high],pivot)>=0)–high;//将比中心轴记录小的移到低端Swap(refstrArray[high],refstrArray[low]);while(low<high&&System.String.CompareOrdinal(strArray[low],pivot)<=0)++low;Swap(refstrArray[high],refstrArray[low]);//将比中心轴记录大的移到高端}strArray[low]=pivot;//中心轴移到正确位置returnlow;//返回中心轴位置}publicstaticvoidSwap(refstringi,refstringj){stringt;t=i;i=j;j=t;}///<summary>///快速排序算法///</summary>///<paramname=”arr”>划分的数组</param>///<paramname=”low”>数组低端上标</param>///<paramname=”high”>数组高端下标</param>publicstaticvoidQuickSort(string[]strArray,intlow,inthigh){if(low<=high-1)//当arr[low,high]为空或只一个记录无需排序{intpivot=Partition(strArray,low,high);//左子树QuickSort(strArray,low,pivot-1);//右子树QuickSort(strArray,pivot+1,high);}}#endregion
而排序结序后,通过CreateTradeUrl方法将这个经过排序的字符串数组组合成为我们所需要
的链接串格式,如下所示:
tradeUrl = CreateTradeUrl(urlParamArray);
接着调用CreateEncodeUrl方法再次对经过排序的字符串数组进行编码并也转换成所需要的
链接串格式,当然这里的链接串将会是我们在IE地址栏中所出现的那个链接串中的内容。而上面
CreateTradeUrl的链接串则只是为了进行GetMD5加密并获得 sign签名才做的,这部分内容请
参见下面代码段:
encodeUrl=CreateEncodeUrl(urlParamArray);returnPayUrl+encodeUrl+string.Format(“&sign={0}&sign_type={1}”,GetMD5(tradeUrl+digitalGoods.Sign,digitalGoods.Input_Charset),digitalGoods.Sign_Type);这样我们就可以通过传入交易信息来获取支付宝交易URL链接串了。好了,今天的内容就先到这里,在下一篇文章中,我们将回到在线支付的业务流程中,继续了解在线支付流程中的支付宝数据回传以及在线进行商品交易时的流程设计方面的内容。tag:alipay,支付宝,discuznt,online trade,在线交易 作者:代震军,daizhj原文链接:http://www.cnblogs.com/daizhj/archive/2008/08/18/1270189.html切忌贪婪,恨不得一次玩遍所有传说中的好景点,