您正在构建电子商务网络应用程序,您需要支持几种付款方式(签证,万事达卡等),以便您的客户可以轻松支付订单。而不是自己实施此服务,而是决定依靠受信任的第三方提供商为您提供这些服务。
比利时提供付款服务的著名公司是Ogone。他们提供40多种国际和地方付款方式。他们处理您的客户,在线商店和付款方式提供商(例如Visa)之间的付款交易。
当然,您必须为Ogone处理的每笔交易支付一小笔款项,但这可以集成您整合欺诈保护,安全性,管理您的付款工具……等等。自己实施所有这些的成本要大得多。
因此,您可以注册Ogone帐户,并决定将其系统集成到您的Web应用程序中。
我们怎么能意识到这一点?让我们找出...
首先,请访问Ogone网站并注册免费测试帐户。在网站的右上角,您“将找到一个标有“创建免费测试帐户”的按钮。
图1-测试帐户

单击它并填写结果表格。确保您以此表格输入的数据正确。提交了新测试帐户的请求后,Ogone的员工将验证您的详细信息,并根据结果批准或拒绝您的请求。这个过程可能需要几个小时。非常烦人,但没有办法。
批准您的帐户后,您将收到一封包含密码的电子邮件。现在,您准备登录到Ogone Merchant Administment。
在开始使用测试帐户之前,您需要配置以下设置:
要配置订阅选项,单击屏幕左侧菜单中显示的选项帐户。
图2-商人管理菜单

在帐户页面上,您将提供一些选项,请选择“您的订阅”选项。现在,您需要选择订阅类型。选择“冒险”,然后单击标有“确认并转到您的选项”的按钮。
在这里,您可以在订阅中添加许多选项,例如欺诈检测,图像托管,发票外观...等。对于此演示,我们不需要任何其他选项,因此只需单击确认即可保存您的设置。
配置订阅类型后,可以通过添加要向客户提供的付款方式来继续操作。单击商户管理菜单中的选项付款方式(图2)。在“选定的付款方式”列表中添加签证后,您需要编辑此付款方式并将其设置为激活。
图3-激活签证付款方式

只需单击图3中显示的编辑选项,将付款方式标记为激活(激活:是),然后单击提交。您可以使用卡号4111 1111 1111 1111来测试签证付款。只需输入到期日期的任何内容和3位数字安全码即可。
最后但并非最不重要的一点是,您需要配置一些技术设置来确定如何处理在线付款。继续单击菜单中显示的选项技术信息(图2)。
结果页面分为以下选项卡:
只需单击这些链接即可查看屏幕截图我如何配置Ogone测试帐户。我将SHA-1-IN和SHA-1-OUT签名设置为“ MicrosoftaspNet4”。我们稍后再回到这一点。
您现在创建并配置了Ogone测试帐户。您准备进行第一次在线付款。
我创建了一个简单的ASP.NET Web应用程序项目,该项目演示了如何将Ogone付款集成在您自己的ASP.NET网站中。
图4-解决方案

此Web应用程序仅包含少数页面:
备注:如您所见,该项目还包含几个代码文件。我们将在以下各节中讨论这些。这些文件包含使用Ogone处理付款过程的必要代码。随意改进设计,我只包括了最少的代码来使事情正常工作。
不要单击下面显示的“开始付款”按钮,只是屏幕截图。这就是default.aspx页面的样子:
图5 -default.aspx页面

生成一个参考(或订单ID)以唯一确定所支付的订单。 Ogone跟踪这些参考。您不能两次处理相同的参考。因此,这就是为什么我选择在此示例中使用随机生成的GUID的原因。我不得不将GUID缩短为30个字符,因为Ogone允许的限制不超过此限制。
显然,除此参考外,您还需要指定必须支付的金额。示例代码还沿相关客户的电子邮件地址发送。这样,Ogone可以将其付款已成功处理。
让我们查看按钮点击事件后面隐藏的代码:
清单1-请求Ogone付款
// Persist order to database
// ...
OgoneRequest ogoneRequest = new OgoneRequest ( ) ;
ogoneRequest . RequestPayment ( this . _reference , amount , customerEmail ) ;
// Clear shopping cart
// ...您可以通过创建OgonereQuest类的新实例来开始付款,并调用requestPayment(...)方法。此方法需要3个参数,即订单参考,需要支付的金额以及客户的电子邮件地址。
清单2 -OgonereQuest构造函数
public OgoneRequest ( )
{
OgoneUrl = ConfigurationManager . AppSettings [ "Ogone_Url" ] ;
Psid = ConfigurationManager . AppSettings [ "Ogone_PSID" ] ;
ShaKey = ConfigurationManager . AppSettings [ "Ogone_SHA1_IN" ] ;
Currency = ConfigurationManager . AppSettings [ "Ogone_Currency" ] ;
Language = ConfigurationManager . AppSettings [ "Ogone_Language" ] ;
AcceptUrl = ConfigurationManager . AppSettings [ "Ogone_AcceptUrl" ] ;
ExceptionUrl = ConfigurationManager . AppSettings [ "Ogone_ExceptionUrl" ] ;
CancellationUrl = ConfigurationManager . AppSettings [ "Ogone_CancellationUrl" ] ;
}Ogonerequest类的构造函数通过从应用程序的配置文件(web.config)中读取某些值来初始化一些属性。您需要指定呼叫付款过程的URL,您的Ogone PSID(用户名),您在商家管理上指定的SHA1-IN密钥,重定向URL ...等。
清单3-请求付款(...)方法
public void RequestPayment ( string reference , double amount , string email )
{
// Multiply by one hundred and round to zero decimals
amount = Math . Round ( amount * 100 , 0 ) ;
RemotePost post = new RemotePost { Url = this . OgoneUrl } ;
post . Add ( "pspid" , this . Psid ) ;
post . Add ( "orderid" , reference ) ;
post . Add ( "amount" , amount . ToString ( ) ) ;
post . Add ( "currency" , this . Currency ) ;
post . Add ( "language" , this . Language ) ;
post . Add ( "email" , email ) ;
// Hash
post . Add ( "SHASign" , Ogone . GenerateHash (
reference + amount + this . Currency +
this . Psid + this . ShaKey ) ) ;
// Redirection URLs
post . Add ( "accepturl" , this . AcceptUrl ) ;
post . Add ( "exceptionurl" , this . ExceptionUrl ) ;
post . Add ( "cancelurl" , this . CancellationUrl ) ;
post . Post ( ) ;
}RequestPayment(...)方法通过使用Remotepost类进行HTTP帖子来启动新的付款过程。所有必要的信息都包含在帖子中,例如您的PSID,需要支付的金额,语言,SHA1标志...等。
您需要使用您在商家管理中配置的SHA1-IN签名来计算SHA1 HASH。 Ogone指出,您还需要在此哈希中包括参考,金额,货币和您的PSID。稍后我们将回到计算SHA1哈希。
备注:HTTP帖子发送了一些重定向URL,Ogone在付款时将使用这些网址,取消...等。如果您不提供这些,则将使用商户管理中配置的默认URL(技术信息下的事务反馈选项卡)。
图6-付款确认

启动付款过程后,您将被重定向到上图中所示的新页面。您可以通过在HTTP帖子中指定其他参数来更改此页面的布局。请查看本文随附的源代码和官方Ogone文档,以获取有关该主题的更多信息。
如果用户单击“取消”按钮,则付款过程将结束,他将被重定向到paymentcancelled.aspx页面。此页面只显示了用户取消付款过程的消息。
但是,我们已经配置了我们的Ogone帐户,以使有关付款过程的所有相关信息都包含在查询字符串中。例如:
http:// localhost:3767/paymentcancelled.aspx?orderID = 246cf6f0-8bad-4edb-806c-806c-eed3fb&Currency = eur&金额= 19.99&pm = pm = CreditCard&ccreitalcard&Accessance&Acceptance&Accessance =&状态=&状态= 1 &cardno =&ed =&cn =&trxdate = 04%2F08%2f10&payid = 6806803&ncerror =&brand = ...等。
您可以提取信息,例如原始订单参考,金额,付款方式(例如:签证),付款成功状态...等。如果需要,您可以记录或丢弃此信息。取决于你。 Ogone还包括一个sha1 hash,该哈希在商人管理中配置的SHA1-out标志的帮助下。此哈希使您可以验证查询字符串中提出请求的人的身份和数据的有效性。
如果付款过程成功完成,则Ogone将将用户重定向到paymentAccepped.aspx页面。查询字符串还将包括相同的数据。在页面加载事件期间,检查了付款状态和SHA哈希的有效性。如果两者都正确,则接受付款。
列表4-付款accepted.aspx页面加载事件处理程序
OgonePaymentStatus status = OgoneResponse . Status ;
// Invalid Sha key returned from Ogone?
bool paymentSucceeded = OgoneResponse . IsShaSignValid && Ogone . IsPaymentStatusValid ( status ) ;备注:Ogone在查询字符串中包括一个称为状态(Integer)的参数。此状态告诉您付款的状态。本文的示例代码将其中一些值包裹在称为ogonepaymentstatus的枚举中。查看Ogone官方文档以获取所有可能值的列表。 ISPAYMENTSTATUSVALID(...)方法验证输入状态参数是否是告知我们付款的值之一。
Ogoneresponse类类型只是一个小包装器,可以处理Ogone将用户重定向回到网站时所包含的查询字符串参数。
列表5显示了您从该课程中的小摘录。 IsshasignValid属性从应用程序的配置文件(web.config)读取SHA1输出签名,并重新计算SHA符号。为此,您必须包括其他数据,例如金额,订单参考,货币...等。 (请咨询官方的Ogone文档以获取更多信息)。
如果计算出的SHA符号匹配查询字符串中包含的符号,那么我们正在处理源自Ogone的请求,并且查询字符串参数中的数据有效。
清单5- ogoneresponse类
public static class OgoneResponse
{
public static string OrderId { get { return HttpContext . Current . Request [ "orderid" ] ; } }
public static string Amount { get { return HttpContext . Current . Request [ "amount" ] ; } }
public static string ShaSign { get { return HttpContext . Current . Request [ "shasign" ] ; } }
public static bool IsShaSignValid
{
get
{
string key = OrderId + Currency + Amount + PaymentMethod + AcceptanceCode +
( int ) Status + CardNumber + PaymentId + NcError + Brand +
ConfigurationManager . AppSettings [ "Ogone_SHA1_OUT" ] ;
return ShaSign == Ogone . GenerateHash ( key ) ;
}
}
} 清单6显示了一种可能的方式,如何计算字符串的sha1哈希。字符串被转换为字节数组,然后使用SHA1CryptoServiceProvider编码。然后将结果的哈希转换为十六进制格式。
清单6-计算SHA1哈希
public static string GenerateHash ( string input )
{
byte [ ] bytes = new ASCIIEncoding ( ) . GetBytes ( input ) ;
SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider ( ) ;
byte [ ] hash = sha . ComputeHash ( bytes ) ;
StringBuilder result = new StringBuilder ( ) ;
for ( int i = 0 ; i < 20 ; i ++ )
{
string temp = hash [ i ] . ToString ( "X2" ) ;
if ( temp . Length == 1 )
{
temp = "0" + temp ;
}
result . Append ( temp ) ;
}
return result . ToString ( ) ;
}因此,文章结束了...
希望您喜欢如何将Ogone支付服务与电子商务网络应用程序集成在一起的教程。从开发人员的角度回顾一下我们所涵盖的内容: