通过使用SDK和下载: 简化集成和下载中提供的PayPal API和Name-Value Pair接口PHP源代码,处理PayPal API相关技术。
我的问题与“删除(或预填)PayPal Express Checkout的地址详细信息”类似,但我不想涉及任何有关运输的费用、地址或任何相关的内容。
我将所有运输细节保存在我的系统上(有时甚至不需要运输,也没有任何费用),我只希望用户通过PayPal支付而无需提供运输地址和运输费用。
如何禁用结账过程中的运输部分?
通过使用SDK和下载: 简化集成和下载中提供的PayPal API和Name-Value Pair接口PHP源代码,处理PayPal API相关技术。
我的问题与“删除(或预填)PayPal Express Checkout的地址详细信息”类似,但我不想涉及任何有关运输的费用、地址或任何相关的内容。
我将所有运输细节保存在我的系统上(有时甚至不需要运输,也没有任何费用),我只希望用户通过PayPal支付而无需提供运输地址和运输费用。
如何禁用结账过程中的运输部分?
如果您正在使用较新的API,也可以传递NOSHIPPING=1(而不是no_shipping)
有关SetExpressCheckout中所有可能参数的详细信息,请参见此处:
https://developer.paypal.com/docs/nvp-soap-api/nvp/
或在新的REST API中查找Payment experience
对于其他需要此信息的人,因为PayPal的文档非常好(咳咳)。
不需要网络经验档案!
使用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'
}
});
},
application_context
。救了我的一天。 - Chuck Taylor嘿,Ergec,只需传递带有no_shipping
参数,并将值设置为1
。
来自PayPal的文档:
no_shipping
不要提示付款人输入送货地址。可接受的值: 0-提示输入地址,但不需要 1-不提示输入地址 2-提示输入地址,并要求输入 默认值为0。
当前正确的答案已经过时。为了在新的API中修复这个问题,我们应该创建一个带有必要参数的支付网页体验配置文件资源并将其附加到支付请求中。
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
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()
中使用这个方法,因此对于使用该调用的实现没有任何见解;或者是否可以使用我在这里描述的解决方案。我建议您通过一个新帖子来分享您的问题,在那里您可以提供您正在尝试实现的代码片段以及任何相关说明。https://stackoverflow.com/help/minimal-reproducible-example - Gene BoPayPal API V2 的文档,目前是最新版本,看起来在过去一年左右得到了很大的改进,文档中列出了以下内容:
shipping_preference
向客户显示送货地址。 使客户可以选择在 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"
]
]);
CreateWebProfile.php
创建一个基于Web的个人资料。$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;
它可以工作。即使我们没有收取任何费用,我们也可以使用送货地址。