【问题标题】:Paypal button terminates asp .net execution after approved purchasePaypal 按钮在批准购买后终止 asp .net 执行
【发布时间】:2022-01-18 06:38:43
【问题描述】:

当我使用从 paypal 生成的代码的智能按钮在 paypal 沙箱中进行测试时,购买成功执行。 但是当我重定向到一个成功的购买页面时,调试中的 asp .net 引擎崩溃,然后不执行服务器代码(比如向客户发送成功的购买电子邮件,将 paypal 交易 ID 保存在数据库等)。 我使用 window.location、window.location.href、window.location.replace 等进行了测试……页面重定向但不执行其背后的代码。也许它执行了 1 或 2 行代码然后立即停止,其他时候它得到 localhost 拒绝连接的错误。

通过示例,此代码不会崩溃(paypalok.aspx 后面的调试和代码运行正常)

   <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs"        
   Inherits="WebApplication8.WebForm1" %>

   <!DOCTYPE html>

   <html xmlns="http://www.w3.org/1999/xhtml">
   <head runat="server">
   <title></title>
   </head>
   <body>
  <form id="form1" runat="server">
    <div>

        <input id="Button1" type="button" value="button" onclick="redirect()" />
    </div>
  </form>

<script>
    function redirect() {
        window.location.href = 'paypalok.aspx';
    }
  </script>
   </body>
   </html>

您可以自己尝试一下,您将看到重定向到“paypalok.aspx”后,asp .net 调试如何意外停止。

通过示例,此代码崩溃:...

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="paypal3.aspx.cs"               
                        Inherits="WebApplication7.paypal3" %>

      <!DOCTYPE html>

       <html xmlns="http://www.w3.org/1999/xhtml">
      <head runat="server">
      <title></title>
    </head>
  <body>
     <form id="form1" runat="server">
    <div>
        <div id="smart-button-container">
          <div style="text-align: center;">
            <div id="paypal-button-container"></div>
          </div>
        </div>
    </div>
</form>
    <script src="https://www.paypal.com/sdk/js?client-id=sb&enable-funding=venmo&currency=USD"       
     data-sdk-integration-source="button-factory"></script>
    <script>
        function initPayPalButton() {

      paypal.Buttons({
          style: {
              shape: 'rect',
              color: 'gold',
              layout: 'vertical',
              label: 'paypal',

          },

          createOrder: function (data, actions) {
              return actions.order.create({
                  purchase_units: [{ "amount": { "currency_code": "USD", "value": 0.81 } }]
              });
          },

          onApprove: function (data, actions) {
              window.location.replace ('paypalok.aspx');
          },

          onError: function (err) {
              console.log(err);
          }
      }).render('#paypal-button-container');
  }

        initPayPalButton();

        </script>



  </body>
  </html>

如果有任何帮助,我将不胜感激

【问题讨论】:

    标签: javascript asp.net .net paypal jscript


    【解决方案1】:

    您不应该在客户端创建订单然后在服务器上捕获。不要混合使用这些集成类型。此外,最好让您的服务器的捕获路由简单地使用 JSON 进行回复,这样您就可以使用 fetch/XHR 调用它,而不是重定向,并立即显示成功/感谢消息。没有充分的理由在现代网站上重定向。


    按照Set up standard payments 指南,在您的服务器上创建两条路线,一条用于“创建订单”,一条用于“捕获订单”documented here。两个路由都应该只返回 JSON 数据(没有 HTML 或文本)。在第二条路线中,当捕获 API 成功时,您应该将其生成的付款详细信息存储在您的数据库中(特别是 purchase_units[0].payments.captures[0].id,这是 PayPal 交易 ID)并执行任何必要的业务逻辑(例如发送确认电子邮件或预订产品)立即将您的返回 JSON 转发给前端调用者。

    将这 2 条路由与前端审批流程配对:https://developer.paypal.com/demo/checkout/#/pattern/server

    请注意,此流程包括在融资工具被拒绝时适当的客户端错误处理,这一点很重要。重定向离开不允许用户优雅地重试,应该避免。

    【讨论】:

      猜你喜欢
      • 2014-10-05
      • 2013-01-03
      • 2018-04-01
      • 2014-08-03
      • 2013-11-02
      • 1970-01-01
      • 2015-09-22
      • 2014-09-15
      • 2013-08-30
      相关资源
      最近更新 更多