繁体   English   中英

在 PayPal Express Checkout 中禁用送货地址选项

[英]Disable shipping address option in PayPal Express Checkout

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

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

我在我的系统上保留了所有运输细节(甚至有时运输甚至不适用并且不收取任何费用)并且我只希望用户通过 PayPal 付款而没有送货地址和运费。

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

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

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

https://developer.paypal.com/webapps/developer/docs/classic/api/merchant/SetExpressCheckout_API_Operation_NVP/

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

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

来自 PayPal 的文档

no_shipping

Do not prompt payers for shipping address. Allowable values:
0 – prompt for an address, but do not require one
1 – do not prompt for an address
2 – prompt for an address, and require one
The default is 0.

对于其他正在寻找此内容的人,因为 PayPal 的文档非常棒(咳嗽、咳嗽)。

不需要网络体验资料!

将 REST API V2 与 Javascript/JQuery 结合使用,并为订单关闭“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'
            }

        });
    },

当前正确答案已弃用 要解决新 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

要从当前(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');

感谢这里的示例代码:

以下是列出字段枚举的位置:

根据 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

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"
}

...对于创建订单的代码部分,应禁用任何运输选项。 请注意,您可能需要在其前添加一个逗号。

例如,我的 PHP 代码使用 PayPal 的标准结账集成(反过来使用智能按钮)创建订单,现在看起来像这样:

$order = $paypal->createOrder([
    "intent"=> "CAPTURE",
    "purchase_units"=> [
         [
            "amount"=> [
                "currency_code" => "GBP",
                "value"=> 4.99
            ],
             'description' => 'My product description',
        ],            
    ],               
    "application_context" => [
        "shipping_preference" => "NO_SHIPPING"
    ]
]);

@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;

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

暂无
暂无

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

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