Dotnet,OO,Design Patterns

导航

ICanPay,一个统一多个网关支付的工具(包含源代码)

因为前段时间需要使用网上支付来收款,为了简化各个网关的订单的产生跟网关通知的处理就做了这个ICanPay。目前可以支持财付通、中国网银、易宝、云网4家网上支付平台。

你可以通过对基类的实现以支持更多的网关,因为不少网关都需要签约后才能给开发文档,所以不方便测试,目前只能支持4家国内的支付网关。

有了ICanPay订单的生成跟网关通知的处理就简单多了,看一下例子吧。

生成订单:

 

// 设置付款数据
PaymentSetting<YeepayGateway> ps = new PaymentSetting<YeepayGateway>();
ps.PayGateway.Merchant.UserName 
= "10000432521";
ps.PayGateway.Merchant.Key 
= "8UPp0KE8sq73zVP370vko7C39403rtK1YwX40Td6irH216036H27Eb12792t";
ps.PayGateway.Merchant.NotifyUrl 
= "http://yousite.com/Notify.aspx";
ps.PayGateway.Order.OrderId 
= "1564515";
ps.PayGateway.Order.Amount 
= 0.01;

 
// 创建付款的Url
Response.Redirect(ps.PayGateway.BuildPaymentUrl());




接受网关通知:

 

// 商户的帐号跟密钥
Merchant yeepayMerchant = new Merchant();
yeepayMerchant.UserName 
= "10000432521";
yeepayMerchant.Key 
= "8UPp0KE8sq73zVP370vko7C39403rtK1YwX40Td6irH216036H27Eb12792t";

PaymentNotify paymentNotify 
= PayGatewayFactory.GetGatewayNotify();

// 没有收到可识别的网关通知
if (paymentNotify == null)
{
    
return;
}


// 使用相应网关的商户数据以验证通知数据是否正确
switch (paymentNotify.PayGateway.GatewayName)
{
       
case GatewayType.YeePay:
       paymentNotify.PayGateway.Merchant 
= yeepayMerchant;
       
break;
}


if (paymentNotify.HasNotify)
{
       
double amount = paymentNotify.PayGateway.Order.Amount;
       
string orderId = paymentNotify.PayGateway.Order.OrderId;

        
// 判断amount、orderId跟数据库订单记录是否符合,再处理付款。
}




项目网站:http://code.google.com/p/icanpay/
下载(包含源代码):http://icanpay.googlecode.com/files/ICanPay%200.1.zip
文档:http://code.google.com/p/icanpay/wiki/ICanPay

posted on 2008-06-16 13:12  HelloCode  阅读(3886)  评论(12)    收藏  举报