【问题标题】:Disable shipping address option in PayPal Express Checkout在 PayPal Express Checkout 中禁用送货地址选项
【发布时间】:2011-05-16 01:23:08
【问题描述】:

使用 PayPal API 并使用来自SDKs and Downloads: Simplify Integrations with Downloads and SDKs 的名称-值对接口 PHP 源代码。

我的问题类似于“Removing (or prefilling) the address details for PayPal Express Checkout”,但我根本不想要运费/地址或任何与运费相关的内容。

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

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

【问题讨论】:

    标签: php paypal paypal-sandbox


    【解决方案1】:

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

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

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

    或在新的 REST API 中查找 Payment experience

    【讨论】:

    • 我在这里添加了完整的请求示例,以开始交易、提交和阅读付款详情,并在贝宝网站和商家交易历史记录中显示商品详情。 stackoverflow.com/a/16638936/185565
    • 看来这也适用于旧 api,至少它在沙箱中的行为如此。
    【解决方案2】:

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

    来自 PayPal 的documentation

    no_shipping
    
    不要提示付款人提供送货地址。允许值:
    0 – 提示输入地址,但不需要
    1 – 不提示输入地址
    2 – 提示输入地址,并且需要一个
    默认值为 0。

    【讨论】:

    • 我将 no_shipping=1 放入 $nvpstr 但它仍然要求运输。我刚刚注意到它也在增加税收。所有的价格都已经含税了,所以我也需要去掉税项。请帮忙!!
    • 好的,这就是我所做的和工作的。它不再增加运输成本和税收。刚刚在 ReviewOrder 中注释掉了当前的 $nvpstr 变量并将这一行 $nvpstr = "&AMT=" 。 $金额。 "&ReturnUrl=".$returnURL."&CANCELURL=".$cancelURL ."&CURRENCYCODE=" . $货币代码类型; $amount 是从修改后的 SetExpressCheckout.php 发送的。移除所有输入框,只留下paymentType、currencyCodeType和amount。
    • 是的。 7 年后,尝试新的 NOSHIPPING =1 无效。试过 no_shipping = 1,它工作。 2017 年 8 月。
    • 2017 年 9 月,本月在 paypal 发生了一些变化,我的一些付款开始显示地址无效,但地址很好,所以我尝试了 &address_override=1&no_shipping=1,它成功了!是的,我在 paypal.com/cgi-bin/webscr 使用旧 API?
    • 提供的链接已废弃
    【解决方案3】:

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

    无需网络体验配置文件!

    将 REST API V2 与 Javascript/JQuery 结合使用并为订单关闭“运送至”,这是正确的代码示例:

        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'
                }
    
            });
        },
    

    【讨论】:

    • 非常感谢您!拯救了我的一天!你有没有机会指出你从哪里得到这个?
    • 我写的,从他们可怕的文档中闪闪发光
    • 感谢分享!我被困了好一阵子。几乎不可能不登陆标记为 'Legacy' 的文档,这些文档不起作用。我当然没有发现application_context。拯救了我的一天。
    【解决方案4】:

    当前的正确答案是已弃用。要解决新 API 中的问题,我们应该创建带有所需参数的 Payment 网络体验配置文件资源,并将其附加到请求 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

    【讨论】:

    【解决方案5】:

    要从当前 (2019) 网络客户端 .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');
    

    感谢这里的示例代码:

    这里列出了字段枚举:

    【讨论】:

    • 对于 createOrder() 它没有显示地址字段但交易失败
    • 我实际上并没有尝试使用createOrder(),因此对该调用的实现没有任何见解;或者如果我在这里描述的解决方案实际上是可能的。我将通过新帖子分享您的问题,您可以在其中提供您尝试实施的代码 sn-p(s) 以及任何相关说明。 stackoverflow.com/help/minimal-reproducible-example
    • 我正在尝试为禁用地址的贝宝智能按钮实现编写代码。 developer.paypal.com/demo/checkout/#/pattern/client 这是我试图在点击信用卡时禁用地址的确切代码
    • 这里给出了相同的解决方案:stackoverflow.com/questions/55631779/… 但问题是付款被拒绝,没有地址。
    【解决方案6】:

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

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

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

    【讨论】:

      【解决方案7】:

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

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

      【讨论】:

      • 我认为如果我们不设置 paymentType 参数就可以了
      猜你喜欢
      • 2017-04-17
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 2015-10-05
      • 2012-05-30
      • 2013-08-09
      • 2019-07-11
      • 2012-05-18
      相关资源
      最近更新 更多