سؤال

العمل مع API PayPal واستخدام رموز مصدر واجهة PHP واجهة PHP من SDKs والتنزيلات: تبسيط التكامل مع التنزيلات و SDKs.

سؤالي مشابه لـ "إزالة (أو المسبق) تفاصيل العنوان لـ PayPal Express Checkout"لكنني لا أريد تكلفة الشحن/العنوان أو أي شيء يتعلق بالشحن على الإطلاق.

أحتفظ بجميع تفاصيل الشحن على نظامي (حتى في بعض الأحيان لا يتم تطبيق الشحن ولا يوجد أي رسوم مقابل ذلك) وأريد فقط أن يدفع المستخدم من خلال PayPal دون عنوان الشحن وتكلفة الشحن.

كيف يمكنني تعطيل جزء الشحن من الخروج؟

هل كانت مفيدة؟

المحلول

إذا كنت تستخدم واجهة برمجة التطبيقات الأحدث ، فيمكنك أيضًا تمرير noshipping = 1 (لا no_shipping)

مزيد من التفاصيل حول جميع المعلمات الممكنة إلى setExpressCheckout هنا:

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

أو البحث عن تجربة الدفع في API REST الجديد

نصائح أخرى

يا إيرجك ، فقط تمرير على طول no_shipping المعلمة ذات قيمة 1.

من 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.

الجواب الصحيح الحالي هو فاسق. لإصلاح المشكلة في 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

قم بإنشاء ملف تعريف ويب بناءً على المثال الموجود في 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

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;

إنها تعمل. هنا يمكننا أيضًا استخدام عنوان الشحن على الرغم من أننا لا نفرض أي مبلغ.

لحل هذا من Current (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');

بفضل رمز المثال هنا:

هنا حيث يتم سرد التعداد الميداني:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top