#paypal #asp.net-core-mvc
Вопрос:
Я следил за интеграционными документами paypal https://developer.paypal.com/docs/checkout/reference/server-integration/set-up-transaction/
Проблема: я получил эту ошибку «Неперехваченная ошибка: Ожидалось, что идентификатор заказа будет передан по адресу https://www.sandbox.paypal.com/smart/buttons?style.компоновка=вертикальная»
Мой Код
public class CreateOrderSample
{
public async static Task<HttpResponse> CreateOrder(bool debug = true)
{
var request = new OrdersCreateRequest();
request.Prefer("return=representation");
request.RequestBody(BuildRequestBody());
//3. Call PayPal to set up a transaction
var response = await PayPalClient.client().Execute(request);
return response;
}
private static OrderRequest BuildRequestBody()
{
OrderRequest orderRequest = new OrderRequest()
{
CheckoutPaymentIntent = "CAPTURE",
ApplicationContext = new ApplicationContext
{
BrandName = "EXAMPLE INC",
LandingPage = "BILLING",
UserAction = "CONTINUE",
ShippingPreference = "SET_PROVIDED_ADDRESS"
},
PurchaseUnits = new List<PurchaseUnitRequest>
{
new PurchaseUnitRequest{
ReferenceId = "PUHF",
Description = "Sporting Goods",
CustomId = "CUST-HighFashions",
SoftDescriptor = "HighFashions",
AmountWithBreakdown = new AmountWithBreakdown
{
CurrencyCode = "USD",
Value = "230.00",
AmountBreakdown = new AmountBreakdown
{
ItemTotal = new Money
{
CurrencyCode = "USD",
Value = "180.00"
},
Shipping = new Money
{
CurrencyCode = "USD",
Value = "30.00"
},
Handling = new Money
{
CurrencyCode = "USD",
Value = "10.00"
},
TaxTotal = new Money
{
CurrencyCode = "USD",
Value = "20.00"
},
ShippingDiscount = new Money
{
CurrencyCode = "USD",
Value = "10.00"
}
}
},
Items = new List<Item>
{
new Item
{
Name = "T-shirt",
Description = "Green XL",
Sku = "sku01",
UnitAmount = new Money
{
CurrencyCode = "USD",
Value = "90.00"
},
Tax = new Money
{
CurrencyCode = "USD",
Value = "10.00"
},
Quantity = "1",
Category = "PHYSICAL_GOODS"
},
new Item
{
Name = "Shoes",
Description = "Running, Size 10.5",
Sku = "sku02",
UnitAmount = new Money
{
CurrencyCode = "USD",
Value = "45.00"
},
Tax = new Money
{
CurrencyCode = "USD",
Value = "5.00"
},
Quantity = "2",
Category = "PHYSICAL_GOODS"
}
},
ShippingDetail = new ShippingDetail
{
Name = new Name
{
FullName = "John Doe"
},
AddressPortable = new AddressPortable
{
AddressLine1 = "123 Townsend St",
AddressLine2 = "Floor 6",
AdminArea2 = "San Francisco",
AdminArea1 = "CA",
PostalCode = "94107",
CountryCode = "US"
}
}
}
}
};
return orderRequest;
}
}
public class PayPalClient
{
public static PayPalEnvironment environment()
{
return new SandboxEnvironment("PAYPAL-SANDBOX-CLIENT-ID", "PAYPAL-SANDBOX-CLIENT-SECRET");
}
public static HttpClient client()
{
return new PayPalHttpClient(environment());
}
public static HttpClient client(string refreshToken)
{
return new PayPalHttpClient(environment(), refreshToken);
}
public static String ObjectToJSONString(Object serializableObject)
{
MemoryStream memoryStream = new MemoryStream();
var writer = JsonReaderWriterFactory.CreateJsonWriter(
memoryStream, Encoding.UTF8, true, true, " ");
DataContractJsonSerializer ser = new DataContractJsonSerializer(serializableObject.GetType(), new DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true });
ser.WriteObject(writer, serializableObject);
memoryStream.Position = 0;
StreamReader sr = new StreamReader(memoryStream);
return sr.ReadToEnd();
}
}
Контроллер:
public class PayPalController : Controller
{
public IActionResult Index()
{
return View();
}
public async Task<Order> CreatePayaplTransaction()
{
var data = await CreateOrderSample.CreateOrder();
return data.Result<Order>();
}
}
Вид
PayPal.Кнопки({ CreateOrder: функция () { возврат выборки('/PayPal/CreatePayaplTransaction', { метод: 'post', заголовки: { "тип содержимого": "приложение/json" } }).затем(функция (res) { возвращает res.json(); }).затем(функция (данные) { console.log(data.Id); возвращение data.Id; // Используйте ключ, отправленный в ответе вашего сервера, например "идентификатор" или "токен". }); } }).визуализация('#paypal-кнопка-контейнер');
Комментарии:
1. Эта ошибка возникает, когда запрос на /PayPal/CreatePayaplTransaction не возвращает идентификатор, который можно прочитать. Что он на самом деле возвращает в своем ответе? Используйте сетевую вкладку инструментов разработчика вашего браузера для отладки и тестирования. Убедитесь, что ваш код получает и возвращает идентификатор.