29

使用 PayPal API 并使用SDK 和下载中的名称-值对接口 PHP 源代码:简化与下载和 SDK 的集成

我的问题类似于“删除(或预填充)PayPal Express Checkout 的地址详细信息”,但我根本不想要运费/地址或任何与运费相关的内容。

我在我的系统上保留了所有运输详细信息(即使有时运输甚至不适用并且不收取任何费用),我只想让用户通过 PayPal 付款,而不需要送货地址和运费。

如何禁用结帐的运输部分?

4

8 回答 8

32

如果您使用较新的 API,您还可以传递 NOSHIPPING=1(不是 no_shipping)

有关 SetExpressCheckout 的所有可能参数的更多详细信息:

https://developer.paypal.com/docs/nvp-soap-api/nvp/

或在新的 REST API 中查找支付体验

于 2010-12-09T22:16:58.450 回答
16

对于寻找这个的其他人,因为 PayPals 文档非常好(咳嗽,咳嗽)。

无需网络体验配置文件!

使用带有 Javascript/JQuery 的 REST API V2 并为订单关闭“Ship To”,这是正确的代码示例:

    createOrder: function(data, actions) {
        $('#paypalmsg').html('<b>' + 'WAITING ON AUTHORIZATION TO RETURN...' + '</b>');
        $('#chkoutmsg').hide()
        return actions.order.create({
            purchase_units: [{
                description: 'GnG Order',
                amount: {
                    value: cartTotal
                }
            }],
            application_context: {
              shipping_preference: 'NO_SHIPPING'
            }

        });
    },
于 2020-05-20T19:57:00.940 回答
15

嘿 Ergec,只需传递no_shipping值为 的参数1

来自 PayPal 的文档

no_shipping

不要提示付款人提供送货地址。允许值:
0 – 提示输入地址,但不需要
1 – 不提示输入地址
2 – 提示输入地址,并且需要一个
默认值为 0。
于 2010-11-26T07:28:44.970 回答
8

当前的正确答案已弃用。要解决新 API 中的问题,我们应该使用所需参数创建Payment Web 体验配置文件资源,并将其附加到请求Payment

PHP 中的示例:

/** Note: Define some variables yourself. */

$inputFields = new InputFields();
$inputFields->setAllowNote(true)
    ->setNoShipping(1) // Important step
    ->setAddressOverride(0);

$webProfile = new WebProfile();
$webProfile->setName(uniqid())
    ->setInputFields($inputFields)
    ->setTemporary(true);

$createProfile = $webProfile->create($apiContext);

$payment = new Payment();

$payment->setPayer($payer);
$payment->setIntent($intent);
$payment->setRedirectUrls($redirectUrls)
$payment->setTransactions(array($transaction));
$payment->setExperienceProfileId($createProfile->getId()); // Important step.

$payment->create($apiContext);

if ($payment->getState() === "created") {
    $approvalLink = $payment->getApprovalLink()

    header("Location: $approvalLink"); // Redirects user to PayPal page.
}

注意:您可以通过链接找到以上所有使用的类:https ://github.com/paypal/PayPal-PHP-SDK/tree/master/lib/PayPal/Api

于 2017-12-01T15:07:15.843 回答
6

要从当前 (2019) Web 客户端 .JS 解决此问题,请将application_context块添加到请求正文。

以下是createSubscription()调用示例;我认为这也createOrder()适用

paypal.Buttons({
          createSubscription: function (data, actions) {

              return actions.subscription.create({

                  'plan_id'            : 'P-123',
                  'application_context': {
                      'shipping_preference': 'NO_SHIPPING'
                  }
              });
          },

          onApprove: function (data, actions) {

              // ...
          }
      })
      .render('#paypal-button-container');

感谢这里的示例代码:

这里列出了字段枚举:

于 2019-08-25T22:34:30.063 回答
2

根据 API 中的示例创建 Web 配置文件:CreateWebProfile.php.

$createProfileResponse = require  __DIR__ . '/CreateWebProfile.php';
$payment = new Payment(); 
$payment->setExperienceProfileId($createProfileResponse->getId());

文件路径:paypal/rest-api-sdk-php/sample/payment-experience/CreateWebProfile.php

于 2015-09-16T21:57:25.903 回答
1

@Ergec:我试过这个:

$nvpstr = "&ADDRESSOVERRIDE=1".$shiptoAddress."&L_NAME0=".$L_NAME0."&L_NAME1=".$L_NAME1."&L_AMT0=".$L_AMT0."&L_AMT1=".$L_AMT1."&L_QTY0=".$L_QTY0."&L_QTY1=".$L_QTY1."&MAXAMT=".(string)$maxamt."&ITEMAMT=".(string)$itemamt."&AMT=".$itemamt."&ReturnUrl=".$returnURL."&CANCELURL=".$cancelURL."&CURRENCYCODE=".$currencyCodeType;

有用。在这里,即使我们不收取任何费用,我们也可以使用送货地址。

于 2011-08-17T06:17:58.927 回答
0

2022 年及以后

PayPal API V2的文档,目前是最新版本,在过去一年左右似乎已经被清理了很多,说明如下:

运输偏好

向客户显示送货地址。使客户能够选择 PayPal 站点上的地址。限制客户在付款批准过程中更改地址。

可能的值是:

GET_FROM_FILE。使用 PayPal 网站上客户提供的送货地址。
NO_SHIPPING。从 PayPal 网站编辑收货地址。推荐用于数字商品。
SET_PROVIDED_ADDRESS。使用商家提供的地址。客户无法在 PayPal 网站上更改此地址。

因此,只需添加:

"application_context" => [
    "shipping_preference" => "NO_SHIPPING"
]

或者如果使用 JavaScript:

"application_context": {
    "shipping_preference" => "NO_SHIPPING"
}

...到创建付款意图的代码部分。请注意,您可能需要在它之前添加一个逗号。

例如,我使用 PayPal 的标准结账集成(反过来利用智能按钮)创建订单的 PHP 代码现在如下所示:

$order = $paypal->createOrder([
    "intent"=> "CAPTURE",
    "purchase_units"=> [
         [
            "amount"=> [
                "currency_code" => "GBP",
                "value"=> 4.99
            ],
             'description' => 'My product description',
        ],            
    ],               
    "application_context" => [
        "shipping_preference" => "NO_SHIPPING"
    ]
]);
于 2022-02-18T01:05:23.900 回答