使用 C# REST 服务器 SDK 进行 PayPal 支付






4.83/5 (10投票s)
本文介绍 PayPal 支付选项,并提供如何使用 PayPal REST 服务器 API 进行支付的示例代码。
引言
PayPal 允许商家在其网站上添加支付功能,并允许用户在安全的环境中购买其产品。商家可以将 PayPal 集成到他们的网站中,让用户直接进入 PayPal 网站,使用 PayPal 登录支付,或者可以自定义他们的网站进行支付结账,并在后端使用 PayPal REST API 调用。
PayPal 提供不同的支付产品和解决方案。
- Braintree v.zero SDK
- 支付按钮
- 支付 REST API
- PayPal Here
- 快捷结账
- 购物车
- PayPal Pro / Payflow
- 网站支付 Pro
- 移动 SDK
分类
根据网站上的实施情况,PayPal 服务可以按以下方式分类。
- 快捷结账
- 支付按钮
- 直接支付
- 来自客户端的 REST API 调用
- REST API 服务器 SDK
- SOAP APIs
- v.zero SDK
- 移动 SDK 等。
REST API 服务器 SDK
PayPal 为 .NET 开发者提供了一个 SDK。使用 SDK,开发者可以通过使用适当的参数调用函数轻松完成支付。PayPal 允许使用 SDK 进行以下类型的操作。
使用 REST 服务器 SDK,我们可以执行以下与支付相关的操作。
- 账单协议
- 账单计划
- 身份
- 发票
- 支付体验
- 支付
- 付款
- 保险库
- 网络钩子
凭据
PayPal 提供密钥作为凭据使用。我们可以通过在 PayPal 开发帐户中创建一个 App 来获得这两个密钥。将这两个密钥保存在 Web.config 或其他地方,以便用于 API 请求调用。这两个密钥命名为:
- 客户端 ID
- 密钥
PayPal 环境
PayPal 提供两种类型的环境
- 沙盒或开发
- 实时或生产
如何设置开发环境?
设置开发环境的步骤如下:
- 在 paypal.com 上注册一个企业帐户。
- 接下来,使用 PayPal 凭据登录 PayPal 开发者网站 https://developer.paypal.com。
- 在开发环境中创建一个新的 App。它将提供密钥作为客户端 ID 和凭据的密钥。
- 如果单击“沙盒帐户”链接,它将显示为开发创建的测试帐户。一个用于商家,一个用于买家。使用这些帐户进行测试支付。
- 如果您打开买家详细信息,它将向您显示测试信用卡信息,该信息将在开发期间用于测试交易。
示例项目
示例项目分为客户端和服务器两部分。客户端使用 form.io 表单构建器框架、AngularJS 和 JQuery 开发。客户端项目内置了一个表单来获取信用卡信息和一个提交按钮,用于向服务器项目提交请求。
另一方面,服务器接收来自客户端的请求,并使用适当的卡信息和送货地址执行到 PayPal 服务器的支付 API 调用。如果支付成功完成,PayPal 会将一个对象返回给服务器,服务器再将其发送回客户端。
示例表单 UI 如下所示
存储在 web.config 文件中的密钥如下所示
<appSettings> <add key="mode" value="sandbox" /> <add key="connectionTimeout" value="360000" /> <add key="requestRetries" value="1" /> <add key="clientId" value="AcfYDG1vKiEYRfwUforCnWEub0w3QkRoErFkSOL3VRl4iEd_N-qrj76ydpnxdlxE3Ujxy0lbSpzLELSv" /> <add key="clientSecret" value="EBF7_ov-w-HFyatwGPAsL9vbNDECp3wG5sA_e1Rx-_rgSEmWwSOIW_jPj8dF_GNJx59JXFFHQUQXrrtE" /> </appSettings>
使用这两个密钥的服务器端代码为
public static class PayPalConfig { public readonly static string ClientId; public readonly static string ClientSecret; static PayPalConfig() { ClientId = ConfigurationManager.AppSettings["clientId"]; ClientSecret = ConfigurationManager.AppSettings["clientSecret"]; } /*More Code*/ }
PayPal SDK 提供了一个名为 BaseSamplePage 的抽象类。我们需要在自己的自定义类中继承此类。
抽象类示例代码
public abstract class BaseSamplePage { protected RequestFlow flow; public RequestFlow GetFlow() { this.RegisterSampleRequestFlow(); try { this.RunSample(); } catch (Exception ex) { this.flow.RecordException(ex); throw ex; } return flow; } protected abstract void RunSample(); protected void RegisterSampleRequestFlow() { if(this.flow == null) { this.flow = new RequestFlow(); } HttpContext.Current.Items["Flow"] = this.flow; } }
自定义类摘要代码
public class PayPalRequest : BaseSamplePage { private CardInput cardInput; public PayPalRequest(CardInput inputPar) { cardInput = inputPar; } protected override void RunSample() { //Payment realated code } }
ApiController 的代码
public class PayPalController : ApiController { public HttpResponseMessage Get(string cardData) { CardInput cartInput = JsonConvert.DeserializeObject<CardInput>(cardData); PayPalRequest payPalRequest = new PayPalRequest(cartInput); try { RequestFlow flow = payPalRequest.GetFlow(); return Request.CreateResponse(HttpStatusCode.OK, flow); } catch (Exception ex) { return Request.CreateResponse(HttpStatusCode.OK, "Fail"); } } }
客户端 Ajax 调用请求代码
$scope.$on('formSubmission', function (err, submission) { var cardInput = JSON.stringify(submission.data, null, " "); $.ajax({ type: "GET", url: "http://(server:port)/api/PayPal?cardData=" + cardInput, dataType: 'jsonp', jsonpCallback: 'apiStatus', success: function (msg) { alert("Payment Id: " + JSON.parse(msg.items[0].response).id); console.log( JSON.parse(msg.items[0].response)); }, error: function (request, status, error) { alert("error"); } }); });
交易返回的支付 ID 如下所示
沙盒
每次交易完成后,您都可以在您的沙盒帐户中看到存入的金额和交易日志。 使用商家用户名和密码登录到 url https://www.sandbox.paypal.com。
下图显示了一个示例沙盒帐户
结论
PayPal 提供了不同的方式和不同的功能来在您的网站上实施支付。 在这里,我展示了如何进行支付的功能。 同样,您可以进行付款、发票、账单和其他功能。