java处理paypal支付

Posted 漫长学习路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java处理paypal支付相关的知识,希望对你有一定的参考价值。

paypal流程有如下几步

1创建应用程序

2启用与palPal的连接

3应用评论

4构建按钮

5获取授权码

6获取访问令牌

7为access_token交换refresh_token

8获取客户信息

9测试集成

10上线

这里主要讲java验证 palpal支付,也就是5-9的步骤。

 

java验证paypal支付主要分为以下几步;

第一步,获取权限认证的token.

第二步,获取前端支付成功后返回的paymentId。并且拿去paypal查询订单信息。

第三步对订单信息进行校验。

 

1获取权限认证的token.

private static String getAccessToken() 
		try 
			URL url = new URL(TOKEN_URL);
			String authorization = clientId + ":" + secret;
			authorization = Base64.encodeBase64String(authorization.getBytes());

			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod("POST");// 提交模式
			// 设置请求头header
			conn.setRequestProperty("Accept", "application/json");
			conn.setRequestProperty("Accept-Language", "en_US");
			conn.setRequestProperty("Authorization", "Basic " + authorization);
			// conn.setConnectTimeout(10000);//连接超时 单位毫秒
			// conn.setReadTimeout(2000);//读取超时 单位毫秒
			conn.setDoOutput(true);// 是否输入参数
			String params = "grant_type=client_credentials";
			conn.getOutputStream().write(params.getBytes());// 输入参数

			InputStreamReader inStream = new InputStreamReader(conn.getInputStream());
			BufferedReader reader = new BufferedReader(inStream);
			StringBuilder result = new StringBuilder();
			String lineTxt = null;
			while ((lineTxt = reader.readLine()) != null) 
				result.append(lineTxt);
			
			reader.close();
			System.out.println("getAccessToken:" + result);
			PayPalToken palToken = JSONObject.parseObject(result.toString(), PayPalToken.class);
			return palToken.getAccess_token();
		 catch (Exception err) 
			err.printStackTrace();
		
		return null;
	

 

2获取前端支付成功后返回的paymentId。并且拿去paypal查询订单信息。

public String getPaymentDetails(String paymentId) 
		try 
			URL url = new URL(PAYMENT_DETAIL_TEST + paymentId);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod("GET");// 提交模式
			// 设置请求头header
			conn.setRequestProperty("Accept", "application/json");
			conn.setRequestProperty("Authorization", "Bearer " + getAccessToken());
			// conn.setConnectTimeout(10000);//连接超时 单位毫秒
			// conn.setReadTimeout(2000);//读取超时 单位毫秒
			InputStreamReader inStream = new InputStreamReader(conn.getInputStream());
			BufferedReader reader = new BufferedReader(inStream);
			StringBuilder result = new StringBuilder();
			String lineTxt = null;
			while ((lineTxt = reader.readLine()) != null) 
				result.append(lineTxt);
			
			reader.close();
			return result.toString();
		 catch (Exception err) 
			err.printStackTrace();
		
		return null;
	

 

返回后的消息如下


	"id": "PAYID-LV262LY1GF17006GU287063F",
	"intent": "sale",
	"state": "approved",
	"cart": "6G500886VN698753Y",
	"payer": 
		"payment_method": "paypal",
		"status": "VERIFIED",
		"payer_info": 
			"email": "zerotest@gmail.com",
			"first_name": "zero",
			"last_name": "zero",
			"payer_id": "RHDCTBPXH3LKG",
			"shipping_address": 
				"recipient_name": "zero zero"
			,
			"phone": "4083363521",
			"country_code": "US"
		
	,
	"transactions": [
		"amount": 
			"total": "0.02",
			"currency": "USD",
			"details": 
				"subtotal": "0.02",
				"shipping": "0.00",
				"insurance": "0.00",
				"handling_fee": "0.00",
				"shipping_discount": "0.00"
			
		,
		"payee": 
			"merchant_id": "YJFGW6CVTV9XS",
			"email": "leihuaping-facilitator@zerophil.com"
		,
		"description": "100粉钻",
		"item_list": 
			"shipping_address": 
				"recipient_name": "zero zero"
			
		,
		"related_resources": [
			"sale": 
				"id": "7N444941X3531852Y",
				"state": "completed",
				"amount": 
					"total": "0.02",
					"currency": "USD",
					"details": 
						"subtotal": "0.02",
						"shipping": "0.00",
						"insurance": "0.00",
						"handling_fee": "0.00",
						"shipping_discount": "0.00"
					
				,
				"payment_mode": "INSTANT_TRANSFER",
				"protection_eligibility": "ELIGIBLE",
				"protection_eligibility_type": "ITEM_NOT_RECEIVED_ELIGIBLE,UNAUTHORIZED_PAYMENT_ELIGIBLE",
				"transaction_fee": 
					"value": "0.02",
					"currency": "USD"
				,
				"parent_payment": "PAYID-LV262LY1GF17006GU287063F",
				"create_time": "2019-09-09T06:12:20Z",
				"update_time": "2019-09-09T06:12:20Z",
				"links": [
					"href": "https://api.sandbox.paypal.com/v1/payments/sale/7N444941X3531852Y",
					"rel": "self",
					"method": "GET"
				, 
					"href": "https://api.sandbox.paypal.com/v1/payments/sale/7N444941X3531852Y/refund",
					"rel": "refund",
					"method": "POST"
				, 
					"href": "https://api.sandbox.paypal.com/v1/payments/payment/PAYID-LV262LY1GF17006GU287063F",
					"rel": "parent_payment",
					"method": "GET"
				]
			
		]
	],
	"create_time": "2019-09-09T06:11:59Z",
	"update_time": "2019-09-09T06:12:20Z",
	"links": [
		"href": "https://api.sandbox.paypal.com/v1/payments/payment/PAYID-LV262LY1GF17006GU287063F",
		"rel": "self",
		"method": "GET"
	]

这里最简单的就是对state进行校验。state显示approved为成功。然后再跟进自己的业务对数据进行校验,一个简单的java版本支付校验就完成了。

以上是关于java处理paypal支付的主要内容,如果未能解决你的问题,请参考以下文章

Java PayPal支付接口,疑问求解答

使用 Paypal 或其他支付处理服务进行小额支付处理?

MVC Paypal 自适应支付

Paypal 与 java 的集成

Paypal 创建支付令牌 API 返回 422 无法处理的实体

PayPal 自适应支付与 Braintree 商家