All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ijpay.paypal.PayPalApi Maven / Gradle / Ivy


package com.ijpay.paypal;

import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.ContentType;
import com.ijpay.core.IJPayHttpResponse;
import com.ijpay.core.kit.HttpKit;
import com.ijpay.core.kit.PayKit;
import com.ijpay.paypal.accesstoken.AccessToken;
import com.ijpay.paypal.accesstoken.AccessTokenKit;
import com.ijpay.paypal.enums.PayPalApiUrl;

import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

/**
 * 

IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付等常用的支付方式以及各种常用的接口。

* *

不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。

* *

IJPay 交流群: 723992875、864988890

* *

Node.js 版: https://gitee.com/javen205/TNWX

* *

PayPal Api

* * @author Javen */ public class PayPalApi { /** * 获取接口请求的 URL * * @param payPalApiUrl {@link PayPalApiUrl} 支付 API 接口枚举 * @param isSandBox 是否是沙箱环境 * @return {@link String} 返回完整的接口请求URL */ public static String getReqUrl(PayPalApiUrl payPalApiUrl, boolean isSandBox) { return (isSandBox ? PayPalApiUrl.SANDBOX_GATEWAY.getUrl() : PayPalApiUrl.LIVE_GATEWAY.getUrl()) .concat(payPalApiUrl.getUrl()); } /** * 获取 AccessToken * * @param config {@link PayPalApiConfig} 支付配置 * @return {@link IJPayHttpResponse} 请求返回的结果 */ public static IJPayHttpResponse getToken(PayPalApiConfig config) { Map headers = new HashMap<>(3); headers.put("Accept", ContentType.JSON.toString()); headers.put("Content-Type", ContentType.FORM_URLENCODED.toString()); headers.put("Authorization", "Basic ".concat(Base64.encode((config.getClientId().concat(":").concat(config.getSecret())).getBytes(StandardCharsets.UTF_8)))); Map params = new HashMap<>(1); params.put("grant_type", "client_credentials"); return post(getReqUrl(PayPalApiUrl.GET_TOKEN, config.isSandBox()), params, headers); } /** * 创建订单 * * @param config {@link PayPalApiConfig} 支付配置 * @param data 请求参数 * @return {@link IJPayHttpResponse} 请求返回的结果 */ public static IJPayHttpResponse createOrder(PayPalApiConfig config, String data) { AccessToken accessToken = AccessTokenKit.get(config.getClientId()); return post(getReqUrl(PayPalApiUrl.CHECKOUT_ORDERS, config.isSandBox()), data, getBaseHeaders(accessToken)); } /** * 更新订单 * * @param config {@link PayPalApiConfig} 支付配置 * @param id 订单号 * @param data 请求参数 * @return {@link IJPayHttpResponse} 请求返回的结果 */ public static IJPayHttpResponse updateOrder(PayPalApiConfig config, String id, String data) { AccessToken accessToken = AccessTokenKit.get(config.getClientId()); String url = getReqUrl(PayPalApiUrl.CHECKOUT_ORDERS, config.isSandBox()).concat("/").concat(id); return patch(url, data, getBaseHeaders(accessToken)); } /** * 查询订单 * * @param config {@link PayPalApiConfig} 支付配置 * @param orderId 订单号 * @return {@link IJPayHttpResponse} 请求返回的结果 */ public static IJPayHttpResponse queryOrder(PayPalApiConfig config, String orderId) { AccessToken accessToken = AccessTokenKit.get(config.getClientId()); String url = getReqUrl(PayPalApiUrl.CHECKOUT_ORDERS, config.isSandBox()).concat("/").concat(orderId); return get(url, null, getBaseHeaders(accessToken)); } /** * 确认订单 * * @param config {@link PayPalApiConfig} 支付配置 * @param id 订单号 * @param data 请求参数 * @return {@link IJPayHttpResponse} 请求返回的结果 */ public static IJPayHttpResponse captureOrder(PayPalApiConfig config, String id, String data) { AccessToken accessToken = AccessTokenKit.get(config.getClientId()); String url = String.format(getReqUrl(PayPalApiUrl.CAPTURE_ORDER, config.isSandBox()), id); return post(url, data, getBaseHeaders(accessToken)); } /** * 查询确认的订单 * * @param config {@link PayPalApiConfig} 支付配置 * @param captureId 订单号 * @return {@link IJPayHttpResponse} 请求返回的结果 */ public static IJPayHttpResponse captureQuery(PayPalApiConfig config, String captureId) { AccessToken accessToken = AccessTokenKit.get(config.getClientId()); String url = String.format(getReqUrl(PayPalApiUrl.CAPTURE_QUERY, config.isSandBox()), captureId); return get(url, null, getBaseHeaders(accessToken)); } /** * 退款 * * @param config {@link PayPalApiConfig} 支付配置 * @param captureId 订单号 * @param data 请求参数 * @return {@link IJPayHttpResponse} 请求返回的结果 */ public static IJPayHttpResponse refund(PayPalApiConfig config, String captureId, String data) { AccessToken accessToken = AccessTokenKit.get(config.getClientId()); String url = String.format(getReqUrl(PayPalApiUrl.REFUND, config.isSandBox()), captureId); return post(url, data, getBaseHeaders(accessToken)); } /** * 查询退款 * * @param config {@link PayPalApiConfig} 支付配置 * @param id 订单号 * @return {@link IJPayHttpResponse} 请求返回的结果 */ public static IJPayHttpResponse refundQuery(PayPalApiConfig config, String id) { AccessToken accessToken = AccessTokenKit.get(config.getClientId()); String url = String.format(getReqUrl(PayPalApiUrl.REFUND_QUERY, config.isSandBox()), id); return get(url, null, getBaseHeaders(accessToken)); } /** * post 请求 * * @param url 请求 url * @param params {@link Map} 请求参数 * @param headers {@link Map} 请求头 * @return {@link IJPayHttpResponse} 请求返回的结果 */ public static IJPayHttpResponse post(String url, Map params, Map headers) { return HttpKit.getDelegate().post(url, params, headers); } /** * get 请求 * * @param url 请求 url * @param params {@link Map} 请求参数 * @param headers {@link Map} 请求头 * @return {@link IJPayHttpResponse} 请求返回的结果 */ public static IJPayHttpResponse get(String url, Map params, Map headers) { return HttpKit.getDelegate().get(url, params, headers); } /** * post 请求 * * @param url 请求 url * @param data {@link String} 请求参数 * @param headers {@link Map} 请求头 * @return {@link IJPayHttpResponse} 请求返回的结果 */ public static IJPayHttpResponse post(String url, String data, Map headers) { return HttpKit.getDelegate().post(url, data, headers); } /** * patch 请求 * * @param url 请求 url * @param data {@link String} 请求参数 * @param headers {@link Map} 请求头 * @return {@link IJPayHttpResponse} 请求返回的结果 */ public static IJPayHttpResponse patch(String url, String data, Map headers) { return HttpKit.getDelegate().patch(url, data, headers); } public static Map getBaseHeaders(AccessToken accessToken) { return getBaseHeaders(accessToken, PayKit.generateStr(), null, null); } public static Map getBaseHeaders(AccessToken accessToken, String payPalRequestId, String payPalPartnerAttributionId, String prefer) { if (accessToken == null || StrUtil.isEmpty(accessToken.getTokenType()) || StrUtil.isEmpty(accessToken.getAccessToken())) { throw new RuntimeException("accessToken is null"); } Map headers = new HashMap<>(3); headers.put("Content-Type", ContentType.JSON.toString()); headers.put("Authorization", accessToken.getTokenType().concat(" ").concat(accessToken.getAccessToken())); if (StrUtil.isNotEmpty(payPalRequestId)) { headers.put("PayPal-Request-Id", payPalRequestId); } if (StrUtil.isNotEmpty(payPalPartnerAttributionId)) { headers.put("PayPal-Partner-Attribution-Id", payPalPartnerAttributionId); } if (StrUtil.isNotEmpty(prefer)) { headers.put("Prefer", prefer); } return headers; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy