PaypalUtil PayPal付款JAVA工具类

Maven坐标

	<!-- PayPal -->
	<dependency>
		<groupId>com.paypal.sdk</groupId>
		<artifactId>rest-api-sdk</artifactId>
		<version>LATEST</version>
	</dependency>

JAVA工具类源码

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.paypal.api.payments.Amount;
import com.paypal.api.payments.Details;
import com.paypal.api.payments.Item;
import com.paypal.api.payments.ItemList;
import com.paypal.api.payments.Links;
import com.paypal.api.payments.Payer;
import com.paypal.api.payments.Payment;
import com.paypal.api.payments.PaymentExecution;
import com.paypal.api.payments.RedirectUrls;
import com.paypal.api.payments.Transaction;
import com.paypal.base.rest.APIContext;
import com.paypal.base.rest.PayPalRESTException;

public class PaypalUtil {
	
	// sandbox
	private final static String payPalClientID = "paypal客户端ID";
	private final static String payPalClientSecret = "paypal客户端密钥";
	private final static String payPalMode = "sandbox";
	// live
//	private final static String payPalClientID = "paypal客户端ID";
//	private final static String payPalClientSecret = "paypal客户端密钥";
//	private final static String payPalMode = "live";

	/**
	 * 获取Paypal付款链接
	 * @param orderId
	 * @param orderName
	 * @param amt
	 * @param returnUrl
	 * @return
	 */
	public static String getPayLink(String orderId, String orderName, String amt, String returnUrl) {
		
		String payLink = "";
		
		// PayPal init
		APIContext apiContext = new APIContext(payPalClientID, payPalClientSecret, payPalMode);
		
		// Set payment details
		Details details = new Details();
		details.setShipping("0");
		details.setSubtotal(amt);
		details.setTax("0");

		// Payment amount
		Amount amount = new Amount();
		amount.setCurrency("USD");
		// Total must be equal to sum of shipping, tax and subtotal.
		amount.setTotal(amt);
		amount.setDetails(details);

		// Transaction information
		Transaction transaction = new Transaction();
		transaction.setAmount(amount);
		transaction.setDescription(orderName);
		
		// ItemList information
		ItemList itemList = new ItemList();
		List<Item> items = new ArrayList<Item>();
		Item item = new Item();
		item.setName(orderName);
		item.setDescription(orderName);
		item.setCurrency("USD");
		item.setQuantity("1");
		item.setTax("0");
		item.setPrice(amt);
		items.add(item);
		itemList.setItems(items);
		transaction.setItemList(itemList);

		// Add transaction to a list
		List<Transaction> transactions = new ArrayList<Transaction>();
		transactions.add(transaction);

		// Add payer details
		Payer payer = new Payer();
		payer.setPaymentMethod("paypal");

		// Add payment details
		Payment payment = new Payment();
		payment.setIntent("sale");
		payment.setPayer(payer);
		payment.setTransactions(transactions);

		// Add redirect URLs
		RedirectUrls redirectUrls = new RedirectUrls();
		redirectUrls.setCancelUrl(returnUrl);
		redirectUrls.setReturnUrl(returnUrl + orderId);
		payment.setRedirectUrls(redirectUrls);
		
		// Create payment
		try {
		  Payment createdPayment = payment.create(apiContext);

		  Iterator<Links> links = createdPayment.getLinks().iterator();
		  while (links.hasNext()) {
		    Links link = links.next();
		    if (link.getRel().equalsIgnoreCase("approval_url")) {
		    	// REDIRECT USER TO link.getHref()
		    	payLink = link.getHref();
		    }
		  }
		} catch (PayPalRESTException e) {
		    System.err.println(e.getDetails());
		}
		
		return payLink;
	}
	
	/**
	 * 获取Paypal付款状态
	 * @param paymentId
	 * @param payerId
	 * @return
	 */
	public static String getPayState(String paymentId, String payerId) {
		String payState = "";
		// PayPal init
		APIContext apiContext = new APIContext(payPalClientID, payPalClientSecret, payPalMode);	
		Payment payment = new Payment();
		payment.setId(paymentId);
		PaymentExecution paymentExecution = new PaymentExecution();
		paymentExecution.setPayerId(payerId);
		try {
		  	Payment createdPayment = payment.execute(apiContext, paymentExecution);
		  	payState = createdPayment.getState();
//		  	BigDecimal paymentAmt = new BigDecimal(createdPayment.getTransactions().get(0).getAmount().getTotal());
//		  	String emailAddress = createdPayment.getPayer().getPayerInfo().getEmail();
		} catch (PayPalRESTException e) {
			System.err.println(e.getDetails());
		}
		return payState;
	}
}