还在手动造轮子?试试这款可以轻松集成多种支付渠道的工具! ...

打印 上一主题 下一主题

主题 895|帖子 895|积分 2685

大家好,我是 Java陈序员。
随着电商的兴起,各种支付也是蓬勃发展。
微信支付、支付宝支付、银联支付等各种支付方式可是深入到日常生活中。可以说,扫码支付给我们的生活带来了极大的便利。
同时,随着市场需求的变化,这也要求我们在企业开发中,需要集成第三方支付渠道!
我们在集成第三方支付渠道时,常规的操作是查阅官方文档、封装代码、测试联调等。
今天,给大家介绍一个已经封装好各种支付渠道的项目,开箱即用,我们就不用重复手动造轮子了!
项目介绍

IJPay 的宗旨是让支付触手可及。封装了微信支付、QQ 支付、支付宝支付、京东支付、银联支付、PayPal 支付等常用的支付方式以及各种常用的接口。
不依赖任何第三方 MVC 框架,仅仅作为工具使用简单快速完成支付模块的开发,开箱即用,可快速集成到系统中。
功能模块:

  • 微信支付: 支持多商户多应用,普通商户模式与服务商商模式当然也支持境外商户、同时支持 Api-v3 与 Api-v2 版本的接口
  • 个人微信支付: 微信个人商户,最低费率 0.38%,官方直连的异步回调通知
  • 支付宝支付: 支持多商户多应用,签名同时支持普通公钥方式与公钥证书方式
  • 银联支付: 全渠道扫码支付、微信 App 支付、公众号&小程序支付、银联 JS 支付、支付宝服务窗支付
  • PayPal 支付: 自动管理 AccessToken,极速接入各种常用的支付方式
项目安装

一次性添加所有支付方式的依赖
  1. <dependency>
  2.     <groupId>com.github.javen205</groupId>
  3.     <artifactId>IJPay-All</artifactId>
  4.     <version>latest-version</version>
  5. </dependency>
复制代码
或者选择某一个/多个支付方式的依赖,如:
支付宝支付
  1. <dependency>
  2.     <groupId>com.github.javen205</groupId>
  3.     <artifactId>IJPay-AliPay</artifactId>
  4.     <version>latest-version</version>
  5. </dependency>
复制代码
微信支付
  1. <dependency>
  2.     <groupId>com.github.javen205</groupId>
  3.     <artifactId>IJPay-WxPay</artifactId>
  4.     <version>latest-version</version>
  5. </dependency>
复制代码
更多支付方式依赖参考:
  1. https://javen205.gitee.io/ijpay/guide/maven.html#maven
复制代码
集成Demo

以支付宝支付为例。
引入依赖
  1. <dependency>
  2.     <groupId>com.github.javen205</groupId>
  3.     <artifactId>IJPay-AliPay</artifactId>
  4.     <version>latest-version</version>
  5. </dependency>
复制代码
初始化客户端配置信息
  1. AliPayApiConfig aliPayApiConfig = AliPayApiConfig.builder()
  2.     .setAppId(aliPayBean.getAppId())
  3.     .setAppCertPath(aliPayBean.getAppCertPath())
  4.     .setAliPayCertPath(aliPayBean.getAliPayCertPath())
  5.     .setAliPayRootCertPath(aliPayBean.getAliPayRootCertPath())
  6.     .setCharset("UTF-8")
  7.     .setPrivateKey(aliPayBean.getPrivateKey())  
  8.     .setAliPayPublicKey(aliPayBean.getPublicKey())
  9.     .setServiceUrl(aliPayBean.getServerUrl())
  10.     .setSignType("RSA2")
  11.     // 普通公钥方式
  12.     //.build();
  13.     // 证书模式
  14.     .buildByCert();   
  15.     // 或者
  16.     .setAppId(aliPayBean.getAppId())
  17.     .setAliPayPublicKey(aliPayBean.getPublicKey())
  18.     .setCharset("UTF-8")
  19.     .setPrivateKey(aliPayBean.getPrivateKey())
  20.     .setServiceUrl(aliPayBean.getServerUrl())
  21.     .setSignType("RSA2")
  22.     .build(); // 普通公钥方式
  23.     .build(appCertPath, aliPayCertPath, aliPayRootCertPath) // 2.3.0 公钥证书方式  
  24. AliPayApiConfigKit.setThreadLocalAppId(aliPayBean.getAppId()); // 2.1.2 之后的版本,可以不用单独设置
  25. AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig);
复制代码
参数说明:

  • appId: 应用编号
  • privateKey: 应用私钥
  • publicKey: 支付宝公钥,通过应用公钥上传到支付宝开放平台换取支付宝公钥(如果是证书模式,公钥与私钥在CSR目录)。
  • appCertPath: 应用公钥证书 (证书模式必须)
  • aliPayCertPath: 支付宝公钥证书 (证书模式必须)
  • aliPayRootCertPath: 支付宝根证书 (证书模式必须)
  • serverUrl: 支付宝支付网关
  • domain: 外网访问项目的域名,支付通知中会使用
多应用无缝切换:
从上面的初始化配置中,可以看到 IJPay 默认是使用当前线程中的 appId 对应的配置。
如果要切换应用可以调用 AliPayApiConfigKit.setThreadLocalAppId 来设置当前线程中的 appId, 实现应用的切换进而达到多应用的支持。
调用支付API

App 支付
  1. public AjaxResult appPay() {
  2.     try {
  3.         AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
  4.         model.setBody("测试数据-Java陈序员");
  5.         model.setSubject("Java陈序员 App 支付测试");
  6.         model.setOutTradeNo(StringUtils.getOutTradeNo());
  7.         model.setTimeoutExpress("15m");
  8.         model.setTotalAmount("0.01");
  9.         model.setPassbackParams("callback params");
  10.         model.setProductCode("QUICK_MSECURITY_PAY");
  11.         String orderInfo = AliPayApi.appPayToResponse(model, aliPayBean.getDomain() + NOTIFY_URL).getBody();
  12.         result.success(orderInfo);
  13.     } catch (AlipayApiException e) {
  14.         e.printStackTrace();
  15.         result.addError("system error:" + e.getMessage());
  16.     }
  17.     return result;
  18. }
复制代码
PC 支付
  1. public void pcPay(HttpServletResponse response) {
  2.     try {
  3.         String totalAmount = "0.01";
  4.         String outTradeNo = StringUtils.getOutTradeNo();
  5.         log.info("pc outTradeNo>" + outTradeNo);
  6.         String returnUrl = aliPayBean.getDomain() + RETURN_URL;
  7.         String notifyUrl = aliPayBean.getDomain() + NOTIFY_URL;
  8.         AlipayTradePagePayModel model = new AlipayTradePagePayModel();
  9.         model.setOutTradeNo(outTradeNo);
  10.         model.setProductCode("FAST_INSTANT_TRADE_PAY");
  11.         model.setTotalAmount(totalAmount);
  12.         model.setSubject("Java陈序员 PC 支付测试");
  13.         model.setBody("Java陈序员 PC 支付测试");
  14.         model.setPassbackParams("passback_params");
  15.         AliPayApi.tradePage(response, model, notifyUrl, returnUrl);
  16.     } catch (Exception e) {
  17.         e.printStackTrace();
  18.     }
  19. }
复制代码
手机网站支付
  1. public void wapPay(HttpServletResponse response) {
  2.     String body = "测试数据-Java陈序员";
  3.     String subject = "Java陈序员 Wap支付测试";
  4.     String totalAmount = "0.01";
  5.     String passBackParams = "1";
  6.     String returnUrl = aliPayBean.getDomain() + RETURN_URL;
  7.     String notifyUrl = aliPayBean.getDomain() + NOTIFY_URL;
  8.     AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
  9.     model.setBody(body);
  10.     model.setSubject(subject);
  11.     model.setTotalAmount(totalAmount);
  12.     model.setPassbackParams(passBackParams);
  13.     String outTradeNo = StringUtils.getOutTradeNo();
  14.     System.out.println("wap outTradeNo>" + outTradeNo);
  15.     model.setOutTradeNo(outTradeNo);
  16.     model.setProductCode("QUICK_WAP_PAY");
  17.     try {
  18.         AliPayApi.wapPay(response, model, returnUrl, notifyUrl);
  19.     } catch (Exception e) {
  20.         e.printStackTrace();
  21.     }
  22. }
复制代码
扫码支付
  1. public String tradePreCreatePay() {
  2.     String subject = "Java陈序员 支付宝扫码支付测试";
  3.     String totalAmount = "0.01";
  4.     String storeId = "123";
  5.     String notifyUrl = aliPayBean.getDomain() + "/aliPay/cert_notify_url";
  6.     AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
  7.     model.setSubject(subject);
  8.     model.setTotalAmount(totalAmount);
  9.     model.setStoreId(storeId);
  10.     model.setTimeoutExpress("15m");
  11.     model.setOutTradeNo(StringUtils.getOutTradeNo());
  12.     try {
  13.         String resultStr = AliPayApi.tradePrecreatePayToResponse(model, notifyUrl).getBody();
  14.         JSONObject jsonObject = JSONObject.parseObject(resultStr);
  15.         return jsonObject.getJSONObject("alipay_trade_precreate_response").getString("qr_code");
  16.     } catch (Exception e) {
  17.         e.printStackTrace();
  18.     }
  19.     return null;
  20. }
复制代码
单笔转账到支付宝账户
  1. public String transfer() {
  2.     String totalAmount = "0.01";
  3.     AlipayFundTransToaccountTransferModel model = new AlipayFundTransToaccountTransferModel();
  4.     model.setOutBizNo(StringUtils.getOutTradeNo());
  5.     model.setPayeeType("ALIPAY_LOGONID");
  6.     model.setPayeeAccount("gxthqd7606@sandbox.com");
  7.     model.setAmount(totalAmount);
  8.     model.setPayerShowName("测试退款");
  9.     model.setPayerRealName("沙箱环境");
  10.     model.setRemark("Java陈序员 测试单笔转账到支付宝");
  11.     try {
  12.         return AliPayApi.transferToResponse(model).getBody();
  13.     } catch (Exception e) {
  14.         e.printStackTrace();
  15.     }
  16.     return null;
  17. }
复制代码
其他支付方式集成可参考:
  1. https://github.com/Javen205/IJPay/tree/dev/IJPay-Demo-SpringBoot
复制代码
总结

可以说,目前 IJPay 集成了大部分主流的支付渠道。可以全部集成到项目中,也可以按需加载某一种、某几种支付渠道。
最后,贴上项目地址:
  1. https://github.com/Javen205/IJPay
复制代码
在线文档地址:
  1. https://javen205.gitee.io/ijpay/
复制代码
最后

推荐的开源项目已经收录到 GitHub 项目,欢迎 Star:
  1. https://github.com/chenyl8848/great-open-source-project
复制代码
或者访问网站,进行在线浏览:
  1. https://chencoding.top:8090/#/
复制代码
大家的点赞、收藏和评论都是对作者的支持,如文章对你有帮助还请点赞转发支持下,谢谢!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天空闲话

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表