jfinal整合IJPay paypal支付
这里写目录标题
- 环境准备
- 1.注册paypal账户
- 2.登录开发者中心
- 3.创建沙箱账户
- 4.在沙箱模式创建一个app,平台默认创建好了一个
- 4.1填写信息
- 4.2绑定某个沙箱账号
- 4.3Client ID及Secret
- 支付代码
- 1.pom
- 2.实例化配置
- 3.支付订单
- 3.1用sandbox的personal的账号登录,并支付
- 4.支付成功&失败
- 5.退款
环境准备
1.注册paypal账户
PayPal官方
2.登录开发者中心
PayPal开发者中心
3.创建沙箱账户
Business为收款账号,Personal为付款账号,平台默认创建好了两个账号
这里显示的 账户和密码,支付的时候用
4.在沙箱模式创建一个app,平台默认创建好了一个
4.1填写信息
类型:
Merchant-仅为自己收款
Platform-作为平台收款,可分账给卖家
4.2绑定某个沙箱账号
4.3Client ID及Secret
进入app详细页面,查看Client ID及Secret(后续需填写到代码中)
支付代码
1.pom
<dependency><groupId>com.github.javen205</groupId><artifactId>IJPay-All</artifactId><version>2.9.3</version></dependency>
2.实例化配置
public PayPalApiConfig getConfig() {PayPalApiConfig config = new PayPalApiConfig();config.setClientId(payPalBean.getClientId());config.setClientSecret(payPalBean.getSecret());config.setSandBox(payPalBean.getSandBox());config.setDomain(payPalBean.getDomain());PayPalApiConfigKit.setThreadLocalApiConfig(config);return config;
}
3.支付订单
private final static String RETURN_URL = "/center/pay/order/successUrl";private final static String CANCEL_URL = "/center/pay/order/cancelUrl";
/*** @return void* @params []* @Author* @Date* @Description: 支付订单*/public void index() {String id = get("id");if (StrKit.isBlank(id)) {//re("订单id未提供");return;}BusOrder target = BusOrder.dao.template("order.find", Kv.by("id", id)).findFirst();if (target == null) {//re("订单不存在");return;}String pay_method = target.getPayMethod();try {PayPalApiConfig config = getConfig();//参数请求参数文档 https://developer.paypal.com/docs/api/orders/v2/#orders_createMap<String, Object> dataMap = new HashMap<>();dataMap.put("intent", "CAPTURE");//不改ArrayList<Map<String, Object>> list = new ArrayList<>();Map<String, Object> amount = new HashMap<>();amount.put("currency_code", "USD");//美元double actualPrice = NumberUtil.mul(target.getActualPrice() + "", "1").doubleValue();amount.put("value", actualPrice);//实际付款Map<String, Object> itemMap = new HashMap<>();itemMap.put("amount", amount);list.add(itemMap);dataMap.put("purchase_units", list);Map<String, String> applicationContext = new HashMap<>();applicationContext.put("cancel_url", config.getDomain().concat(CANCEL_URL) + "?id=" + target.getId() + "&user=" + getHeader("userCode"));//失败跳转地址applicationContext.put("return_url", config.getDomain().concat(RETURN_URL));//成功后跳转地址applicationContext.put("brand_name", "test");//品牌名称//applicationContext.put("logo_url", "");//付款方式徽标的 URLdataMap.put("application_context", applicationContext);String data = JSONUtil.toJsonStr(dataMap);log.info(data);IJPayHttpResponse resData = PayPalApi.createOrder(config, data);log.info(resData.toString());if (resData.getStatus() == 201) {String resultStr = resData.getBody();cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(resultStr);//System.out.println(jsonObject);target.setOrderThirdId(jsonObject.getStr("id"));target.update();JSONArray links = jsonObject.getJSONArray("links");for (int i = 0; i < links.size(); i++) {JSONObject item = links.getJSONObject(i);String rel = item.getStr("rel");String href = item.getStr("href");if ("approve".equalsIgnoreCase(rel)) {// redirect(href);rsPara("支付地址获取成功", Kv.by("href", href));//支付地址 提交给前端return;}}}re("支付失败");return;} catch (Exception e) {e.printStackTrace();}}
3.1用sandbox的personal的账号登录,并支付
4.支付成功&失败
//支付成功public void successUrl() {getPageStore("orderResult");String token = get("token");String payerId = get("PayerID");BusOrder target = BusOrder.dao.template("order.find", Kv.by("order_third_id", token)).findFirst();//确认付款log.info("token:" + token);log.info("payerId:" + payerId);PayPalApiConfig config = getConfig();IJPayHttpResponse response = PayPalApi.captureOrder(config, token, "");com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(response.getBody());if (response.getStatus() == 201 && jsonObject.getString("status").equals("COMPLETED")) {target.setPayTime(DateUtil.now());target.setCallbackJson(response.getBody());target.setState("2");target.update();rs("支付成功,跳转页面");redirect(config.getDomain() + "/center/order/getOrders");return;}setAttr("status", response.getStatus());render("/order/result.html");}//未支付 返回public void cancelUrl() {//String readData = HttpKit.readData(getRequest());/* System.out.println(readData);rs(readData);*/// PayPalApiConfig config = getConfig();String userCode = get("user");BusUser log_user = Redis.use().get(RedisHeader.USER_LOGIN_CODE + userCode);if (log_user == null) {//re("");render("/");return;}String id = get("id");BusOrder target = BusOrder.dao.template("order.find", Kv.by("id", id)).findFirst();/*String token = get("token");BusOrder target = BusOrder.dao.template("order.find", Kv.by("order_third_id", token)).findFirst();*/setAttr("orderObj", target);getPageStore("orderDetail");render("/order/order_detail.html");}
5.退款
/*** @return void* @params []* @Author* @Date* @Description: 退款订单*/public void refund() {com.alibaba.fastjson.JSONObject obj = getAttr("obj");String id = obj.getString("id");String refund_note = obj.getString("refund_note");BusOrder target = BusOrder.dao.template("order.find", Kv.by("id", id)).findFirst();if (target == null) {re("订单不存在");return;}try {com.alibaba.fastjson.JSONObject callbackJson = com.alibaba.fastjson.JSONObject.parseObject(target.getCallbackJson());//支付的时候给的jsonString captureId = callbackJson.getJSONArray("purchase_units").getJSONObject(0).getJSONObject("payments").getJSONArray("captures").getJSONObject(0).getString("id");PayPalApiConfig config = getConfig();Map<String, Object> map = new HashMap<>();String invoice_id = PayKit.generateStr();map.put("invoice_id", invoice_id);//退款编号map.put("note_to_payer", refund_note);//退款原因Map<String, String> amount = new HashMap<>();double v = NumberUtil.mul(target.getActualPrice() + "", "1").doubleValue();amount.put("value", v + "");amount.put("currency_code", "USD");map.put("amount", amount);String data = JSONUtil.toJsonStr(map);log.info("refund data:" + data);IJPayHttpResponse response = PayPalApi.refund(config, captureId, data);log.info(response.toString());if (response.getStatus() == 201) {target.setRefundTime(DateUtil.now());target.setState("5");target.setRefundNote(refund_note);target.setRefundInvoice(invoice_id);target.update();rs("Refund success");//redirect(config.getDomain() + "/center/order/getOrders");return;} else {re("Refund failure ");}return;} catch (Exception e) {e.printStackTrace();}}
jfinal整合IJPay paypal支付相关推荐
- 若依分离版整合IJpay实现第三方支付-(微信支付篇_v2)
若依分离版整合IJpay实现第三方支付-(微信支付篇_v2) IJpay官网 https://javen205.gitee.io/ijpay/ 文章目录 若依分离版整合IJpay实现第三方支付-(微信 ...
- php paypal源码,PHP整合PayPal支付
简单整理一下PHP项目整合PayPal支付功能. 一.表单的构建: 二.IPN验证部分 class paypal { var $ipn_data = array(); // array contain ...
- 「开源系统」IJPay 让支付触手可及封装了微信支付宝等支付
介绍语 本号主要是Java常用关键技术点,通用工具类的分享:以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+d ...
- Android下集成Paypal支付
近期项目需要研究paypal支付,官网上的指导写的过于复杂,可能是老外的思维和中国人不一样吧.难得是发现下面这篇文章: http://www.androidhive.info/2015/02/andr ...
- 聚合支付、单商户多商户支付、微信/支付宝/PayPal支付流程、支付政策法规
目录 一.聚合支付 聚合支付的基本概念 如何选择合适的支付模式 政策相关 常见的聚合支付平台 二.多商户和单商户 多商户单商户区别 多商户入驻流程 多商户模式中常见的支付流程 普通支付 合单支付 留个 ...
- IJPay 让支付触手可及-文中有视频
IJPay 让支付触手可及 GitHub:https://github.com/Javen205/IJPay Gitee:http://gitee.com/Javen205/IJPay JPay 是对 ...
- python paypal支付接口开发
(第一次接触支付,理解可能也不是很深,欢迎批评指正) paypal是目前全球最大的在线支付工具,就像国内的支付宝一样,是一个基于买卖双方的第三方平台. PayPal API是基于HTTP的restfu ...
- JFinal整合CKFinder
2019独角兽企业重金招聘Python工程师标准>>> 使用JFinal对之前的系统进行重构,老系统使用了CKEditor+CKFinder编辑器,发现在web.xml中配置Conn ...
- PAYPAL 支付,sandbox测试的时候遇到异常:请求被中止: 未能创建 SSL/TLS 安全通道,以及解决方法。...
场景描述: 我公司的网站之前就已经开发好了下单支持paypal支付,当然,这个是其他同事开发的.前段时间,主管让我在另一个场景开发支持使用paypal支付,当时花了些时间看看关于paypal代码,然后 ...
最新文章
- Php基础数学运算篇
- 白话生成对抗网络 GAN,50 行代码玩转 GAN 模型!【附源码】
- 获取的输入内容,没有被P标签包裹的文本和元素进行处理
- 1005 矩阵快速幂
- mysql 5.7 源码编译安装_mysql-5.7.*源码编译安装
- java下载文件名乱码的解决方法
- webstorm如何支持markdown
- 从事三年java开发后, 我打算转人工智能
- 【秋招面经】全网最全大华前端题目总结
- ARM-LINUX平台下的文本文件打印机打印
- 数学建模更新7(ARCH和GARCH模型)
- C++打印机首选项设置
- jeecgboot自动关闭本页标签Tab页
- Mandriva 2009 Spring PWP中3D桌面的使用
- computed vue 不 触发_vue computed 无法触发 set
- 计算机打字失灵,电脑键盘在打字的时候出现按键失灵的原因是什么
- 计算机服务器机房 消防灭火,服务器机房消防系统和维护
- 数独解题思路——求解数独
- 大师系列彼•奇层查股
- java浏览器无界面后台截屏工具
热门文章
- Python 可视化如何配色?这个工具你值得拥有
- 在大厂呆过多年的35岁“大龄”程序猿,聊聊35岁以上的程序猿们都干什么去了
- ClasspathResource路径问题解决
- 防火墙、IDS(入侵检测系统)与双机热备
- 第七天 位置参数 变量运算if case || find locate compress
- 购买2019最佳性价比Android智能手表(smart watch)
- 安卓开发:怎样实时在百度地图上绘制运动轨迹?
- 《王者荣耀》皮肤个性动作涉嫌抄袭
- 芯准TSN系统的测试与验证(1)——测试环境配置
- java bidi_Java Bidi toString()用法及代码示例