码字不易,开源更不易,点赞收藏关注,多多支持

开源地址  paypal-demo: java 对接 paypal 的案例,下载项目,注册paypal账号,拿到秘钥,即可使用

效果图

准备环境

1、注册账号   PayPal外贸_外贸收款_为卖家定制的服务和支付方案 - PayPal中国(我这里注册的是个人账户)

2、注册paypal开发者账号  https://developer.paypal.com/home (用上一步的账号)

3、创建两个测试账号  https://developer.paypal.com/dashboard/accounts (两个账号分别是公司账号,个人账号,设置密码,金额等信息,不要用他默认的,否则卡出翔来)

4、创建的账号可以在这里来登录进去,查看金额、支付等信息

(https://www.sandbox.paypal.com/signin)

4、得到clientId和秘钥  (https://developer.paypal.com/dashboard/applications/sandbox)

代码部分

PayPalController
package com.japhet.paypaldemo.controller;import com.japhet.paypaldemo.config.PaypalPaymentIntent;
import com.japhet.paypaldemo.config.PaypalPaymentMethod;
import com.paypal.api.payments.*;
import com.paypal.base.rest.APIContext;
import com.paypal.base.rest.PayPalRESTException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;@RestController
public class PayPalController {private Logger log = LoggerFactory.getLogger(getClass());@Autowiredprivate APIContext apiContext;@Value("${pay.paypal.PAYPAL_SUCCESS_PAGE}")private String PAYPAL_SUCCESS_PAGE;@Value("${pay.paypal.PAYPAL_CANCEL_PAGE}")private String PAYPAL_CANCEL_PAGE;@Value("${pay.paypal.PAYPAL_SUCCESS_URL}")private String PAYPAL_SUCCESS_URL;@Value("${pay.paypal.PAYPAL_CANCEL_URL}")private String PAYPAL_CANCEL_URL;@PostMapping("/payPal")public String toPay(){//我这里写死了 1BigDecimal payAmount = new BigDecimal(1);try {Payment payment = createPayment(payAmount,"USD",PaypalPaymentMethod.paypal,PaypalPaymentIntent.sale,"购买商品信息~",PAYPAL_CANCEL_URL,PAYPAL_SUCCESS_URL);log.info("=========================================");log.info(payment.toString());log.info("=========================================");//保存paypal预支付信息//修改订单金额 & 支付的流水号log.info("支付金额:"+payAmount);log.info("订单号:"+payment.getId());for (Links links : payment.getLinks()) {if (links.getRel().equals("approval_url")) {return links.getHref();}}} catch (PayPalRESTException e) {//保存paypal预支付异常信息 .......log.error(e.getMessage());}return "index";}/*** PayPal 支付成功 回调* @param response* @param paymentId* @param payerId*/@GetMapping("/callback/success")public void successPay(HttpServletResponse response, @RequestParam("paymentId") String paymentId, @RequestParam("PayerID") String payerId) {log.info("================================payPal 回调成功==================================="+paymentId);log.info("================================payPal 回调成功==================================="+payerId);try {Payment payment = executePayment(paymentId,payerId);log.info("================================payment===================================");log.info(payment.toString());log.info("================================payment===================================");if (payment.getState().equals("approved")) {//修改订单状态response.sendRedirect(PAYPAL_SUCCESS_PAGE);}else{response.sendRedirect(PAYPAL_CANCEL_PAGE);}} catch (PayPalRESTException e) {log.info("!!!!!!!!!!!!!!支付回调失败 异常!!!!!!!!!!!!!!");log.error(e.getMessage());log.info("!!!!!!!!!!!!!!支付回调失败 异常!!!!!!!!!!!!!!");} catch (IOException e) {e.printStackTrace();}}/*** paypal 回调 取消支付* @param response* @throws IOException*/@GetMapping("/callback/cancel")public void cancelPay(HttpServletResponse response) throws IOException {log.info("================================payPal 取消支付===================================");log.info("================================payPal 取消支付===================================");response.sendRedirect(PAYPAL_CANCEL_PAGE);}@RequestMapping("/success")public String success(){return "success";}@RequestMapping("/cancel")public String cancel(){return "cancel";}/**** @param total* @param currency* @param method* @param intent* @param description* @param cancelUrl* @param successUrl* @return* @throws PayPalRESTException*/public Payment createPayment(BigDecimal total, String currency, PaypalPaymentMethod method, PaypalPaymentIntent intent,String description, String cancelUrl, String successUrl) throws PayPalRESTException {Amount amount = new Amount();amount.setCurrency(currency);amount.setTotal(String.format("%.2f", total));Transaction transaction = new Transaction();transaction.setDescription(description);transaction.setAmount(amount);List<Transaction> transactions = new ArrayList<>();transactions.add(transaction);Payer payer = new Payer();payer.setPaymentMethod(method.toString());Payment payment = new Payment();payment.setIntent(intent.toString());payment.setPayer(payer);payment.setTransactions(transactions);RedirectUrls redirectUrls = new RedirectUrls();redirectUrls.setCancelUrl(cancelUrl);redirectUrls.setReturnUrl(successUrl);payment.setRedirectUrls(redirectUrls);return payment.create(apiContext);}/**** @param paymentId* @param payerId* @return* @throws PayPalRESTException*/public Payment executePayment(String paymentId, String payerId) throws PayPalRESTException {Payment payment = new Payment();payment.setId(paymentId);PaymentExecution paymentExecute = new PaymentExecution();paymentExecute.setPayerId(payerId);return payment.execute(apiContext, paymentExecute);}}

java 对接 paypal支付相关推荐

  1. java对接PayPal支付-自动续费功能

    一. java对接PayPal支付(v2). 讲了PayPal v2:checkout-sdk 的对接过程 二. java对接PayPal支付 (添加物流跟踪信息). 讲了PayPal添加物流信息 的 ...

  2. java对接PayPal支付(v2)

    java对接PayPal支付 我们公司最近开通了网上支付功能,国内选择对接支付宝和微信,国外选择对接paypal, 今天我先将paypal对接方式记录下来,后面会记录微信和支付宝(本人比较懒,微信和支 ...

  3. java对接PayPal支付(ipn中文乱码解决)

    IPN验证有中文的时候会出现乱码,是由于encoding设置导致的,请通过以下步骤将encoding设置改为UTF-8应该就能解决: 1)登录您的PayPal账号后打开这个链接进入设置页面: http ...

  4. JAVA对接支付宝支付(超详细,一看就懂)

    Java对接支付宝支付 更多内容 冷文博客: 传送门 引入 为什么要发这篇帖子呢?原因很简单,就是因为在一个稍稍正规一点的应用上都会有支付这个环节,我们日常的在线支付如今包括支付宝,微信钱包,QQ钱包 ...

  5. Java集成PayPal支付

    Java集成PayPal支付 1.申请账号 浏览器中输入:https://www.paypal.com,点击 "注册" 选择 "企业账号" ,信息可以随意填写 ...

  6. java对接微信支付收不到支付通知问题(亲身实践)

    问题描述: 用java对接微信支付时,统一下单接口正常.但是用户扫码付款成功后,设置用于回调的notify_url对应的接口并没有收到请求(这个url测试过,是正常的且外网能访问的). 由于官方文档没 ...

  7. paypal html5 支付,uniapp 对接 paypal支付 (h5,app端)

    由于工作需要,需要对接国外的PayPal支付,前端框架用的又是UNIAPP,众所周知UNIAPP国内的生态环境还可以,但是到了国外嘛  嘿嘿  懂得都懂. uniapp app对接Paypal支付 作 ...

  8. java对接支付宝支付

    java对接支付宝支付演示 现在有不少的项目都需要对接支付,这里主要是进行讲解对接支付宝H5支付 废话不多说 上代码 引入支付宝官方的sdk <!-- https://mvnrepository ...

  9. Android java对接建行支付SDK

    Android java 对接建行支付 准备工作 创建常量类 编写支付工具类 遇到的坑 用到的工具类 准备工作 在对接建行支付之前,需要准备好这几个东西:商户代码.商户柜台代码.分行代码.公钥 创建常 ...

最新文章

  1. linux nm工具 查看静动态库导出函数
  2. Machine Learning - Andrew Ng on Coursera (Week 5)
  3. 百度世界-“框天地”
  4. Manjaro 软件源及软件管理相关操作【pacman、pacman-mirrors】整理
  5. JAVA设计模式 - 抽象工厂模式
  6. Html 点透镂空遮罩,swift 实现遮罩部分区域“挖洞”效果和点击事件穿透
  7. u盘读写测试_aigo U395固态U盘评测,速度可能会吓到你,价格很良心
  8. hql中获取前一天的数据_如何使用DNS和SQLi从数据库中获取数据样本
  9. flyway(数据库迁移工具)
  10. 斗罗大陆壁纸图片高清小舞146集八段摔杨无敌
  11. PS2键盘编程详细资料
  12. 《利用python进行数据分析》读书笔记
  13. 写论文CAJ如何提取文字?
  14. 购买你的青春和一切ZT
  15. 《Spring Boot 实战派》--13.集成NoSQL数据库,实现Elasticsearch和Solr搜索引擎
  16. python excelwriter保存路径_从Excel中解救你!如何用Python实现报表自动化
  17. [python] Jupyter Notebook 画股票折线图
  18. 探索脑机接口技术的潜在医学应用
  19. quartus2安装和使用的坑
  20. 很多时候我们所需要的是目标

热门文章

  1. android模拟器被覆盖,教大家如何顺利恢复雷电安卓模拟器的数据
  2. ASP.NET MVC3与ExtJS结合建站笔记(要点)
  3. 数分面试题 - 常见面试题1
  4. 苹果4K调色非编系统的一些事儿
  5. python给人脸带上口罩(简单版)
  6. python cv2.log()
  7. C++字符类型总结区别wchar_t,char,WCHAR
  8. 人力资源后端项目_03-Mybatis-Plus之代码生成器
  9. linux关于ssh免密登录、known_hosts文件
  10. 【Bugs】RuntimeError CUDA out of memory