在 ASP.NET 中使用PayPal清算程序,在线信用卡交易

分享于 

15分钟阅读

Web开发

  繁體

介绍

使用 ASP.NET Payflow Pro进行在线信用卡交易,你需要在 PayPal.com, 下载和安装过程中设置一个Payflow专业支付网关帐户。 NET SKD,并创建一个 ASP.NET 应用程序来发送事务请求,并接收来自前端事务的事务响应。

Payflow网上支付网关帐户

在撰写本文时,帐户创建链接是: 美国的文档表示可以创建测试帐户,如果需要,可以将它的激活为生产帐户。 帐户设置完成后,你将有四个用户参数作为登录凭证访问帐户,如下表所示。

PayPal_PayflowPro/UserLogin.jpg

使用这些凭证,你可以登录到 https://manager.paypal.com 管理帐户设置,查看/管理事务,以及生成报表,在 ASP.NET 应用程序中也需要生成这些用户参数。

面向Payflow的. NET SDK

PayPal下载页面是 https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/library_download_sdks&fli=true#PayflowPro。 向下滚动到页面底部,你将看到. NET SDK的下载链接,用于 2009年01月的in v4.31. 现在,这是目前可用的最新版本。

下载并将软件包安装到你的本地开发机器。 默认情况下,它安装在 C:Program FilesPayflow SDK。 网网。 浏览到该文件夹,你将看到两个 dll: Payflow_dotNET_1.1.dll 和 Payflow_dotNET_2.0.dll,就像他们的名字暗示的那样,。 NET框架 1.1和 2.0. 选择你需要的版本并将它的重命名为 Payfow_dotNET.dll 在 Visual Studio 中添加对你的web应用程序的引用之前。 可以看到,SDK还没有更新到当前的.NET 框架 4. 但是,使用 Visual Studio 2010在. NET 框架 4中编写的应用程序工作正常。

联机事务的工作方式

你可以将你的申请发送给你的应用程序,并向你的应用程序发送一个收费的事务响应,以通知你事务状态。 在请求和响应周期中,信用卡事务已经完成,并将资金移入你的银行帐户。

主机名

主机名是Payflow服务器的一个 URL。 Payflow Pro提供了一个测试,另一个用于生产。

  • 用于测试:pilot-payflowpro.paypal.com
  • 用于生产:payflowpro.paypal.com

请注意,测试交易和生产交易都通过相同的Payflow客户帐户。 当你登录到 https://manager.paypal.com 插件时,你可以搜索。查看和管理。

事务处理请求

交易请求由一串与"&"连接的名称值对组成,其中包含事务的所有支付信息。事务类型。信用卡信息。用户参数( 凭证)。等等 帐户的用户参数。以及某些可选的参数。 下面是一个事务请求字符串的示例:

TRXTYPE=S&TENDER=C&ACCT=5105105105105100&EXPDATE=1209&CVV2=123&AMT=99.00
&FIRSTNAME=John&LASTNAME=Smith&STREET=123 Main St.&CITY=SanHose
&STATE=CA&ZIP=12345&COMMENT1=Reservation&USER=MyUser&PWD=MyPassword
&VENDOR=MyVendor&PARTNER=MyPartner

在这里,TRXTYPE=S 表示它是一种销售事务类型,TENDER=C 表示用信用卡作为付款方法。 下面的表列出了在事务请求中使用的公用参数及其描述。

PayPal_PayflowPro/Request_1.jpg
PayPal_PayflowPro/Request_2.jpg

如果参数被标记为必需,则必须包含在事务请求中,才能被by服务器接受。

事务响应

同样,应用程序从 Payflow Pro接收的事务响应也是名称值对的一个 string。 它提供事务结果,包括状态。事务编号。授权代码或者错误。 下面显示的string 是一个示例。

RESULT=0&PNREF=EFHP0D426A53&RESPMSG=APPROVED&AUTHCODE=25TEST&
AVSADDR=Y&AVSZIP=N&CVV2MATCH=Y

RESULT=0 表示事务已经被批准。 大于 0的任何值都表示出现了下降或者错误。 RESPMSG ( 响应消息) 简要描述了批准事务。拒绝事务或者对应于结果代码的错误。 下面的表格显示了Payflow专家响应中的典型参数。

PayPal_PayflowPro/Response.jpg

ASP.NET 应用程序

现在让我们看看如何在 ASP.NET 应用程序中使用. NET SDK实现上面讨论的事务流程。 已经为下载准备了一个演示应用程序。 它用 Visual Studio 编码,使用 Payflow_dotNET.dll,用于框架 2.0.

这个应用程序只有一个 ASP.NET 页面收集付款量和信用卡信息,构造一个事务请求字符串,发送请求到 Payflow Pro,然后在页面上显示数据。

PayPal_PayflowPro/Submit.jpg

上面的屏幕截图展示了收集所需数据的网页界面。 单击提交按钮后,将构造事务请求字符串并发送到 Payflow Pro主机,然后从主机接收响应字符串。 屏幕快照显示了请求的名称值对和响应。

PayPal_PayflowPro/PayPal_data.jpg

运行这里应用程序时,可能没有看到成功的事务,但出现了失败的状态。 这是因为在事务请求中使用了无效的用户参数( USERVENDORPARTNERPWD )。 你需要更新存储在 web.config的<appSettings> 部分中的用户参数,使用与你的Payflow客户帐户相关的有效值。

在应用程序中,附带的Payflow_dotNET_2.0.dll。 NET SDK的安装被重命名为 Payflow_dotNET.dll,然后作为参考添加到 Visual Studio 项目。

让我们看一下代码清单:

using System;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Collections.Specialized;using System.Configuration;using PayPal.Payments.Common.Utility;using PayPal.Payments.Communication;using PayPal.Payments.DataObjects;publicpartialclass _Default : System.Web.UI.Page
{
 protectedvoid Page_Load(object sender, EventArgs e)
 {
 if (Page.IsPostBack)
 {
 return;
 }
 //populate month string[] Month = new string[] 
 { "", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12" };
 ddlMonth.DataSource = Month;
 ddlMonth.DataBind();
 //pre-select one for testing ddlMonth.SelectedIndex = 4;
 //populate year ddlYear.Items.Add("");
 int Year = DateTime.Now.Year;
 for (int i = 0; i <10; i++)
 {
 ddlYear.Items.Add((Year + i).ToString());
 }
 //pre-select one for testing ddlYear.SelectedIndex = 3;
 }
 protectedvoid btnSubmit_Click(object sender, EventArgs e)
 {
 try {
 string PayPalRequest = "TRXTYPE=S"//S - sale transaction + "&TENDER=C"//C - Credit card + "&ACCT=" + txtCardNumber.Text //card number + "&EXPDATE=" + ddlMonth.SelectedValue + 
 ddlYear.SelectedValue.Substring(2, 2)
 + "&CVV2=" + txtCvv.Text //card validation value (card security code) + "&AMT=" + txtAmount.Text
 + "&COMMENT1=My Product Sale" + "&USER=" + ConfigurationManager.AppSettings["USER"]
 + "&VENDOR=" + ConfigurationManager.AppSettings["VENDOR"]
 + "&PARTNER=" + ConfigurationManager.AppSettings["PARTNER"]
 + "&PWD=" + ConfigurationManager.AppSettings["PWD"];
 // Create an instance of PayflowNETAPI. PayflowNETAPI PayflowNETAPI = new PayflowNETAPI();
 // RequestId is a unique string that is required for each & every transaction. // The merchant can use her/his own algorithm to generate // this unique request id or use the SDK provided API to generate this// as shown below (PayflowUtility.RequestId).string PayPalResponse = PayflowNETAPI.SubmitTransaction
 (PayPalRequest, PayflowUtility.RequestId);
 //place data from PayPal into a namevaluecollection NameValueCollection RequestCollection = 
 GetPayPalCollection(PayflowNETAPI.TransactionRequest);
 NameValueCollection ResponseCollection = GetPayPalCollection(PayPalResponse);
 //show request lblResult.Text = "<span class="heading">
 PayPal Payflow Pro transaction request</span><br/>";
 lblResult.Text += ShowPayPalInfo(RequestCollection);
 //show response lblResult.Text += "<br/><br/><span class="heading">
 PayPal Payflow Pro transaction response</span><br/>";
 lblResult.Text += ShowPayPalInfo(ResponseCollection);
 //show transaction errors if anystring TransErrors = PayflowNETAPI.TransactionContext.ToString();
 if (TransErrors!= null && TransErrors.Length >0)
 {
 lblResult.Text += "<br/><br/><span class="bold-text">
 Transaction Errors:</span>" + TransErrors;
 }
 //show transaction status lblResult.Text += "<br/><br/><span class="bold-text">
 Status:</span>" + PayflowUtility.GetStatus(PayPalResponse);
 }
 catch (Exception ex)
 {
 lblError.Text = ex.Message.ToString();
 }
 }
 private NameValueCollection GetPayPalCollection(string payPalInfo)
 {
 //place the responses into collection NameValueCollection PayPalCollection = 
 new System.Collections.Specialized.NameValueCollection();
 string[] ArrayReponses = payPalInfo.Split('&');
 for (int i = 0; i < ArrayReponses.Length; i++)
 {
 string[] Temp = ArrayReponses[i].Split('=');
 PayPalCollection.Add(Temp[0], Temp[1]);
 }
 return PayPalCollection;
 }
 privatestring ShowPayPalInfo(NameValueCollection collection)
 {
 string PayPalInfo = "";
 foreach (string key in collection.AllKeys)
 {
 PayPalInfo += "<br/><span class="bold-text">" + 
 key + ":</span>" + collection[key];
 }
 return PayPalInfo;
 }
}

为了使用. NET SDK,需要三个" using Directives": PayPal.Payments.Common.UtilityPayPal.Payments.CommunicationPayPal.Payments.DataObjects

事务相关的代码显示在 btnSubmit_Click 事件处理程序中。

首先,将名称值对的string 连接并分配给变量 PayPalRequest。 这里 string 包括事务类型( TRXTYPE=S: sale ),付款方式( TENDER=C: credit card ),信用卡号,过期日期,用户参数( 凭证),等等 更多。

然后,创建 PayflowNETAPI 实例,以便将它的属性和方法公开给我们的应用程序。

第三,调用 PayflowNETAPI.SubmitTransaction() 方法执行事务。 这里方法需要两个参数,以前构建的事务请求 stringPayflowUtility 对象生成的唯一by的RequestId。 方法的返回类型是 string ( 存储在变量 PayPalResponse 中),它是 Payflow Pro的响应,由事务结果的名称值对组成。 这就是交易周期。 其余代码显示页面上的事务数据,根据实际业务应用程序中的需求,可以对它的进行不同的处理。

你可能已经注意到,在代码示例中,Payflow Pro主机名在任何地方都没有。 这是因为主机名被放置在 web.config 文件的<appSettings> 部分。 SDK知道在方法调用过程中直接检索它的位置。 下面的清单显示了SDK提供的标准设置。 一些相关的跟踪和记录任务,SDK也有。 这些没有在演示中打开。

<appSettings><!-- Payflow Pro Host Name. This is the host name for the PayPal Payment Gateway.
 For testing: pilot-payflowpro.paypal.com.
 For production: payflowpro.paypal.com
 --><addkey="PAYFLOW_HOST"value="pilot-payflowpro.paypal.com"/><!-- TRACE value when set to ON will show the
 complete exception stack trace in the response message, if any.
 Change TRACE value to"ON" to switch on the stack trace in response message.--><addkey="TRACE"value="OFF"/><!-- This is a LOG level tag.To switch on logging change the
 logger level from"OFF" to any of the following:
 a. DEBUG
 b. INFO
 c. WARN
 d. ERROR
 e. FATAL
 --><addkey="LOG_LEVEL"value="OFF"/><!-- Relative path for LOG file. --><addkey="LOG_FILE"value="logsPayflowSDK.log"/><!-- Log file filesize constant. --><addkey="LOGFILE_SIZE"value="102300"/></appSettings>

摘要

本文采用一个销售信用卡事务示例演示如何使用. NET SDK作为 ASP.NET的in。 还有其他类型的事务,比如授权。Void。延迟捕获。等等,都可以使用SDK完成。 无论涉及什么事务类型,它都是向,主机发送事务请求和接收主机的事务响应的类似过程。

引用


相关文章