7

我正在尝试使用 PayPal REST API 而不是 PayPal Classic API,但似乎 REST API 缺少 Classic API 所具有的两个功能:

  1. 立即付款:当用户转到 PayPal 页面时,向他显示“立即付款”按钮而不是“继续”按钮和“您快完成了。您将在...确认您的付款”短语。
  2. 没有送货地址:避免在 PayPal 页面上要求用户确认他的送货地址(如果我没记错的话,在经典 API 中使用 NOSHIPPING=1 参数完成)

所以我的问题是:是否可以在不使用 REST API 询问送货地址的情况下立即付款?我必须回到经典 API 吗?

我在此处提供了有关如何使用 PayPal REST API 的更多信息。我正在使用 PayPal REST Java SDK。这是一个示例请求:

{
  "intent": "sale",
  "payer": {
    "payment_method": "paypal"
  },
  "transactions": [
    {
      "amount": {
        "currency": "USD",
        "total": "5",
        "details": {
          "subtotal": "5"
        }
      },
      "description": "This is the payment transaction description.",
      "item_list": {
        "items": [
          {
            "quantity": "1",
            "name": "Item 1",
            "price": "5",
            "currency": "USD"
          }
        ]
      }
    }
  ],
  "redirect_urls": {
    "return_url": "http://XXX/handlePayment.jsp?guid\u003dXXX",
    "cancel_url": "http://XXX/cancelPayment.jsp?guid\u003dXXX"
  }
}

及其回应:

{
    "id": "XXX",
    "create_time": "2014-06-29T08:52:55Z",
    "update_time": "2014-06-29T08:52:55Z",
    "state": "created",
    "intent": "sale",
    "payer": {
        "payment_method": "paypal",
        "payer_info": {
            "shipping_address": {}
        }
    },
    "transactions": [
        {
            "amount": {
                "total": "5.00",
                "currency": "USD",
                "details": {
                    "subtotal": "5.00"
                }
            },
            "description": "This is the payment transaction description.",
            "item_list": {
                "items": [
                    {
                        "name": "Item 1",
                        "price": "5.00",
                        "currency": "USD",
                        "quantity": "1"
                    }
                ]
            }
        }
    ],
    "links": [
        {
            "href": "https://api.sandbox.paypal.com/v1/payments/payment/XXX",
            "rel": "self",
            "method": "GET"
        },
        {
            "href": "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=XXX",
            "rel": "approval_url",
            "method": "REDIRECT"
        },
        {
            "href": "https://api.sandbox.paypal.com/v1/payments/payment/XXX/execute",
            "rel": "execute",
            "method": "POST"
        }
    ]
}
4

6 回答 6

7

在研究 REST API 时,我遇到了这个

我相信这意味着您不必像这样创建任何“配置文件”,并且可以将它们与付款电话一起传递......

根据要求进一步解释:)

下面是使用客户端 JS 方法进行快速结帐传递 PayPal 体验参数以及特定支付调用的示例。

        payment: function(data, actions) {
        return actions.payment.create({
            payment: {
                transactions: [
                    {
                        amount: { total: '1.00', currency: 'USD' }
                    }
                ]
            },

            experience: {
                input_fields: {
                    no_shipping: 1
                }
            }
        });
    },

希望这对你们有足够的意义!:)

于 2017-08-23T11:02:37.547 回答
4

不幸的是,REST API 仍然落后于 Classic API 所提供的功能。您提到的这些功能是我见过的很多东西,据我所知,REST 服务还没有这些功能。

我个人一直坚持使用 Classic,因为它们提供了一切,我真的认为自己使用 REST 没有任何优势。如果您碰巧使用 PHP(我总是这样做),您可能会对我的 PayPal 类库感兴趣。它使所有 Classic API 调用对您来说都非常快速和轻松,并且它在 Packagist 上可用,因此您可以轻松地与 Composer 一起使用。

于 2014-06-29T11:59:02.513 回答
2

REST API 现在支持使用Payment Experience API不发货。

您需要创建一个 Web 体验配置文件并提供 no_shipping 作为输入字段。然后在创建付款时使用配置文件 ID。

不需要每次都重新创建配置文件 ID。

于 2015-02-18T00:02:27.197 回答
2

感谢这篇文章有一段时间没有任何活动,但是......

我遇到了完全相同的问题,并将这篇文章作为我自己问题的起点:

paypal api:无需送货地址即可立即付款

它经过了一些试验和错误,但我可以创建一个“no_shipping”设置为 1 的一次性网络配置文件,存储它创建的 ID,然后将其传递给不需要送货地址的未来付款。

仍然没有弄清楚如何摆脱'你快完成了。您将在 xxx 确认您的付款。但我的付款流程比以前好多了!

希望这对那里的人有所帮助,因为没有运输问题是很多人似乎都在使用 paypal api 遇到的问题...

于 2015-03-10T20:23:43.907 回答
1

我尝试使用 API 的体验部分,除了仍然无法强制使用区域设置代码之外,还能够禁用运输并直接进行计费:

payment: {
    transactions: [{
        invoice_number: document.getElementById("ReqTxt").value,
        amount: {
            total:  document.getElementById("InvoiceAmt").innerText,
            currency: document.getElementById("Currency").innerText 
        }
    }]
},
experience: {
    input_fields: {
        no_shipping: 1
    },
    flow_config: {
        landing_page_type:'billing'
    }
}

你也可以看到这个页面。也可以在该flow_config部分中设置用户操作

于 2018-10-03T10:02:01.587 回答
0

对于 Paypal 上的“立即付款”而不是“继续”,我在批准网址中使用了一个特殊参数:

$approvalUrl = $payment->getApprovalLink().'&useraction=commit';

结果:

https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=TOKEN&useraction=commit
于 2018-04-24T09:13:27.693 回答