向 Paypal Action 结果添加变量

如何解决向 Paypal Action 结果添加变量

我正在使用 C# 中的 Paypal 交易示例。这个例子有静态项目要发送。我添加了获取正确项目所需的内容,并且我正在使用我没有添加的 id 变量来执行此操作。 id 获取该订单的数据记录。所有这些似乎都运行良好。除了现在它不会重定向到贝宝付款页面。我假设这是因为我添加了 id 变量。 我的问题是如何解决这个问题?我是否需要更改某些内容以使其重定向或不允许添加此变量?它适用于静态项目,没有 id..

下面是我的控制器操作:

public ActionResult ProcessInvoice(int id,string Cancel = null )
    {

        //getting the apiContext  
        APIContext apiContext = PaypalConfiguration.GetAPIContext();
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        try
        {
            //A resource representing a Payer that funds a payment Payment Method as paypal  
            //Payer Id will be returned when payment proceeds or click to pay  
            string payerId = Request.Params["PayerID"];
            if (string.IsNullOrEmpty(payerId))
            {
                //this section will be executed first because PayerID doesn't exist  
                //it is returned by the create function call of the payment class  
                // Creating a payment  
                // baseURL is the url on which paypal sendsback the data.  
                string baseURI = Request.Url.Scheme + "://" + Request.Url.Authority + "/ProcessInvoice?";
                //here we are generating guid for storing the paymentID received in session  
                //which will be used in the payment execution  
                var guid = Convert.ToString((new Random()).Next(100000));
                //CreatePayment function gives us the payment approval url  
                //on which payer is redirected for paypal account payment  
                var createdPayment = this.CreatePayment(id,apiContext,baseURI + "guid=" + guid);
                //get links returned from paypal in response to Create function call  
                var links = createdPayment.links.GetEnumerator();
                string paypalRedirectUrl = null;
                while (links.MoveNext())
                {
                    Links lnk = links.Current;
                    if (lnk.rel.ToLower().Trim().Equals("approval_url"))
                    {
                        //saving the payapalredirect URL to which user will be redirected for payment  
                        paypalRedirectUrl = lnk.href;
                    }
                }
                // saving the paymentID in the key guid  
                Session.Add(guid,createdPayment.id);
                return Redirect(paypalRedirectUrl);
            }
            else
            {
                // This function exectues after receving all parameters for the payment  
                var guid = Request.Params["guid"];
                var executedPayment = ExecutePayment(apiContext,payerId,Session[guid] as string);
                //If executed payment failed then we will show payment failure message to user  
                if (executedPayment.state.ToLower() != "approved")
                {
                    return View("FailureView");
                }
            }
        }
        catch (Exception ex)
        {
            sb.Append("Error :" + ex.Message);
            //return View("FailureView");
        }
        //on successful payment,show success page to user.  
        return View("SuccessView");
    }
    private PayPal.Api.Payment payment;
    private Payment ExecutePayment(APIContext apiContext,string payerId,string paymentId)
    {
        var paymentExecution = new PaymentExecution()
        {
            payer_id = payerId
        };
        this.payment = new Payment()
        {
            id = paymentId
        };
        return this.payment.Execute(apiContext,paymentExecution);
    }
    private Payment CreatePayment(int id,APIContext apiContext,string redirectUrl)
    {
        //create itemlist and add item objects to it 
        var order = db.Orders.Find(id);
        var company = db.CompanyNames.Where(x => x.CompanyId == order.CompanyId).FirstOrDefault();
        var shipping = db.ShippingOrBOL.Where(x => x.CompanyId == order.CompanyId).FirstOrDefault();

        var cName = company.CompanyName;
        var invNum = order.InvoiceNumber;
        var desc = order.OrderDescription;
        var price = order.TotalPrice.ToString();
        var poNum = order.PONumber;
        var shipCost = shipping.ShippingPrice.ToString();
        decimal totalOrder = 0m;
        string total = totalOrder.ToString();
        decimal tax = .08m;
        var detail = db.OrderDetails.Where(x => x.OrderId == id).ToList();
        List<Item> items = new List<Item>();
        foreach (var item in detail)
        {
            var part = db.ExtParts.Where(a => a.Material == item.Material).FirstOrDefault();
            var prt = part.PartNumber;
            var prc = item.UnitPrice.ToString();
            var qty = item.Quantity.ToString();

            items.Add(new Item()
            {
                name = part.Description,currency = "USD",price = prc,quantity = qty,sku = prt,});

            totalOrder += (item.Quantity * item.UnitPrice);
        }
        ItemList theItemList = new ItemList
        {
            items = new List<Item>()
        };
        theItemList.items = items;

        var payer = new Payer()
        {
            payment_method = "paypal"
        };
        // Configure Redirect Urls here with RedirectUrls object  
        var redirUrls = new RedirectUrls()
        {
            cancel_url = redirectUrl + "&Cancel=true",return_url = redirectUrl
        };
        // Adding Tax,shipping and Subtotal details  
        decimal totalTax = totalOrder * (tax);
        var tt = totalTax.ToString();
        var details = new Details()
        {
            tax = tt,shipping = shipCost,subtotal = total
        };
        //Final amount with details  
        var amount = new Amount()
        {
            currency = "USD",total = price,// Total must be equal to sum of tax,shipping and subtotal.  
            details = details
        };
        var transactionList = new List<Transaction>();
        // Adding description about the transaction  
        transactionList.Add(new Transaction()
        {
            description = desc,invoice_number = invNum,//Generate an Invoice No  
            amount = amount,item_list = theItemList
        });
        this.payment = new Payment()
        {
            intent = "sale",payer = payer,transactions = transactionList,redirect_urls = redirUrls
        };
        // Create a payment using a APIContext  
        return this.payment.Create(apiContext);
    }

它实际上转到了用于操作的页面,当然由于该视图不存在而出错。

更新: 问题实际上是总计为 0,Paypal 无法创建总计为零的值。我需要弄清楚为什么总数是 0。我怀疑这是我得到总数的方式。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res