如何将买家重定向到paypal sdk中的批准链接

问题描述 投票:0回答:1

我正在将 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;
        }

    }

非常感谢任何帮助,谢谢。

javascript spring-boot paypal paypal-sandbox paypal-rest-sdk
1个回答
0
投票

重定向是一种古老的集成模式,早于 PayPal JS SDK。 JS SDK 集成不使用重定向。使用 JS SDK 的目的是避免从您的网站重定向,并使其在后台保持打开状态。

当点击 JS SDK 按钮时,会调用其

createOrder
回调函数。该函数应该发布到您的后端并接收至少包含 Order
id
值的响应(来自创建订单 API 调用响应,如您记录的响应),然后最终返回该值。

然后,JS SDK 使用

id

 值打开上下文/弹出批准窗口。 
https://developer.paypal.com/demo/checkout/#/pattern/server 有集成的交互式演示

© www.soinside.com 2019 - 2024. All rights reserved.