服务导航
企业概况     李墨菲博客
百度推广、谷歌推广、SEO优化
域名注册、服务器 VPS租用
网站服务流程    业务渠道代理
网站建设价格表
搜索引擎竞价排名服务
800元企业网站制作特价套餐
搜索引擎免费登录口
咨询QQ:2196677
售后QQ:82090889
为什么要选择八桂网讯?
8年品牌网站建设经验积累,网站成功客户超2200家!
在为您提供服务的任何一个环节,我们都拥有自己的核心团队,保障售后服务的可控性。
由程序编程师、平面美工设计师形成的专业后盾组合,从asp、asp.net、php到java的知识结构互补,使得八桂网讯能够满足客户的功能需求和二次开发整合。
全面的成熟团队为能为您提供一流的平面设计和网站管理后台。
当前位置:网站首页 新闻资讯扩展支付宝货币支付接口
扩展支付宝货币支付接口
编辑:八桂网讯    时间:2009/7/9    浏览:1961
 

由于项目需要用到在线冲值功能所以需要调用支付宝接口。说真的支付宝接口提供的dome真是有点烂…那代码对于可扩展性就更加不用说。所以自己花时间搞了一个不过真是把我搞到头晕,花了很长时间才扩展完成并调试调用(幸好自己有调试环境)。相信这功能对大家有用共享出来。

为了方便扩展制定支付宝回调接口


public interface IReturnHandler


{


/// 〈summary〉


/// 处理Returl_url回调请求


/// 〈/summary〉


/// 〈param name="properties"〉支付宝相关参数〈/param〉


/// 〈param name="customs"〉自定义参数〈/param〉


void Return(System.Collections.Specialized.NameValueCollection properties, IList〈string〉 customs);


/// 〈summary〉


/// 处理Notify_url回调请求


/// 〈/summary〉


/// 〈param name="properties"〉支付宝相关参数〈/param〉


/// 〈param name="customs"〉自定义参数〈/param〉


void Notify(System.Collections.Specialized.NameValueCollection properties, IList〈string〉 customs);


/// 〈summary〉


/// 支付宝处理错误回调请求


/// 〈/summary〉


/// 〈param name="properties"〉支付宝相关参数〈/param〉


/// 〈param name="customs"〉自定义参数〈/param〉


/// 〈param name="responsetext"〉结果内容〈/param〉


void OnError(System.Collections.Specialized.NameValueCollection properties, IList〈string〉 customs,string responsetext);


/// 〈summary〉


/// 合作商ID


/// 〈/summary〉


string Partner


{


get;


}


/// 〈summary〉


/// 加密Key


/// 〈/summary〉


string Key


{


get;


}


/// 〈summary〉


/// 卖家邮件地址


/// 〈/summary〉


string Seller_Email


{


get;


}


}


重新实现AliPay类


/// 〈summary〉


/// 支付宝虚拟货币支付


/// 〈/summary〉


public class AliPay


{


/// 〈summary〉


/// 构造虚拟货币支付对象


/// 〈/summary〉


/// 〈param name="subject"〉商品名称〈/param〉


/// 〈param name="body"〉商品描述〈/param〉


/// 〈param name="total_fee"〉总金额〈/param〉


public AliPay(string subject, string body, decimal total_fee


,string returnurl)


{


Gateway = Untity.Service_Ulr;


Service = "create_direct_pay_by_user";


Sing_Type = Untity.Sing_Type;


Payment_Type = "1";

 


Subject = subject;


Body = body;


Total_Fee = total_fee;


Return_Url = returnurl;


Notify_Url = returnurl;


}


public string Notify_Url


{


get;


set;


}


public string Buyer_Id


{


get;


set;


}

 


public void Execute〈T〉(params string[] customparams) where T:IReturnHandler,new()


{


System.DateTime currentTime = new System.DateTime();


currentTime = System.DateTime.Now;


string out_trade_no = currentTime.ToString("g");


Out_Trade_No = out_trade_no.Replace("-", "");


Out_Trade_No = Out_Trade_No.Replace(":", "");


Out_Trade_No = Out_Trade_No.Replace(" ", "");


//返回支付Url;


System.Web.HttpContext.Current.Response.Redirect(parameter.ToString());

 


}


}


Alipay的代码就贴部分出来,具体代码下载源码可以得到。


Execute方法是用调用支付宝接口,T泛型参数主要描述支付宝回调后用那个IReturnHandler的实现者来处理;customparams就是用户自定义的参数可以是多个,注意参数内容过多生成Returl_url过长会导致支付宝处理错误。


接收支付宝回调的HttpHandler


由于把回调处理类型和自定义参数放在Return_utl里,所以必须要实现一个HttpHandler来进行相关请求接收。


public class ReturnHandler:System.Web.IHttpHandler


{


#region IHttpHandler 成员

 


public bool IsReusable


{


get { return false; }


}


public 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.Default);


StringBuilder strBuilder = new StringBuilder();


while (-1 != sr.Peek())


{


strBuilder.Append(sr.ReadLine());


}

 


strResult = strBuilder.ToString();


}


catch (Exception exp)


{

 


strResult = "错误:" + exp.Message;


}

 


return strResult;


}

 


public void ProcessRequest(System.Web.HttpContext context)


{

 


string requesturl = context.Server.UrlDecode(context.Request.Path);


string alipayNotifyURL = Untity.Service_Ulr;


string urltype=System.IO.Path.GetFileName(requesturl).Substring(0, 1).ToLower();


MatchCollection matchs = Regex.Matches(requesturl, @"_([0-9a-zA-Z\%=]+)");


string TypeName = System.Text.Encoding.ASCII.GetString(Convert.FromBase64String(matchs[0].Groups[1].Value));


IReturnHandler handler = (IReturnHandler)Activator.CreateInstance(Type.GetType(TypeName));


IList〈string〉 paramsdata = new List〈string〉();


for (int k = 1; k 〈 matchs.Count; k++)


{


paramsdata.Add(matchs[k].Groups[1].Value);


}


string partner = handler.Partner;


string key = handler.Key;


NameValueCollection payResultData;


if (urltype == "r")


{


payResultData = context.Request.QueryString;

 


}


else


{


payResultData = context.Request.Form;


}


alipayNotifyURL = alipayNotifyURL + "service=notify_verify" + "&partner=" + partner + "?ify_id=" + payResultData["notify_id"];


string responseTxt = Get_Http(alipayNotifyURL, 120000);


int i;


String[] requestarr = payResultData.AllKeys;


//进行排序;


string[] Sortedstr = Untity.BubbleSort(requestarr);


//构造待md5摘要字符串;


string prestr = "";


for (i = 0; i 〈 Sortedstr.Length; i++)


{


if (context.Request.Form[Sortedstr[i]] != "" && Sortedstr[i] != "sign" && Sortedstr[i] != "sign_type")


{


if (i == Sortedstr.Length - 1)


{


prestr = prestr + Sortedstr[i] + "=" + payResultData[Sortedstr[i]];


}


else


{


prestr = prestr + Sortedstr[i] + "=" + payResultData[Sortedstr[i]] + "&";


}


}

 


}


prestr = prestr + key;


string mysign =Untity.GetMD5(prestr);


string sign = payResultData["sign"];


if (responseTxt == "true" && mysign == sign) //验证支付发过来的消息,签名是否正确


{


string status = payResultData["trade_status"];

 

 


if (status == "TRADE_FINISHED")// WAIT_SELLER_SEND_GOODS 判断支付状态(文档中有枚举表可以参考)


{

 

 


//更新自己数据库的订单语句,请自己填写一下


if (urltype == "r")


{


handler.Return(payResultData, paramsdata);


}


else


{


handler.Notify(payResultData, paramsdata);


}

 


}


}


else


{


handler.OnError(payResultData, paramsdata, responseTxt);


}


}

 


#endregion


}


到这里封装完成。

八桂网讯 爱伦文化 深圳外语培训 招商加盟 迪优目录 广西旅游365 八桂大地 建站导航网 南宁创意雕塑 双成纸管
八桂网讯-高端网站建设专家
Copyright © 2004- 八桂网讯网络技术有限公司 Baguidadi Inc. All Rights Reserved.