繁体   English   中英

支付成功后如何等待paypal回复?

[英]how to wait for the response from paypal after the payment is successful?

我想集成一个支付系统,但我不知道一旦这个人支付了我应该如何等待贝宝的响应。 网上所有的例子都是基于asp.net的,我不认为我们可以做同样的事情............ ..................................................... ..................................................

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Threading.Tasks;
using PayPalCheckoutSdk.Core;
using PayPalCheckoutSdk.Orders;
using PayPalCheckoutSdk.Payments;
using PayPalHttp;

namespace Discord.Modules
{
    public class PaypalPayment
    {
        private static OrderRequest BuildRequestBody()
        {
            OrderRequest orderRequest = new OrderRequest()
            {
                CheckoutPaymentIntent = "CAPTURE",

                ApplicationContext = new ApplicationContext
                {
                    BrandName = "EXAMPLE INC",
                    LandingPage = "BILLING",
                    CancelUrl = "https://www.example.com",
                    ReturnUrl = "https://www.example.com",
                    UserAction = "CONTINUE",
                    ShippingPreference = "SET_PROVIDED_ADDRESS"
                },
                PurchaseUnits = new List<PurchaseUnitRequest>
                {
                    new PurchaseUnitRequest{
                        ReferenceId =  "PUHF",
                        Description = "Sporting Goods",
                        CustomId = "CUST-HighFashions",
                        SoftDescriptor = "HighFashions",
                        AmountWithBreakdown = new AmountWithBreakdown
                        {
                            CurrencyCode = "USD",
                            Value = "220.00",
                            AmountBreakdown = new AmountBreakdown
                            {
                                ItemTotal = new PayPalCheckoutSdk.Orders.Money
                                {
                                    CurrencyCode = "USD",
                                    Value = "180.00"
                                },
                                Shipping = new PayPalCheckoutSdk.Orders.Money
                                {
                                    CurrencyCode = "USD",
                                    Value = "20.00"
                                },
                                Handling = new PayPalCheckoutSdk.Orders.Money
                                {
                                    CurrencyCode = "USD",
                                    Value = "10.00"
                                },
                                TaxTotal = new PayPalCheckoutSdk.Orders.Money
                                {
                                    CurrencyCode = "USD",
                                    Value = "20.00"
                                },
                                ShippingDiscount = new PayPalCheckoutSdk.Orders.Money
                                {
                                    CurrencyCode = "USD",
                                    Value = "10.00"
                                }
                            }
                        },
                        Items = new List<Item>
                        {
                            new Item
                            {
                                Name = "T-shirt",
                                Description = "Green XL",
                                Sku = "sku01",
                                UnitAmount = new PayPalCheckoutSdk.Orders.Money
                                {
                                    CurrencyCode = "USD",
                                    Value = "90.00"
                                },
                                Tax = new PayPalCheckoutSdk.Orders.Money
                                {
                                    CurrencyCode = "USD",
                                    Value = "10.00"
                                },
                                Quantity = "1",
                                Category = "PHYSICAL_GOODS"
                            },
                            new Item
                            {
                                Name = "Shoes",
                                Description = "Running, Size 10.5",
                                Sku = "sku02",
                                UnitAmount = new PayPalCheckoutSdk.Orders.Money
                                {
                                    CurrencyCode = "USD",
                                    Value = "45.00"
                                },
                                Tax = new PayPalCheckoutSdk.Orders.Money
                                {
                                    CurrencyCode = "USD",
                                    Value = "5.00"
                                },
                                Quantity = "2",
                                Category = "PHYSICAL_GOODS"
                            }
                        },
                        ShippingDetail = new ShippingDetail
                        {
                            Name = new Name
                            {
                                FullName = "John Doe"
                            },
                            AddressPortable = new AddressPortable
                            {
                                AddressLine1 = "123 Townsend St",
                                AddressLine2 = "Floor 6",
                                AdminArea2 = "San Francisco",
                                AdminArea1 = "CA",
                                PostalCode = "94107",
                                CountryCode = "US"
                            }
                        }
                    }
                }
            };

            return orderRequest;
        }


        public async static Task<HttpResponse> CreateOrder(bool debug = false)
        {
            var request = new OrdersCreateRequest();
            request.Headers.Add("prefer", "return=representation");
            request.RequestBody(BuildRequestBody());
            var client = PayPalClient.client();
            var response = await client.Execute(request);

            if (debug)
            {
                var result = response.Result<Order>();
                Console.WriteLine("Status: {0}", result.Status);
                Console.WriteLine("Order Id: {0}", result.Id);
                Console.WriteLine("Intent: {0}", result.CheckoutPaymentIntent);
                Console.WriteLine("Links:");
                foreach (PayPalCheckoutSdk.Orders.LinkDescription link in result.Links)
                {
                    Console.WriteLine("\t{0}: {1}\tCall Type: {2}", link.Rel, link.Href, link.Method);
                }
                AmountWithBreakdown amount = result.PurchaseUnits[0].AmountWithBreakdown;
                Console.WriteLine("Total Amount: {0} {1}", amount.CurrencyCode, amount.Value);
                Console.WriteLine("Response JSON: \n {0}", PayPalClient.ObjectToJSONString(result));
            }

            return response;
        }

        public async static Task<HttpResponse> CaptureOrder(string OrderId, bool debug = false)
        {
            var request = new OrdersCaptureRequest(OrderId);
            request.Prefer("return=representation");
            request.RequestBody(new OrderActionRequest());
            var client = PayPalClient.client();
            var response = await client.Execute(request);

            if (debug)
            {
                var result = response.Result<Order>();
                Console.WriteLine("Status: {0}", result.Status);
                Console.WriteLine("Order Id: {0}", result.Id);
                Console.WriteLine("Intent: {0}", result.CheckoutPaymentIntent);
                Console.WriteLine("Links:");
                foreach (PayPalCheckoutSdk.Orders.LinkDescription link in result.Links)
                {
                    Console.WriteLine("\t{0}: {1}\tCall Type: {2}", link.Rel, link.Href, link.Method);
                }
                Console.WriteLine("Capture Ids: ");
                foreach (PurchaseUnit purchaseUnit in result.PurchaseUnits)
                {
                    foreach (PayPalCheckoutSdk.Orders.Capture capture in purchaseUnit.Payments.Captures)
                    {
                        Console.WriteLine("\t {0}", capture.Id);
                    }
                }
                AmountWithBreakdown amount = result.PurchaseUnits[0].AmountWithBreakdown;
                Console.WriteLine("Buyer:");
                Console.WriteLine("\tEmail Address: {0}\n\tName: {1} {2}\n",
                    result.Payer.Email,
                    result.Payer.Name.GivenName,
                    result.Payer.Name.Surname);
                Console.WriteLine("Response JSON:\n{0}", PayPalClient.ObjectToJSONString(result));
            }

            return response;
        }


        public static async Task asdasd()
        {
            Console.WriteLine("Running Capture Intent Flow..");
            var createOrderResponse = CreateOrder(true).Result;
            var createOrderResult = createOrderResponse.Result<Order>();
            Console.WriteLine("Status: {0}", createOrderResult.Status);
            Console.WriteLine("Order Id: {0}", createOrderResult.Id);
            Console.WriteLine("Intent: {0}", createOrderResult.CheckoutPaymentIntent);
            Console.WriteLine("Links:");
            foreach (PayPalCheckoutSdk.Orders.LinkDescription link in createOrderResult.Links)
            {
                Console.WriteLine("\t{0}: {1}\tCall Type: {2}", link.Rel, link.Href, link.Method);
            }
            AmountWithBreakdown amount = createOrderResult.PurchaseUnits[0].AmountWithBreakdown;
            Console.WriteLine("Total Amount: {0} {1}", amount.CurrencyCode, amount.Value);

            Console.WriteLine("Copy approve link and paste it in browser. Login with buyer account and follow the instructions.\nOnce approved hit enter...\n");
            Console.Read();

            Console.WriteLine("Capturing the payment...");
            var captureOrderResponse = CaptureOrder(createOrderResult.Id, true).Result;
            var captureOrderResult = captureOrderResponse.Result<Order>();
            var captureId = "";
            Console.WriteLine("Status: {0}", captureOrderResult.Status);
            Console.WriteLine("Order Id: {0}", captureOrderResult.Id);
            Console.WriteLine("Intent: {0}", captureOrderResult.CheckoutPaymentIntent);
            Console.WriteLine("Links:");
            foreach (PayPalCheckoutSdk.Orders.LinkDescription link in captureOrderResult.Links)
            {
                Console.WriteLine("\t{0}: {1}\tCall Type: {2}", link.Rel, link.Href, link.Method);
            }
            foreach (PurchaseUnit purchaseUnit in captureOrderResult.PurchaseUnits)
            {
                foreach (PayPalCheckoutSdk.Orders.Capture capture in purchaseUnit.Payments.Captures)
                {
                    captureId = capture.Id;
                }
            }
            AmountWithBreakdown captureAmount = captureOrderResult.PurchaseUnits[0].AmountWithBreakdown;
            Console.WriteLine("Buyer:");
            Console.WriteLine("\tEmail Address: {0}\n\tName: {1} {2}",
            captureOrderResult.Payer.Email, captureOrderResult.Payer.Name.GivenName, captureOrderResult.Payer.Name.Surname);

            Console.WriteLine("Refunding the Order....");
            var refundOrderResponse = CapturesRefund(captureId, true).Result;
            var refundOrderResult = refundOrderResponse.Result<PayPalCheckoutSdk.Payments.Refund>();
            Console.WriteLine("Status: {0}", refundOrderResult.Status);
            Console.WriteLine("Refund Id: {0}", refundOrderResult.Id);
            Console.WriteLine("Links:");
            foreach (PayPalCheckoutSdk.Payments.LinkDescription link in refundOrderResult.Links)
            {
                Console.WriteLine("\t{0}: {1}\tCall Type: {2}", link.Rel, link.Href, link.Method);
            }
        }

        public async static Task<HttpResponse> CapturesRefund(string CaptureId, bool debug = false)
        {
            var request = new CapturesRefundRequest(CaptureId);
            request.Prefer("return=representation");
            RefundRequest refundRequest = new RefundRequest()
            {
                Amount = new PayPalCheckoutSdk.Payments.Money
                {
                    Value = "20.00",
                    CurrencyCode = "USD"
                }
            };
            request.RequestBody(refundRequest);
            var response = await PayPalClient.client().Execute(request);

            if (debug)
            {
                var result = response.Result<PayPalCheckoutSdk.Payments.Refund>();
                Console.WriteLine("Status: {0}", result.Status);
                Console.WriteLine("Refund Id: {0}", result.Id);
                Console.WriteLine("Links:");
                foreach (PayPalCheckoutSdk.Payments.LinkDescription link in result.Links)
                {
                    Console.WriteLine("\t{0}: {1}\tCall Type: {2}", link.Rel, link.Href, link.Method);
                }
                Console.WriteLine("Response JSON: \n {0}", PayPalClient.ObjectToJSONString(result));
            }
            return response;
        }

    }

    public class PayPalClient
    {
        /**
            Setting up PayPal environment with credentials with sandbox cerdentails. 
            For Live, this should be LiveEnvironment Instance. 
         */
        public static PayPalEnvironment environment()
        {
            return new SandboxEnvironment(
                 System.Environment.GetEnvironmentVariable("") != null ?
                 System.Environment.GetEnvironmentVariable("") : "",
                System.Environment.GetEnvironmentVariable("") != null ?
                 System.Environment.GetEnvironmentVariable("") : "");
        }

        /**
            Returns PayPalHttpClient instance which can be used to invoke PayPal API's.
         */
        public static HttpClient client()
        {
            return new PayPalHttpClient(environment());
        }

        public static HttpClient client(string refreshToken)
        {
            return new PayPalHttpClient(environment(), refreshToken);
        }

        /**
            This method can be used to Serialize Object to JSON string.
        */
        public static String ObjectToJSONString(Object serializableObject)
        {
            MemoryStream memoryStream = new MemoryStream();
            var writer = JsonReaderWriterFactory.CreateJsonWriter(
                        memoryStream, Encoding.UTF8, true, true, "  ");
            DataContractJsonSerializer ser = new DataContractJsonSerializer(serializableObject.GetType(), new DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true });
            ser.WriteObject(writer, serializableObject);
            memoryStream.Position = 0;
            StreamReader sr = new StreamReader(memoryStream);
            return sr.ReadToEnd();
        }
    }

}

    private static OrderRequest BuildRequestBody()
    {
        OrderRequest orderRequest = new OrderRequest()
        {
            CheckoutPaymentIntent = "CAPTURE",

            ApplicationContext = new ApplicationContext
            {
                BrandName = "EXAMPLE INC",
                LandingPage = "BILLING",
                CancelUrl = "https://www.example.com",
                ReturnUrl = "https://www.example.com",
                UserAction = "CONTINUE",
                ShippingPreference = "SET_PROVIDED_ADDRESS"
            },
            PurchaseUnits = new List<PurchaseUnitRequest>
            {
                new PurchaseUnitRequest{
                    ReferenceId =  "PUHF",
                    Description = "Sporting Goods",
                    CustomId = "CUST-HighFashions",
                    SoftDescriptor = "HighFashions",
                    AmountWithBreakdown = new AmountWithBreakdown
                    {
                        CurrencyCode = "USD",
                        Value = "220.00",
                        AmountBreakdown = new AmountBreakdown
                        {
                            ItemTotal = new PayPalCheckoutSdk.Orders.Money
                            {
                                CurrencyCode = "USD",
                                Value = "180.00"
                            },
                            Shipping = new PayPalCheckoutSdk.Orders.Money
                            {
                                CurrencyCode = "USD",
                                Value = "20.00"
                            },
                            Handling = new PayPalCheckoutSdk.Orders.Money
                            {
                                CurrencyCode = "USD",
                                Value = "10.00"
                            },
                            TaxTotal = new PayPalCheckoutSdk.Orders.Money
                            {
                                CurrencyCode = "USD",
                                Value = "20.00"
                            },
                            ShippingDiscount = new PayPalCheckoutSdk.Orders.Money
                            {
                                CurrencyCode = "USD",
                                Value = "10.00"
                            }
                        }
                    },
                    Items = new List<Item>
                    {
                        new Item
                        {
                            Name = "T-shirt",
                            Description = "Green XL",
                            Sku = "sku01",
                            UnitAmount = new PayPalCheckoutSdk.Orders.Money
                            {
                                CurrencyCode = "USD",
                                Value = "90.00"
                            },
                            Tax = new PayPalCheckoutSdk.Orders.Money
                            {
                                CurrencyCode = "USD",
                                Value = "10.00"
                            },
                            Quantity = "1",
                            Category = "PHYSICAL_GOODS"
                        },
                        new Item
                        {
                            Name = "Shoes",
                            Description = "Running, Size 10.5",
                            Sku = "sku02",
                            UnitAmount = new PayPalCheckoutSdk.Orders.Money
                            {
                                CurrencyCode = "USD",
                                Value = "45.00"
                            },
                            Tax = new PayPalCheckoutSdk.Orders.Money
                            {
                                CurrencyCode = "USD",
                                Value = "5.00"
                            },
                            Quantity = "2",
                            Category = "PHYSICAL_GOODS"
                        }
                    },
                    ShippingDetail = new ShippingDetail
                    {
                        Name = new Name
                        {
                            FullName = "John Doe"
                        },
                        AddressPortable = new AddressPortable
                        {
                            AddressLine1 = "123 Townsend St",
                            AddressLine2 = "Floor 6",
                            AdminArea2 = "San Francisco",
                            AdminArea1 = "CA",
                            PostalCode = "94107",
                            CountryCode = "US"
                        }
                    }
                }
            }
        };

        return orderRequest;
    }


    public async static Task<HttpResponse> CreateOrder(bool debug = false)
    {
        var request = new OrdersCreateRequest();
        request.Headers.Add("prefer", "return=representation");
        request.RequestBody(BuildRequestBody());
        var client = PayPalClient.client();
        var response = await client.Execute(request);

        if (debug)
        {
            var result = response.Result<Order>();
            Console.WriteLine("Status: {0}", result.Status);
            Console.WriteLine("Order Id: {0}", result.Id);
            Console.WriteLine("Intent: {0}", result.CheckoutPaymentIntent);
            Console.WriteLine("Links:");
            foreach (PayPalCheckoutSdk.Orders.LinkDescription link in result.Links)
            {
                Console.WriteLine("\t{0}: {1}\tCall Type: {2}", link.Rel, link.Href, link.Method);
            }
            AmountWithBreakdown amount = result.PurchaseUnits[0].AmountWithBreakdown;
            Console.WriteLine("Total Amount: {0} {1}", amount.CurrencyCode, amount.Value);
            Console.WriteLine("Response JSON: \n {0}", PayPalClient.ObjectToJSONString(result));
        }

        return response;
    }

    public async static Task<HttpResponse> CaptureOrder(string OrderId, bool debug = false)
    {
        var request = new OrdersCaptureRequest(OrderId);
        request.Prefer("return=representation");
        request.RequestBody(new OrderActionRequest());
        var client = PayPalClient.client();
        var response = await client.Execute(request);

        if (debug)
        {
            var result = response.Result<Order>();
            Console.WriteLine("Status: {0}", result.Status);
            Console.WriteLine("Order Id: {0}", result.Id);
            Console.WriteLine("Intent: {0}", result.CheckoutPaymentIntent);
            Console.WriteLine("Links:");
            foreach (PayPalCheckoutSdk.Orders.LinkDescription link in result.Links)
            {
                Console.WriteLine("\t{0}: {1}\tCall Type: {2}", link.Rel, link.Href, link.Method);
            }
            Console.WriteLine("Capture Ids: ");
            foreach (PurchaseUnit purchaseUnit in result.PurchaseUnits)
            {
                foreach (PayPalCheckoutSdk.Orders.Capture capture in purchaseUnit.Payments.Captures)
                {
                    Console.WriteLine("\t {0}", capture.Id);
                }
            }
            AmountWithBreakdown amount = result.PurchaseUnits[0].AmountWithBreakdown;
            Console.WriteLine("Buyer:");
            Console.WriteLine("\tEmail Address: {0}\n\tName: {1} {2}\n",
                result.Payer.Email,
                result.Payer.Name.GivenName,
                result.Payer.Name.Surname);
            Console.WriteLine("Response JSON:\n{0}", PayPalClient.ObjectToJSONString(result));
        }

        return response;
    }


    public static async Task asdasd()
    {
        Console.WriteLine("Running Capture Intent Flow..");
        var createOrderResponse = CreateOrder(true).Result;
        var createOrderResult = createOrderResponse.Result<Order>();
        Console.WriteLine("Status: {0}", createOrderResult.Status);
        Console.WriteLine("Order Id: {0}", createOrderResult.Id);
        Console.WriteLine("Intent: {0}", createOrderResult.CheckoutPaymentIntent);
        Console.WriteLine("Links:");
        foreach (PayPalCheckoutSdk.Orders.LinkDescription link in createOrderResult.Links)
        {
            Console.WriteLine("\t{0}: {1}\tCall Type: {2}", link.Rel, link.Href, link.Method);
        }
        AmountWithBreakdown amount = createOrderResult.PurchaseUnits[0].AmountWithBreakdown;
        Console.WriteLine("Total Amount: {0} {1}", amount.CurrencyCode, amount.Value);

        Console.WriteLine("Copy approve link and paste it in browser. Login with buyer account and follow the instructions.\nOnce approved hit enter...\n");
        Console.Read();

        Console.WriteLine("Capturing the payment...");
        var captureOrderResponse = CaptureOrder(createOrderResult.Id, true).Result;
        var captureOrderResult = captureOrderResponse.Result<Order>();
        var captureId = "";
        Console.WriteLine("Status: {0}", captureOrderResult.Status);
        Console.WriteLine("Order Id: {0}", captureOrderResult.Id);
        Console.WriteLine("Intent: {0}", captureOrderResult.CheckoutPaymentIntent);
        Console.WriteLine("Links:");
        foreach (PayPalCheckoutSdk.Orders.LinkDescription link in captureOrderResult.Links)
        {
            Console.WriteLine("\t{0}: {1}\tCall Type: {2}", link.Rel, link.Href, link.Method);
        }
        foreach (PurchaseUnit purchaseUnit in captureOrderResult.PurchaseUnits)
        {
            foreach (PayPalCheckoutSdk.Orders.Capture capture in purchaseUnit.Payments.Captures)
            {
                captureId = capture.Id;
            }
        }
        AmountWithBreakdown captureAmount = captureOrderResult.PurchaseUnits[0].AmountWithBreakdown;
        Console.WriteLine("Buyer:");
        Console.WriteLine("\tEmail Address: {0}\n\tName: {1} {2}",
        captureOrderResult.Payer.Email, captureOrderResult.Payer.Name.GivenName, captureOrderResult.Payer.Name.Surname);

        Console.WriteLine("Refunding the Order....");
        var refundOrderResponse = CapturesRefund(captureId, true).Result;
        var refundOrderResult = refundOrderResponse.Result<PayPalCheckoutSdk.Payments.Refund>();
        Console.WriteLine("Status: {0}", refundOrderResult.Status);
        Console.WriteLine("Refund Id: {0}", refundOrderResult.Id);
        Console.WriteLine("Links:");
        foreach (PayPalCheckoutSdk.Payments.LinkDescription link in refundOrderResult.Links)
        {
            Console.WriteLine("\t{0}: {1}\tCall Type: {2}", link.Rel, link.Href, link.Method);
        }
    }

    public async static Task<HttpResponse> CapturesRefund(string CaptureId, bool debug = false)
    {
        var request = new CapturesRefundRequest(CaptureId);
        request.Prefer("return=representation");
        RefundRequest refundRequest = new RefundRequest()
        {
            Amount = new PayPalCheckoutSdk.Payments.Money
            {
                Value = "20.00",
                CurrencyCode = "USD"
            }
        };
        request.RequestBody(refundRequest);
        var response = await PayPalClient.client().Execute(request);

        if (debug)
        {
            var result = response.Result<PayPalCheckoutSdk.Payments.Refund>();
            Console.WriteLine("Status: {0}", result.Status);
            Console.WriteLine("Refund Id: {0}", result.Id);
            Console.WriteLine("Links:");
            foreach (PayPalCheckoutSdk.Payments.LinkDescription link in result.Links)
            {
                Console.WriteLine("\t{0}: {1}\tCall Type: {2}", link.Rel, link.Href, link.Method);
            }
            Console.WriteLine("Response JSON: \n {0}", PayPalClient.ObjectToJSONString(result));
        }
        return response;
    }

}

public class PayPalClient
{
    /**
        Setting up PayPal environment with credentials with sandbox cerdentails. 
        For Live, this should be LiveEnvironment Instance. 
     */
    public static PayPalEnvironment environment()
    {
        return new SandboxEnvironment(
             System.Environment.GetEnvironmentVariable("") != null ?
             System.Environment.GetEnvironmentVariable("") : "",
            System.Environment.GetEnvironmentVariable("") != null ?
             System.Environment.GetEnvironmentVariable("") : "");
    }

    /**
        Returns PayPalHttpClient instance which can be used to invoke PayPal API's.
     */
    public static HttpClient client()
    {
        return new PayPalHttpClient(environment());
    }

    public static HttpClient client(string refreshToken)
    {
        return new PayPalHttpClient(environment(), refreshToken);
    }

    /**
        This method can be used to Serialize Object to JSON string.
    */
    public static String ObjectToJSONString(Object serializableObject)
    {
        MemoryStream memoryStream = new MemoryStream();
        var writer = JsonReaderWriterFactory.CreateJsonWriter(
                    memoryStream, Encoding.UTF8, true, true, "  ");
        DataContractJsonSerializer ser = new DataContractJsonSerializer(serializableObject.GetType(), new DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true });
        ser.WriteObject(writer, serializableObject);
        memoryStream.Position = 0;
        StreamReader sr = new StreamReader(memoryStream);
        return sr.ReadToEnd();
    }
}

}

您的代码已经在使用 Checkout-NET-SDK(抽象了 v2/checkout/orders PayPal REST API)来创建和捕获 PayPal 订单。 捕获 API 响应提供成功或失败的即时通知。 特别是purchase_units[0].payments.captures[0].id是 PayPal 交易 ID,以及应该保存在数据库中的内容。 此时还应验证订单总额。


另外,您似乎正在使用旧的基于重定向的流程进行审批。 相反,请遵循PayPal Checkout 集成指南,并通过服务器上的 2 个路由(url 路径)执行创建订单和捕获订单 API 步骤。 这两个路由都应该只返回 JSON 数据(没有 HTML 或文本)。 第二条路线将订单 ID 作为输入参数(路径或正文变量),如前所述,应检查操作结果以验证金额是否正确并存储其生成的付款详细信息,以及执行任何必要的业务逻辑(例如在将返回的 JSON 转发给前端调用者之前立即发送确认电子邮件或预订产品)。 如果发生错误,也转发它的 JSON 详细信息,因为前端必须处理这种情况。

将这 2 条路由与此前端审批流程配对: https ://developer.paypal.com/demo/checkout/#/pattern/server。 (如果您需要从客户端向服务器发送任何其他数据,例如项目数组或选定的选项,请在获取中添加一个body参数,其值为 JSON 字符串或对象)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM