支付宝的接口调用很不方便,以下代码实现了虚拟交易和实物交易。
解决方案中有三个项目以及NDoc生成的文档,简单的序列图:CommonAliPay,封装的支付宝接口。
TestAli,asp.net的测试项目
TestCommonAliPay,Nunit的测试项目。
调用方法:
1、引入CommonAliPay.dll
2、实现支付宝服务接口的方法调用方式:
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);上面是通用的调用方式。
下面是只支持虚拟货物的方式:
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、实现支付宝通知接口方法的调用(支持虚拟和实物):
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范型。
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、从类型中获取排序后的参数
/**//// <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中产生参数
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('&');
}
}
分享到:
相关推荐
在本压缩包中,提供了多种编程语言实现的网银在线支付接口代码,包括.NET、Java和ASP。这些接口主要用于连接银行系统,完成支付授权、交易确认、订单状态更新等一系列流程。 1. **.NET接口**:.NET是一种广泛使用的...
支付宝在线支付接口是一种广泛应用于电子商务网站的技术,使得商家可以接受来自支付宝用户的支付。这个压缩包包含了一套完整的集成指南和多种编程语言的示例代码,旨在帮助开发者快速地将支付宝接口整合到自己的网站...
农行支付接口API是银行与商户系统之间进行支付交互的关键技术,主要服务于web应用和移动APP的支付场景。本文将详细解析农行支付接口API在ASP.NET、Java、PHP等不同编程语言中的实现,以及如何利用提供的demo进行支付...
在.NET开发环境中,集成在线支付接口是电子商务应用的关键部分,以确保用户能够便捷地完成交易。本资源包包含了关于PayPal、支付宝和财付通这三大主流在线支付平台的接口文档和示例代码,这对于.NET开发者来说是非常...
net03_gbk(aspx).rar 淘宝支付宝接口
通过这个.NET版的农业银行支付接口demo,开发者可以全面了解和掌握农行支付系统的集成过程,为实际的电商、零售或其他需要在线支付的业务提供可靠的技术支持。在实际开发中,还需要根据具体业务需求和银行的最新规则...
ASP.NET农行支付接口B2C是针对农业银行(农行)在线支付功能的一个开发框架,主要用于电商(B2C,Business to Consumer)场景。这个接口允许商家网站与农业银行的支付系统进行交互,实现商品购买、退款等一系列交易...
微信/支付宝 H5支付接口(C#版demo)
综上所述,“网银在线支付接口,支持asp/jsp/net2.0/php语言”的实现涉及了多方面的技术知识,包括Web开发、服务器端脚本、支付流程处理、以及B2C商业模式的理解。开发者需要具备这些技能,才能有效地设计和实现一个...
我们是正规合法注册的公司,是我们自己和支付宝签约后,为了方便更多的网友能便捷使用支付宝在线支付接口而开发的,并非赢利产品。付款是直接到达的您所设置的支付宝帐户的。 6、如果两种方式都设置,就要判断交易...
【标题】"net3.5网上支付接口(源代码)修正版" 提供的是一个基于ASP.NET 3.5框架的网上支付系统接口的源代码。这个修正版可能是在原有基础上进行了错误修复、功能优化或者安全性提升,以适应更广泛的支付场景需求。...
在IT行业中,支付接口是电子商务和在线服务的重要组成部分,它使得商家能够接受并处理来自客户的电子支付。"net易宝支付接口一点点资料"这个资源集合可能是关于如何在.NET环境中集成易宝支付接口的一些教程、文档...
1. **微信支付API**:微信支付为开发者提供了丰富的API接口,如统一下单、订单查询、退款申请等。这些API需要通过HTTPS请求发送到微信支付服务器,以进行支付相关的业务操作。 2. **C#编程语言**:C#是.NET框架的...
网银在线接口SDK 支持 php asp net2.0 jsp 本压缩包包含商户开通网银在线支付服务所需的文档资料,请仔细保存。按照以下步骤即可开通网上支付服务。 1.安装调试接口 如果您拥有自己的程序员团队 请将压缩包内...
支付宝API接口开发是在线支付和电子商务领域中的一个重要环节,它允许开发者通过编程方式与支付宝系统进行交互,实现各种支付功能。以下是对标题、描述及标签所包含知识点的详细解释: 1. **支付宝API**:支付宝...
支付宝接口在.NET 2.0环境下的应用是电商和在线支付系统开发中的重要环节,它为开发者提供了与支付宝平台交互的桥梁。这个接口程序是由支付宝官方提供的,确保了其安全性和可靠性,使得开发者能够集成到自己的在线...
这个压缩包文件包含了针对PHP、Java和.NET平台的工行B2C在线支付的代码示例和接口测试工具,帮助开发者快速理解和应用这些接口。 首先,我们来看PHP的相关内容。PHP是一种广泛使用的服务器端脚本语言,尤其在Web...
里面有 word配置说明 和【微信支付】微信公众号支付接口文档V3.3.7.pdf 。开发过程很多不懂。本身是小白,现在提供给小白一样的人,能顺利通过。在微信里打开 http://www.XXXX.com.cn/example/JsApiPayPage.aspx 。...
2.银行卡在线支付支持国内60 余种银行卡(信用卡、储蓄卡、借记卡等)在线支付。 3.全国声讯电话支付支持全国所有省份固定电话、小灵通、中国移动、中国联通手机, 开通移动、联通、电信、网通多个声讯热线号码。 4....
在IT行业中,集成支付接口是电子商务网站不可或缺的一部分,而支付宝作为中国最大的第三方支付平台,其API接口被广泛应用。本文将详细解析使用C#和ASP.NET实现支付宝接口代码的相关知识点。 首先,我们需要理解C#和...