如何在没有重定向或智能按钮的情况下批准 PayPal 订单 ID
How to approve a PayPal Order ID without a redirect or smart button
我的目的似乎与之前发布的这个问题相似
我已经实现了一个休息端点来完成订单支付而不使用重定向 link 和默认智能按钮生成
我正在使用沙箱环境和 PayPal 服务器端 SDK V2
所以我使用 API OrdersCreateRequest() 创建了一个订单,然后我得到了一个订单 ID
{
"id": "xxxxxxxxxxxxxxxx",
"status": "CREATED",
"links": [
{
"href": "https://api.sandbox.paypal.com/v2/checkout/orders/0XY49131JG183432Y",
"rel": "self",
"method": "GET"
},
{
"href": "https://www.sandbox.paypal.com/checkoutnow?token=0XY49131JG183432Y",
"rel": "approve",
"method": "GET"
},
{
"href": "https://api.sandbox.paypal.com/v2/checkout/orders/0XY49131JG183432Y",
"rel": "update",
"method": "PATCH"
},
{
"href": "https://api.sandbox.paypal.com/v2/checkout/orders/0XY49131JG183432Y/capture",
"rel": "capture",
"method": "POST"
}
]
}
我完全按照文档中的官方示例进行操作,但我无法授权订单
@PostMapping( "payWorkerWithPaypal/{paypalWorkerEmail}/{totalAmount}")
public Order payWorkerWithPaypal(@PathVariable("paypalWorkerEmail") String
paypalWorkerEmail,@PathVariable("totalAmount") String totalAmount) throws IOException {
Order order = null;
PayPalHttpClient client = new PayPalHttpClient(environment);
OrderRequest orderRequest = new OrderRequest();
orderRequest.checkoutPaymentIntent("CAPTURE");
List<PurchaseUnitRequest> purchaseUnitRequests = new ArrayList<PurchaseUnitRequest>();
PurchaseUnitRequest purchaseUnitRequest = new PurchaseUnitRequest();
purchaseUnitRequest.amountWithBreakdown(new
AmountWithBreakdown().currencyCode("USD").value(totalAmount));
Payee payee = new Payee();
payee.email(paypalWorkerEmail);
purchaseUnitRequest.payee(payee);
Payer payer = new Payer();
payer.email("outsourcingpaypal@gmail.com");
purchaseUnitRequests.add(purchaseUnitRequest);
orderRequest.purchaseUnits(purchaseUnitRequests);
orderRequest.payer(payer);
OrdersCreateRequest requestCreateOrder = new OrdersCreateRequest().requestBody(orderRequest);
try {
HttpResponse<Order> responseOrderCreated = client.execute(requestCreateOrder);
order = responseOrderCreated.result();
System.out.println("Order ID: " + order.id());
OrdersAuthorizeRequest requestAuthorizeRequest = new OrdersAuthorizeRequest(order.id());
HttpResponse<Order> responseAuthorizeOrder = client.execute(requestAuthorizeRequest);
order = responseAuthorizeOrder.result();
OrdersCaptureRequest requestCaptureOrder = new OrdersCaptureRequest(order.id());
HttpResponse<Order> responseCaptureOrder = client.execute(requestCaptureOrder);
order = responseCaptureOrder.result();
} catch (IOException ioe) { System.out.println(ioe.getMessage()); } return order;
}
我得到了带有描述的响应对象
Payer has not yet approved the Order for payment
如何使用我的方法直接批准订单?
the smart button 或重定向到 v2/checkout/orders approval_url
是买家表示同意并批准 PayPal 付款的仅有的两个选项。
智能按钮总体上是目前最好的选择,因为它提供了现代的“在上下文中”体验(让您的网站在后台加载,而不是将买家重定向到另一个可能不熟悉的网站)页)-- 以及可能提供多种替代付款方式,具体取决于您 configure the button.
我的目的似乎与之前发布的这个问题相似
我已经实现了一个休息端点来完成订单支付而不使用重定向 link 和默认智能按钮生成
我正在使用沙箱环境和 PayPal 服务器端 SDK V2
所以我使用 API OrdersCreateRequest() 创建了一个订单,然后我得到了一个订单 ID
{
"id": "xxxxxxxxxxxxxxxx",
"status": "CREATED",
"links": [
{
"href": "https://api.sandbox.paypal.com/v2/checkout/orders/0XY49131JG183432Y",
"rel": "self",
"method": "GET"
},
{
"href": "https://www.sandbox.paypal.com/checkoutnow?token=0XY49131JG183432Y",
"rel": "approve",
"method": "GET"
},
{
"href": "https://api.sandbox.paypal.com/v2/checkout/orders/0XY49131JG183432Y",
"rel": "update",
"method": "PATCH"
},
{
"href": "https://api.sandbox.paypal.com/v2/checkout/orders/0XY49131JG183432Y/capture",
"rel": "capture",
"method": "POST"
}
]
}
我完全按照文档中的官方示例进行操作,但我无法授权订单
@PostMapping( "payWorkerWithPaypal/{paypalWorkerEmail}/{totalAmount}")
public Order payWorkerWithPaypal(@PathVariable("paypalWorkerEmail") String
paypalWorkerEmail,@PathVariable("totalAmount") String totalAmount) throws IOException {
Order order = null;
PayPalHttpClient client = new PayPalHttpClient(environment);
OrderRequest orderRequest = new OrderRequest();
orderRequest.checkoutPaymentIntent("CAPTURE");
List<PurchaseUnitRequest> purchaseUnitRequests = new ArrayList<PurchaseUnitRequest>();
PurchaseUnitRequest purchaseUnitRequest = new PurchaseUnitRequest();
purchaseUnitRequest.amountWithBreakdown(new
AmountWithBreakdown().currencyCode("USD").value(totalAmount));
Payee payee = new Payee();
payee.email(paypalWorkerEmail);
purchaseUnitRequest.payee(payee);
Payer payer = new Payer();
payer.email("outsourcingpaypal@gmail.com");
purchaseUnitRequests.add(purchaseUnitRequest);
orderRequest.purchaseUnits(purchaseUnitRequests);
orderRequest.payer(payer);
OrdersCreateRequest requestCreateOrder = new OrdersCreateRequest().requestBody(orderRequest);
try {
HttpResponse<Order> responseOrderCreated = client.execute(requestCreateOrder);
order = responseOrderCreated.result();
System.out.println("Order ID: " + order.id());
OrdersAuthorizeRequest requestAuthorizeRequest = new OrdersAuthorizeRequest(order.id());
HttpResponse<Order> responseAuthorizeOrder = client.execute(requestAuthorizeRequest);
order = responseAuthorizeOrder.result();
OrdersCaptureRequest requestCaptureOrder = new OrdersCaptureRequest(order.id());
HttpResponse<Order> responseCaptureOrder = client.execute(requestCaptureOrder);
order = responseCaptureOrder.result();
} catch (IOException ioe) { System.out.println(ioe.getMessage()); } return order;
}
我得到了带有描述的响应对象
Payer has not yet approved the Order for payment
如何使用我的方法直接批准订单?
the smart button 或重定向到 v2/checkout/orders approval_url
是买家表示同意并批准 PayPal 付款的仅有的两个选项。
智能按钮总体上是目前最好的选择,因为它提供了现代的“在上下文中”体验(让您的网站在后台加载,而不是将买家重定向到另一个可能不熟悉的网站)页)-- 以及可能提供多种替代付款方式,具体取决于您 configure the button.