`
chengyue2007
  • 浏览: 1482140 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

支付宝接口源代码

    博客分类:
  • java
阅读更多

转载不知道是否正确的代码:

支付宝的接口调用很不方便,刚做好一个封装,实现了虚拟交易和实物交易。
解决方案中有三个项目以及NDoc生成的文档,简单的序列图:CommonAliPay,封装的支付宝接口。

TestAli,asp.net的测试项目
TestCommonAliPay,Nunit的测试项目。
源代码下载地址:http://files.cnblogs.com/bluewater/CommonAliPay.rar

调用方法:

1、引入CommonAliPay.dll
2、实现支付宝服务接口的方法调用方式:

复制C#代码保存代码


AliPay ap = new AliPay();
string key = "";//填写自己的key
string partner = "";//填写自己的Partner
StandardGoods bp = new StandardGoods("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);


上面是通用的调用方式。
下面是只支持虚拟货物的方式:

复制C#代码保存代码


string key = "";//填写自己的key
string partner = "";//填写自己的Partner
AliPay ap = new AliPay();
DigitalGoods bp = new DigitalGoods("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、实现支付宝通知接口方法的调用(支持虚拟和实物):

复制C#代码保存代码


protected void Page_Load(object sender, EventArgs e)
{
string key = "";//填写自己的key
string partner = "";//填写自己的Partner
AliPay ap = new AliPay();
string notifyid = Request.Form["notify_id"];
Verify v = new Verify("notify_verify", partner, notifyid);
ap.WaitSellerSendGoods += new AliPay.ProcessNotifyEventHandler(ap_WaitSellerSendGoods);
ap.WaitBuyerPay += new AliPay.ProcessNotifyEventHandler(ap_WaitBuyerPay);
ap.ProcessNotify(this, "https://www.alipay.com/cooperate/gateway.do", key, v, "utf-8");
}

void ap_WaitBuyerPay(object sender, NotifyEventArgs e)
{
// //加入自己的处理逻辑
Log4net.log.Error("wait buyer pay fire");
}

private void ap_WaitSellerSendGoods(object sender, NotifyEventArgs e)
{
//加入自己的处理逻辑
Log4net.log.Error("WaitSellerSendGoods fire");
}


支付宝的交易状态都被定义成了类似名称的事件。

部分源代码解析:

1、解析Forms集合到NotifyEventArgs类,因为后面此类的数据要用来做MD5Sign,所以所有值类型,不能存在初始值,如:int的0等。因此用Nullable范型。

复制C#代码保存代码


private NotifyEventArgs ParseNotify(NameValueCollection nv, object obj)
{
PropertyInfo[] propertyInfos = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

foreach (PropertyInfo pi in propertyInfos)
{
       string v = nv.Get(pi.Name.ToLower());
       if (v != null)
       {
         if (pi.PropertyType == typeof(string))
         {
            pi.SetValue(obj, v, null);
         }
         else if (pi.PropertyType == typeof(int?))
         {
            pi.SetValue(obj, int.Parse(v), null);
         }
         else if (pi.PropertyType == typeof(decimal?))
         {
            pi.SetValue(obj, decimal.Parse(v), null);
         }
         else if (pi.PropertyType == typeof(DateTime?))
         {
            pi.SetValue(obj, DateTime.Parse(v), null);
         }
         else if (pi.PropertyType == typeof(bool))
         {
            pi.SetValue(obj, bool.Parse(v), null);
         }
         else
         {
            //转型失败会抛出异常
            pi.SetValue(obj, v, null);
         }
       }

}
return (NotifyEventArgs) obj;
}


2、从类型中获取排序后的参数

复制C#代码保存代码


/// <summary>
/// 获取排序后的参数
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
private SortedList<string, string> GetParam(object obj)
{
PropertyInfo[] propertyInfos = obj.GetType().GetProperties(
       BindingFlags.Public | BindingFlags.Instance);

SortedList<string, string> sortedList
       = new SortedList<string, string>(StringComparer.CurrentCultureIgnoreCase);

foreach (PropertyInfo pi in propertyInfos)
{

       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());

       }
}
return sortedList;
}


3、从SortedList中产生参数

复制C#代码保存代码


private string GetUrlParam(SortedList<string, string> sortedList, bool isEncode)
{
StringBuilder param = new StringBuilder();
StringBuilder encodeParam = new StringBuilder();
if (isEncode == false)
{
       foreach (KeyValuePair<string, string> kvp in sortedList)
       {
         string t = string.Format("{0}={1}", kvp.Key, kvp.Value);
         param.Append(t + "&");
       }
       return param.ToString().TrimEnd('&');
}
else
{
       foreach (KeyValuePair<string, string> kvp in sortedList)
       {
         string et = string.Format("{0}={1}",
            HttpUtility.UrlEncode(kvp.Key), HttpUtility.UrlEncode(kvp.Value));
         encodeParam.Append(et + "&");
       }
       return encodeParam.ToString().TrimEnd('&');
}
}

分享到:
评论

相关推荐

    支付宝接口支付宝接口源代码

    这些源代码通常包括客户端SDK(如Android或iOS)和服务器端接口调用的示例,帮助开发者快速构建与支付宝系统的交互。在开发过程中,理解和使用这些接口是至关重要的,因为它们直接关系到应用的支付流程、用户账户...

    .net(c#)支付宝接口源代码(亲测可用)

    .NET(C#)支付宝接口源代码是开发者在进行电商或者支付相关系统开发时,与支付宝进行交互的重要工具。本文将深入探讨这个主题,介绍如何利用C#语言和.NET框架实现支付宝接口,以及相关的关键技术和注意事项。 首先,...

    实现支付宝接口源代码

    根据支付宝给与的接口,做了修改,实现支付宝接口

    支付宝接口,在线支付,源代码,详细说明

    支付宝接口php版,支付宝接口asp.net版,支付宝接口c#版,支付宝接口asp版;php即时到帐,即时到帐接口源代码. 包含支付宝接口源码一个完整的例子源码,里面有详细注释和详细的说明文件,一看就会.

    支付宝接口开发源代码可直接运行测试效果

    本资源提供了一套可以直接运行的支付宝接口开发源代码,名为"alipaydemo",这对于开发者来说是一份非常有价值的参考资料。 在支付宝接口开发中,主要涉及以下几个关键知识点: 1. **SDK的使用**:支付宝提供了官方...

    支付宝批量退款源代码集合

    支付宝接口源代码(应该是目前最好的了) 支付宝的接口调用很不方便,刚做好一个封装,实现了虚拟交易和实物交易。

    支付宝源代码以及文档

    6. **API设计与接口调用**:开发者通过支付宝开放平台的API进行应用集成,源代码能展示如何设计和实现这些接口,以及如何处理请求和响应。 7. **文档解读**:相关文档通常会详细介绍支付宝的各项服务、开发指南、...

    支付宝接口.各种版本,扫码支付.

    综上所述,这个压缩包中的支付宝接口源代码为开发者提供了实现支付宝支付功能的基础,包括了安全验证机制和不同交易类型的处理,对于需要集成支付宝支付的项目具有很高的参考价值。开发者可以根据自己的需求选择适合...

    支付宝源代码

    总结来说,支付宝源代码是支付宝平台的核心,涉及到实物商品交易服务、支付接口集成等多个重要领域。通过学习和研究这些源代码及相关的技术文档,开发者和商家可以深入了解支付宝的运作机制,提升自身的服务质量,...

    支付宝接口源码

    支付宝接口源代码,可直接使用,本人亲测无毒,给大家方便 注意 1、必须申请支付支付功能 2、支付宝手机支付暂时只支持utf-8编码

    支付宝java项目源代码

    支付宝Java项目源代码是用于开发和理解支付宝API接口集成的参考实现。这个项目通常包含了完整的后端服务代码,用于处理支付、退款、查询订单状态等与支付宝相关的业务逻辑。通过研究这些源代码,开发者可以更好地...

    C# 支付宝接口代码

    至于"pay"这个压缩包文件,它很可能包含了实现上述步骤的源代码文件,如.cs文件,其中可能有支付接口的调用类,以及配置文件(如app.config或web.config)来存放敏感的API密钥等信息。为了安全起见,这些敏感信息...

    ASP实例开发源码—支付宝接口程序代码.zip

    这个"ASP实例开发源码—支付宝接口程序代码.zip"的压缩包包含了一个使用ASP技术实现的支付宝接口程序的源代码。支付宝是中国领先的第三方支付平台,提供了广泛的服务,包括在线支付、移动支付和商户服务等。 1. **...

    thinkphp5+bootstrap整合支付宝和微信支付接口源代码

    最近项目里用到支付类的封装遇到各种坑,于是自己整理了thinkphp5+bootstrap整合了微信支付和支付宝支付接口类完美实现扫码付款demo(带数据库后台设置支付参数即可完成)。绝对能够实现支付宝和微信支付,支付宝...

    微信支付与支付宝支付接口源码

    本资源包含微信支付和支付宝支付的接口源码,这两大支付平台在中国占据主导地位,广泛应用于各种线上线下场景。理解并掌握这两种支付接口的实现原理对于开发者来说极其重要。 微信支付是由腾讯公司提供的在线支付...

    购物网站源代码 购物网站源代码

    5. 支付集成:与第三方支付平台如支付宝、微信支付或PayPal进行接口对接,实现安全支付。 6. 物流跟踪:整合物流公司API,为用户提供实时的物流信息。 7. 客户服务:包括在线聊天、帮助中心、FAQs等,以便解答用户...

    微信或者支付宝打赏功能源代码

    - `alipay`:支付宝支付相关的类或模块,负责调用支付宝接口并处理响应。 - `ui`:界面组件,展示打赏按钮和支付成功/失败的提示。 - `utils`:辅助函数,如签名生成、参数处理等。 4. **支付流程**: - 用户...

    2013百度红包VB源代码,源代码!

    在技术层面上,实现红包功能通常涉及数据库操作(存储红包信息、用户余额等)、随机算法(确定红包金额分配)、支付接口集成(如支付宝、微信支付)以及用户界面设计等。 在压缩包内的文件名称列表中只有一个文件:...

Global site tag (gtag.js) - Google Analytics