引言:

同类文借鉴链接:http://blog.csdn.net/change_on/article/details/73881791(对此博主万分感谢)

Paypal账号注册网址:https://www.paypal.com

Paypal开发者网址:https://developer.paypal.com

Paypal支付演示网址:https://demo.paypal.com

一、注册公司交易账户,也可以作为开发者账号使用。

国际注册网址:https://www.paypal.com

外语不太好的,可以登录这个网址,亲切的汉语。https://www.paypal.com/c2/webapps/mpp/home

二、创建两个测试sandbox账号

这个具体可以参考引言中的同类文借鉴链接:http://blog.csdn.net/change_on/article/details/73881791

三、选择您所需的API(本文为REST-REST-API)

API页面https://developer.paypal.com/reference/

四、安装REST SDK,配置环境。

根据https://developer.paypal.com/docs/api/quickstart/中REST SDK 快速入门步骤操作即可。

创建应用链接https://developer.paypal.com/developer/applications,生成所需的Client ID和Secret

五、写代码喽

https://developer.paypal.com/docs/api/payments/此链接有请求体和响应体详情。
https://github.com/paypal/PayPal-Java-SDK此链接可以下载java源码例码哦。
https://developer.paypal.com/docs/api/quickstart/若不是java语言的可以在此链接附加信息中选择对应语言。

六、本人代码

1、pom.xml依赖

<dependency>
<groupId>com.paypal.sdk</groupId>
<artifactId>rest-api-sdk</artifactId>
<version>1.14.0</version>
</dependency>

2、支付接口

import java.util.ArrayList;
import java.util.List;
import org.springframework.context.annotation.Bean;
import com.paypal.api.payments.Amount;
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 PaypalPayment {

public static final String clientID = "你的clientID";//sandbox
public static final String clientSecret = "你的clientSecret";//sandbox
public static final String mode = "sandbox";//sandbox 沙箱or live生产
public static final String cancelUrl = "https://网站域名/paypal/cancelUrl";//你的真实取消地址
public static final String returnUrl = "https://网站域名/paypal/returnUrl";//你的paypal返回调用地址
public static final String currency = "EUR";
public static final String description = "北极光供订单";
public static final String method = "paypal";
public static final String intent = "sale";
public static APIContext apiContext = new APIContext(clientID, clientSecret, mode);

/**Create Payment Object
     * @param total--金额
     * @throws PayPalRESTException 
     */
public static Payment createPayment(String total) throws PayPalRESTException {

Payer payer = new Payer();
payer.setPaymentMethod(method);
Amount amount = new Amount();
amount.setTotal(total);
amount.setCurrency(currency);

Transaction transaction = new Transaction();
transaction.setAmount(amount);
transaction.setDescription(description);
List<Transaction> transactions = new ArrayList<Transaction>();
transactions.add(transaction);

RedirectUrls redirectUrls = new RedirectUrls();
redirectUrls.setCancelUrl(cancelUrl);
redirectUrls.setReturnUrl(returnUrl);

Payment payment = new Payment();
payment.setPayer(payer);
payment.setTransactions(transactions);
payment.setRedirectUrls(redirectUrls);
payment.setIntent(intent);
System.out.println(payment.create(apiContext).toString());
return payment.create(apiContext);
}

public static 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);
    }

}

3、控制器调用

@Controller
@RequestMapping(value="/paypal")
public class PaypalCommonController extends BaseController {

/**Sofort 支付接口
* @param String orderID;
* @return String paypalPayUrl;
* @throws Exception
*/
@RequestMapping(value="/payment", produces="application/json;charset=UTF-8")
@ResponseBody
public String sofortPayment(String orderID)throws Exception{
String total = "0.01";
Payment payment = PaypalPayment.createPayment(total);
   for(Links links : payment.getLinks()){
      if(links.getRel().equals("approval_url")){
      return links.getHref();//客户付款登陆地址
      }
   }
return "system/pay/paypal/failedUrl";
}

@RequestMapping(value="/cancelUrl", produces="application/json;charset=UTF-8")
    public String cancelPay(){
    return "system/pay/paypal/cancelUrl";
    }

/**客户登陆付款后paypal返回路径参数示例
*http://域名/paypal/returnUrl?paymentId=PAY-339981922W118522HLJLQF3A&token=EC-9K664484GE997692K&PayerID=LEBMCXS5RQ7AU
*/
    @RequestMapping(value="/returnUrl", produces="application/json;charset=UTF-8")
    @ResponseBody
public String successPay(@RequestParam("paymentId") String paymentId, @RequestParam("PayerID") String payerId){
   try {
       Payment payment = PaypalPayment.executePayment(paymentId, payerId);
       if(payment.getState().equals("approved")){
           return "success";
       }
   } catch (PayPalRESTException e) {
       logger.error(e.getMessage());
   }
   return "system/pay/paypal/failed";
}

七、测试、生产

先用创建的沙箱测试账号测试,没有问题后,把clientID 、clientSecret换成生产的,mode 由 sandbox换成 live。

Paypal REST API Java 版 PC端商城支付接口对接。相关推荐

  1. JAVA集成PC端银联支付(含代码和图文详解)

    准备 一.内网穿透工具:我这里用花生壳做演示. 二.环境:(以银联支付目前的要求):1.JDK1.6以上:2.Tomcat6.0以上. 获取证书和代码 第一步: 注册登录银联支付:银联支付开放平台官网 ...

  2. PC端支付宝支付接口的调用(沙箱环境测试最全文档)

    https://blog.csdn.net/qq_43591363/article/details/104591261?depth_1-utm_source=distribute.pc_relevan ...

  3. jQuery实现PC端商城购物车模块基本功能(每个商品的小计和合计都会根据添加和删除的操作来动态计算)

    jQuery实现PC端商城购物车模块基本功能 先上效果图: 因为主要是想练习jQuery的使用,所以页面CSS部分比较简陋,有需要的话,大家在参考代码时,可以自己再完善下CSS部分的代码,让购物车页面 ...

  4. Axure通用版电商后台管理系统+通用版移动端商城商户端+电商管理系统+对账管理+消息管理+内容管理+运营管理、会员管理、订单管理、促销管理、财务管理+通用版商城前后端电商系统+电商用户数据大屏看板

    作品介绍:Axure通用版电商后台管理系统+通用版移动端商城商户端+电商管理系统+对账管理+消息管理+内容管理+运营管理.会员管理.订单管理.促销管理.财务管理+通用版商城前后端电商系统+电商用户数据 ...

  5. 淘宝商品详情API接口(网页版,APP端二合一接口)

    接口名称:淘宝商品详情API接口(网页版,APP端二合一接口) 接口状态:已完成 接口地址:http://gjx.sd1118.com/api/product/info 请求方式:GET Conten ...

  6. Vue-elementUI实现PC端商城购物车计算

    Vue-elementUI实现PC端商城购物车计算 Vue-elementUI实现PC端商城购物车计算,最重要的就是[computed]里面的计算,用来算出勾选的商品的总价 文章目录 Vue-elem ...

  7. Java版支付宝手机网站支付

    进入开放平台的文档中心查看手机网站支付官方文档是必须的,了解其中的内容和流程,我这里只是简略写了用官方Demo在沙箱环境下的测试步骤. 首先进入开放平台的文档中心的SDK&Demo下载Java ...

  8. 微信小程序接入微信支付(三):小程序端调用支付接口

    微信小程序调用支付接口官方文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5 在上一节中 ...

  9. java项目PC端调用条码打印机打印条码/吊牌(JS实现)

    因为项目需要,开发一个使用条码打印机打印商品条形码和吊牌的功能,首先先上个最后的结果图 条码打印和吊牌打印 过程中遇到了一些坑,先简单说明一下 1:我这边使用的是佳博的条码打印机,最开始到佳博的开发平 ...

最新文章

  1. 黑盒测试方法之因果图法
  2. 服务器ldap认证配置
  3. Android 使用CornerPathEffect绘制圆角矩形
  4. Android log打印不出来
  5. main函数的参数详解,它们是何时何处传入的?(main函数的参数值是从操作系统命令行上获得的)
  6. 计算机网络基础知识,仅此一篇足矣
  7. Pygame实现记录事件到文本中
  8. 微信小程序开发 使用高德地图(精准一些)
  9. 基于HTML5的WebGL呈现A星算法的3D可视化
  10. c 初始化char**_C/C++内存模型
  11. 中国象棋源码c语言,中国象棋C语言源代码.doc
  12. android打开视频噔_Android、iOS不可错过!10款堪称神器的高质量APP,请低调使用...
  13. 4.VEH(向量化异常处理)
  14. Udacity 无人驾驶仿真环境搭建实现自动驾驶小车
  15. xp计算机管理员桌面文件没有权限,电脑中右击文件没有以管理员身份运行选项怎么办...
  16. 5G混战:改变世界不需要论资排辈
  17. APM32F103 RTC内部时钟源秒中断例程测试
  18. python文献检索_文献检索与下载
  19. 微信小程序(第二十四章)- 数据交互前置
  20. python中eps是什么意思_python怎么导出eps文件

热门文章

  1. 实现折叠的uitableviewcell效果
  2. 安卓模拟器(手机)安装抓包工具(fiddler)证书及手机设置代理后无法上网?
  3. 反向传播算法公式推导,神经网络的推导
  4. nltk中文分句_如何使用nltk进行中文分词?
  5. 面向对象编程原则(06)——依赖倒转原则
  6. 2022年最值得去的100家互联网大厂排名出来了
  7. Python 气象数据分析
  8. jdbc连接字符集为us7ascii的oracle数据库乱码解决办法
  9. 求某年某月1日是星期几C语言,用c语言调用函数编程,1990年1月1日是星期一 要求输入某年某月某日,输出它是星期几...
  10. 网络笔记:路由选路原则