使用 PayPal API 并使用SDK 和下载中的名称-值对接口 PHP 源代码:简化与下载和 SDK 的集成。
我的问题类似于“删除(或预填充)PayPal Express Checkout 的地址详细信息”,但我根本不想要运费/地址或任何与运费相关的内容。
我在我的系统上保留了所有运输详细信息(即使有时运输甚至不适用并且不收取任何费用),我只想让用户通过 PayPal 付款,而不需要送货地址和运费。
如何禁用结帐的运输部分?
使用 PayPal API 并使用SDK 和下载中的名称-值对接口 PHP 源代码:简化与下载和 SDK 的集成。
我的问题类似于“删除(或预填充)PayPal Express Checkout 的地址详细信息”,但我根本不想要运费/地址或任何与运费相关的内容。
我在我的系统上保留了所有运输详细信息(即使有时运输甚至不适用并且不收取任何费用),我只想让用户通过 PayPal 付款,而不需要送货地址和运费。
如何禁用结帐的运输部分?
如果您使用较新的 API,您还可以传递 NOSHIPPING=1(不是 no_shipping)
有关 SetExpressCheckout 的所有可能参数的更多详细信息:
https://developer.paypal.com/docs/nvp-soap-api/nvp/
或在新的 REST API 中查找支付体验
对于寻找这个的其他人,因为 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'
}
});
},
嘿 Ergec,只需传递no_shipping
值为 的参数1
。
来自 PayPal 的文档:
no_shipping 不要提示付款人提供送货地址。允许值: 0 – 提示输入地址,但不需要 1 – 不提示输入地址 2 – 提示输入地址,并且需要一个 默认值为 0。
当前的正确答案已弃用。要解决新 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
@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;
有用。在这里,即使我们不收取任何费用,我们也可以使用送货地址。
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"
]
]);