我正在将 paypal 支付集成到 Web 应用程序中,并且使用 JS/React 作为客户端应用程序,使用 Java spring Boot 作为服务器后端应用程序,我能够创建订单并获得响应:
{id=XXXXXXXXXXXX, status=CREATED, links=[{href=https://api.sandbox.paypal.com/v2/checkout/orders/XXXXXXXXXXXX, rel=self, method=GET}, {href=https://www.sandbox.paypal.com/checkoutnow?token=XXXXXXXXXXXX, rel=approve, method=GET}, {href=https://api.sandbox.paypal.com/v2/checkout/orders/XXXXXXXXXXXX, rel=update, method=PATCH}, {href=https://api.sandbox.paypal.com/v2/checkout/orders/XXXXXXXXXXXX/capture, rel=capture, method=POST}]}
但我不知道如何将买家重定向到审批页面???
这是我的代码:
JavaScript:
createOrder(data, actions, cartInfo) {
const totalAmount = parseFloat(cartInfo.total).toFixed(2);
console.log('############### ', totalAmount);
// Order is created on the server and the order id is returned
return fetch("http://127.0.0.1:8102/paypal/create-order", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
// use the "body" param to optionally pass additional order information
// like product skus and quantities
body: JSON.stringify({
intent: "CAPTURE",
purchase_units: [
{
items: cartInfo.items,
amount: {
currency_code: 'CAD',
value: `${totalAmount}`,
},
return_url:"http://127.0.0.1:8102/paypal/create-order"
},
],
}),
})
.then((response) => response.json()).catch(error => {
console.log('ERROR: ', error);
})
.then((order) => {
console.log('ORDER ID ', order.id);
return order.id
} )
}
onApprove(data, actions) {
console.log('CREATE ORDER DATA ONAPPROVE: ', data);
// Order is captured on the server
return fetch("http://127.0.0.1:8102/paypal/capture-order", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
orderID: data.orderID
})
})
.then((response) => {
console.log('$$$$$$$ RESPONSE: ' , response);
response.json();
}
);
}
后端代码:
@PostMapping(value = "/create-order", produces = MediaType.APPLICATION_JSON_VALUE)
public Object createOrder(HttpServletRequest request, @RequestBody String order) {
RestTemplate restTemplate = new RestTemplate();
String accessToken = "";
try {
accessToken = tokenHelper.generateAccessToken();
} catch (JSONException e) {
throw new RuntimeException(e);
}
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer " + accessToken);
headers.add("Content-Type", "application/json");
headers.add("Accept", "application/json");
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<String>(order, headers);
try {
ResponseEntity<Object> response = restTemplate.exchange(baseUrl.concat("/v2/checkout/orders"), HttpMethod.POST, entity, Object.class);
if (response.getStatusCode() == HttpStatus.CREATED) {
log.info("ORDER CAPTURE");
System.out.println("$$$ RESPONSE BODY " + response.getBody());
return response.getBody();
} else {
log.error("FAILED CAPTURING ORDER");
return "Unavailable to get CAPTURE ORDER, STATUS CODE " + response.getStatusCode();
}
} catch (HttpClientErrorException ex) {
log.error(ex.getMessage());
return null;
}
}
非常感谢任何帮助,谢谢。