支付宝接口 有源码下载地址

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

  1. public interface IReturnHandler
  2.     {

  3.         /// <summary>

  4.         /// 处理Returl_url回调请求

  5.         /// </summary>

  6.         /// <param name="properties">支付宝相关参数</param>

  7.         /// <param name="customs">自定义参数</param>

  8.         void Return(System.Collections.Specialized.NameValueCollection properties, IList<string> customs);

  9.         /// <summary>

  10.         /// 处理Notify_url回调请求

  11.         /// </summary>

  12.         /// <param name="properties">支付宝相关参数</param>

  13.         /// <param name="customs">自定义参数</param>

  14.         void Notify(System.Collections.Specialized.NameValueCollection properties, IList<string> customs);

  15.         /// <summary>

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

  17.         /// </summary>

  18.         /// <param name="properties">支付宝相关参数</param>

  19.         /// <param name="customs">自定义参数</param>

  20.         /// <param name="responsetext">结果内容</param>

  21.         void OnError(System.Collections.Specialized.NameValueCollection properties, IList<string> customs,string responsetext);

  22.         /// <summary>

  23.         /// 合作商ID

  24.         /// </summary>

  25.         string Partner

  26.         {

  27.             get;

  28.         }

  29.         /// <summary>

  30.         /// 加密Key

  31.         /// </summary>

  32.         string Key

  33.         {

  34.             get;

  35.         }

  36.       /// <summary>

  37.       /// 卖家邮件地址

  38.       /// </summary>

  39.         string Seller_Email

  40.         {

  41.             get;

  42.         }

  43.     }
    重新实现AliPay类
  44. /// <summary>
  45.     /// 支付宝虚拟货币支付

  46.     /// </summary>

  47.     public class AliPay

  48.     {

  49.         /// <summary>

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

  51.         /// </summary>

  52.         /// <param name="subject">商品名称</param>

  53.         /// <param name="body">商品描述</param>

  54.         /// <param name="total_fee">总金额</param>

  55.         public AliPay(string subject, string body, decimal total_fee

  56.             ,string returnurl)

  57.         {

  58.             Gateway = Untity.Service_Ulr;

  59.             Service = "create_direct_pay_by_user";

  60.             Sing_Type = Untity.Sing_Type;

  61.             Payment_Type = "1";

  62.      

  63.             Subject = subject;

  64.             Body = body;

  65.             Total_Fee = total_fee;

  66.             Return_Url = returnurl;

  67.             Notify_Url = returnurl;

  68.         }

  69.         public string Notify_Url

  70.         {

  71.             get;

  72.             set;

  73.         }

  74.         public string Buyer_Id

  75.         {

  76.             get;

  77.             set;

  78.         }

  79.        

  80.         public void Execute<T>(params string[] customparams) where T:IReturnHandler,new()

  81.         {

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

  83.             currentTime = System.DateTime.Now;

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

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

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

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

  88.             //返回支付Url;

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



  90.         }

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

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

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

    1. public class ReturnHandler:System.Web.IHttpHandler
    2.     {
    3.         #region IHttpHandler 成员
    4.         public bool IsReusable
    5.         {
    6.             get { return false; }
    7.         }
    8.         public String Get_Http(String a_strUrl, int timeout)
    9.         {
    10.             string strResult;
    11.             try
    12.             {
    13.                 HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(a_strUrl);
    14.                 myReq.Timeout = timeout;
    15.                 HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();
    16.                 Stream myStream = HttpWResp.GetResponseStream();
    17.                 StreamReader sr = new StreamReader(myStream, Encoding.Default);
    18.                 StringBuilder strBuilder = new StringBuilder();
    19.                 while (-1 != sr.Peek())
    20.                 {
    21.                     strBuilder.Append(sr.ReadLine());
    22.                 }
    23.                 strResult = strBuilder.ToString();
    24.             }
    25.             catch (Exception exp)
    26.             {
    27.                 strResult = "错误:" + exp.Message;
    28.             }
    29.             return strResult;
    30.         }
    31.         public void ProcessRequest(System.Web.HttpContext context)
    32.         {
    33.             string requesturl = context.Server.UrlDecode(context.Request.Path);
    34.             string alipayNotifyURL = Untity.Service_Ulr;
    35.             string urltype=System.IO.Path.GetFileName(requesturl).Substring(0, 1).ToLower();
    36.             MatchCollection matchs = Regex.Matches(requesturl, @"_([0-9a-zA-Z/%=]+)");
    37.             string TypeName = System.Text.Encoding.ASCII.GetString(Convert.FromBase64String(matchs[0].Groups[1].Value));
    38.             IReturnHandler handler = (IReturnHandler)Activator.CreateInstance(Type.GetType(TypeName));
    39.             IList<string> paramsdata = new List<string>();
    40.             for (int k = 1; k < matchs.Count; k++)
    41.             {
    42.                 paramsdata.Add(matchs[k].Groups[1].Value);
    43.             }
    44.             string partner = handler.Partner;
    45.             string key = handler.Key;
    46.             NameValueCollection payResultData;
    47.             if (urltype == "r")
    48.             {
    49.                 payResultData = context.Request.QueryString;
    50.                
    51.             }
    52.             else
    53.             {
    54.                 payResultData = context.Request.Form;
    55.             }
    56.             alipayNotifyURL = alipayNotifyURL + "service=notify_verify" + "&partner=" + partner + "¬ify_id=" + payResultData["notify_id"];
    57.             string responseTxt = Get_Http(alipayNotifyURL, 120000);
    58.             int i;
    59.             String[] requestarr = payResultData.AllKeys;
    60.             //进行排序;
    61.             string[] Sortedstr = Untity.BubbleSort(requestarr);
    62.             //构造待md5摘要字符串;
    63.             string prestr = "";
    64.             for (i = 0; i < Sortedstr.Length; i++)
    65.             {
    66.                 if (context.Request.Form[Sortedstr] != "" && Sortedstr != "sign" && Sortedstr != "sign_type")
    67.                 {
    68.                     if (i == Sortedstr.Length - 1)
    69.                     {
    70.                         prestr = prestr + Sortedstr + "=" + payResultData[Sortedstr];
    71.                     }
    72.                     else
    73.                     {
    74.                         prestr = prestr + Sortedstr + "=" + payResultData[Sortedstr] + "&";
    75.                     }
    76.                 }
    77.             }
    78.             prestr = prestr + key;
    79.             string mysign =Untity.GetMD5(prestr);
    80.             string sign = payResultData["sign"];
    81.           if (responseTxt == "true" && mysign == sign)  //验证支付发过来的消息,签名是否正确
    82.             {
    83.                 string status = payResultData["trade_status"];
    84.              
    85.                 if (status == "TRADE_FINISHED")// WAIT_SELLER_SEND_GOODS  判断支付状态(文档中有枚举表可以参考)           
    86.                 {
    87.                     //更新自己数据库的订单语句,请自己填写一下
    88.                     if (urltype == "r")
    89.                     {
    90.                         handler.Return(payResultData, paramsdata);
    91.                     }
    92.                     else
    93.                     {
    94.                         handler.Notify(payResultData, paramsdata);
    95.                     }
    96.                  
    97.                 }
    98.             }
    99.             else
    100.             {
    101.                 handler.OnError(payResultData, paramsdata, responseTxt);
    102.             }
    103.         }
    104.         #endregion
    105.     }
      到这里封装完成。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
支付宝接口即阿里巴巴集团旗下的支付平台——支付宝所提供的一个应用编程接口。ASP是一种常用的服务器端脚本语言,可用于实现网站开发中的交互功能。支付宝ASP接口源码是指使用ASP语言编写的与支付宝接口进行交互的源代码。 支付宝ASP接口源码主要包括以下内容: 1. 签名与验签的功能:支付宝接口需要对请求和返回的数据进行签名以确保数据的完整性和安全性,源码中会包含签名和验签的函数或类。 2. 请求参数的构建和解析:源码中会提供相应的函数或类,用于构建包含业务参数的请求数据,并能够解析支付宝返回的结果。 3. 支付宝接口的调用:源码会封装调用支付宝接口的方法,包括支付、退款、查询交易等功能的调用。 4. 异步通知的处理:支付宝支付成功或其他业务完成后,会将结果以异步通知的方式发送到商户网站,源码中会提供处理异步通知的函数或类。 5. 页面跳转的处理:支付宝支付过程中,用户可能需要跳转到支付宝的页面进行授权或支付操作,源码中会提供相应的跳转函数或类。 使用支付宝ASP接口源码,开发者可以根据自身需求进行二次开发,定制符合自己网站需求的支付集成方案。同时,源码中已经进行了安全性处理和逻辑封装,开发者只需要根据源码提供的接口和参数进行调用,就能够实现支付宝支付功能的快速集成。 总之,支付宝ASP接口源码为开发者提供了方便快捷的支付宝支付集成解决方案,使网站可以与支付宝进行交互,实现支付、退款等功能的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值