65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.83/5 (10投票s)

2017年1月17日

CPOL

3分钟阅读

viewsIcon

50791

downloadIcon

3386

本文介绍 PayPal 支付选项,并提供如何使用 PayPal REST 服务器 API 进行支付的示例代码。

引言

PayPal 允许商家在其网站上添加支付功能,并允许用户在安全的环境中购买其产品。商家可以将 PayPal 集成到他们的网站中,让用户直接进入 PayPal 网站,使用 PayPal 登录支付,或者可以自定义他们的网站进行支付结账,并在后端使用 PayPal REST API 调用。

PayPal 提供不同的支付产品和解决方案。

  1. Braintree v.zero SDK
  2. 支付按钮
  3. 支付 REST API
  4. PayPal Here
  5. 快捷结账
  6. 购物车
  7. PayPal Pro / Payflow
  8. 网站支付 Pro
  9. 移动 SDK

分类

根据网站上的实施情况,PayPal 服务可以按以下方式分类。

  1. 快捷结账
    • 支付按钮
  2. 直接支付
    • 来自客户端的 REST API 调用
    • REST API 服务器 SDK
    • SOAP APIs
    • v.zero SDK
    • 移动 SDK 等。

REST API 服务器 SDK

PayPal 为 .NET 开发者提供了一个 SDK。使用 SDK,开发者可以通过使用适当的参数调用函数轻松完成支付。PayPal 允许使用 SDK 进行以下类型的操作。

使用 REST 服务器 SDK,我们可以执行以下与支付相关的操作。

  1. 账单协议
  2. 账单计划
  3. 身份
  4. 发票
  5. 支付体验
  6. 支付
  7. 付款
  8. 保险库
  9. 网络钩子

凭据

PayPal 提供密钥作为凭据使用。我们可以通过在 PayPal 开发帐户中创建一个 App 来获得这两个密钥。将这两个密钥保存在 Web.config 或其他地方,以便用于 API 请求调用。这两个密钥命名为:

  1. 客户端 ID
  2. 密钥

PayPal 环境

PayPal 提供两种类型的环境

  1. 沙盒或开发
  2. 实时或生产

如何设置开发环境?

设置开发环境的步骤如下:

  1. 在 paypal.com 上注册一个企业帐户。
  2. 接下来,使用 PayPal 凭据登录 PayPal 开发者网站 https://developer.paypal.com
  3. 在开发环境中创建一个新的 App。它将提供密钥作为客户端 ID 和凭据的密钥。
  4. 如果单击“沙盒帐户”链接,它将显示为开发创建的测试帐户。一个用于商家,一个用于买家。使用这些帐户进行测试支付。
  5. 如果您打开买家详细信息,它将向您显示测试信用卡信息,该信息将在开发期间用于测试交易。

示例项目

示例项目分为客户端和服务器两部分。客户端使用 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 提供了不同的方式和不同的功能来在您的网站上实施支付。 在这里,我展示了如何进行支付的功能。 同样,您可以进行付款、发票、账单和其他功能。

© . All rights reserved.