问题描述
我的目的似乎类似于先前how to approve an order ID
发布的问题我已经实现了一个休息端点来完成订单支付,而无需使用重定向链接和默认的智能按钮生成
我正在使用沙盒环境和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",{
"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("[email protected]");
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;
}
我得到带有描述的响应对象
付款人尚未批准订单付款
如何直接使用我的方法批准订单?
解决方法
the smart button或重定向到v2 /结帐/订单approval_url
都是买方表示同意并批准PayPal付款的唯一两种选择。
到目前为止,智能按钮通常是最佳选择,因为它提供了现代的“上下文”(将网站加载在后台,并且不会将买家重定向到另一个可能不熟悉的页面) -并可能根据您configure the button的方式提供几种其他付款方式。