简体   繁体   English

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

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

I would like to integrate a payment system but I don't see how I should wait for the response from paypal once the person has paid.我想集成一个支付系统,但我不知道一旦这个人支付了我应该如何等待贝宝的响应。 all the examples on the internet are based on asp.net, I don't think we can do the same thing........................................................................................................................网上所有的例子都是基于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();
    }
}

} }

Your code is already using the Checkout-NET-SDK (that abstracts the v2/checkout/orders PayPal REST API) to create and capture a PayPal order.您的代码已经在使用 Checkout-NET-SDK(抽象了 v2/checkout/orders PayPal REST API)来创建和捕获 PayPal 订单。 The capture API response provides an immediate notification of success or failure.捕获 API 响应提供成功或失败的即时通知。 In particular purchase_units[0].payments.captures[0].id is the PayPal transaction ID and what should be persisted in your database.特别是purchase_units[0].payments.captures[0].id是 PayPal 交易 ID,以及应该保存在数据库中的内容。 The order total should also be validated at this point in time.此时还应验证订单总额。


Separately, it appears you are using an old redirect-based flow for the approval.另外,您似乎正在使用旧的基于重定向的流程进行审批。 Instead, follow the PayPal Checkout integration guide and have the create order and capture order API steps be performed by 2 routes (url paths) on your server.相反,请遵循PayPal Checkout 集成指南,并通过服务器上的 2 个路由(url 路径)执行创建订单和捕获订单 API 步骤。 Both of these routes should return only JSON data (no HTML or text).这两个路由都应该只返回 JSON 数据(没有 HTML 或文本)。 The 2nd route takes an order id as an input parameter (path or body variable) and as mentioned should examine the result of the operation to verify the amount was correct and store its resulting payment details, as well as performing any necessary business logic (such as sending confirmation emails or reserving product) immediately before forwarding your return JSON to the frontend caller.第二条路线将订单 ID 作为输入参数(路径或正文变量),如前所述,应检查操作结果以验证金额是否正确并存储其生成的付款详细信息,以及执行任何必要的业务逻辑(例如在将返回的 JSON 转发给前端调用者之前立即发送确认电子邮件或预订产品)。 In the event of an error forward the JSON details of it as well, since the frontend must handle such cases.如果发生错误,也转发它的 JSON 详细信息,因为前端必须处理这种情况。

Pair those 2 routes with this frontend approval flow: https://developer.paypal.com/demo/checkout/#/pattern/server .将这 2 条路由与此前端审批流程配对: https ://developer.paypal.com/demo/checkout/#/pattern/server。 (If you need to send any additional data from the client to the server, such as an items array or selected options, add a body parameter to the fetch with a value that is a JSON string or object) (如果您需要从客户端向服务器发送任何其他数据,例如项目数组或选定的选项,请在获取中添加一个body参数,其值为 JSON 字符串或对象)

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

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