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

这篇具有很好参考价值的文章主要介绍了还在手动造轮子?试试这款可以轻松集成多种支付渠道的工具!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,我是 Java陈序员

随着电商的兴起,各种支付也是蓬勃发展。

微信支付、支付宝支付、银联支付等各种支付方式可是深入到日常生活中。可以说,扫码支付给我们的生活带来了极大的便利。

同时,随着市场需求的变化,这也要求我们在企业开发中,需要集成第三方支付渠道!

我们在集成第三方支付渠道时,常规的操作是查阅官方文档、封装代码、测试联调等。

今天,给大家介绍一个已经封装好各种支付渠道的项目,开箱即用,我们就不用重复手动造轮子了!

项目介绍

IJPay 的宗旨是让支付触手可及。封装了微信支付、QQ 支付、支付宝支付、京东支付、银联支付、PayPal 支付等常用的支付方式以及各种常用的接口。

不依赖任何第三方 MVC 框架,仅仅作为工具使用简单快速完成支付模块的开发,开箱即用,可快速集成到系统中。

功能模块:

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

项目安装

一次性添加所有支付方式的依赖

<dependency>
    <groupId>com.github.javen205</groupId>
    <artifactId>IJPay-All</artifactId>
    <version>latest-version</version>
</dependency>

或者选择某一个/多个支付方式的依赖,如:
支付宝支付

<dependency>
    <groupId>com.github.javen205</groupId>
    <artifactId>IJPay-AliPay</artifactId>
    <version>latest-version</version>
</dependency>

微信支付

<dependency>
    <groupId>com.github.javen205</groupId>
    <artifactId>IJPay-WxPay</artifactId>
    <version>latest-version</version>
</dependency>

更多支付方式依赖参考:

https://javen205.gitee.io/ijpay/guide/maven.html#maven

集成Demo

以支付宝支付为例。

引入依赖

<dependency>
    <groupId>com.github.javen205</groupId>
    <artifactId>IJPay-AliPay</artifactId>
    <version>latest-version</version>
</dependency>

初始化客户端配置信息

AliPayApiConfig aliPayApiConfig = AliPayApiConfig.builder() 
    .setAppId(aliPayBean.getAppId())
    .setAppCertPath(aliPayBean.getAppCertPath())
    .setAliPayCertPath(aliPayBean.getAliPayCertPath())
    .setAliPayRootCertPath(aliPayBean.getAliPayRootCertPath())
    .setCharset("UTF-8")
    .setPrivateKey(aliPayBean.getPrivateKey())  
    .setAliPayPublicKey(aliPayBean.getPublicKey())
    .setServiceUrl(aliPayBean.getServerUrl())
    .setSignType("RSA2")
    // 普通公钥方式
    //.build();
    // 证书模式
    .buildByCert();   
    // 或者 
    .setAppId(aliPayBean.getAppId())
    .setAliPayPublicKey(aliPayBean.getPublicKey())
    .setCharset("UTF-8")
    .setPrivateKey(aliPayBean.getPrivateKey())
    .setServiceUrl(aliPayBean.getServerUrl())
    .setSignType("RSA2")
    .build(); // 普通公钥方式 
    .build(appCertPath, aliPayCertPath, aliPayRootCertPath) // 2.3.0 公钥证书方式  

AliPayApiConfigKit.setThreadLocalAppId(aliPayBean.getAppId()); // 2.1.2 之后的版本,可以不用单独设置 
AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig);

参数说明:

  • appId: 应用编号
  • privateKey: 应用私钥
  • publicKey: 支付宝公钥,通过应用公钥上传到支付宝开放平台换取支付宝公钥(如果是证书模式,公钥与私钥在CSR目录)。
  • appCertPath: 应用公钥证书 (证书模式必须)
  • aliPayCertPath: 支付宝公钥证书 (证书模式必须)
  • aliPayRootCertPath: 支付宝根证书 (证书模式必须)
  • serverUrl: 支付宝支付网关
  • domain: 外网访问项目的域名,支付通知中会使用

多应用无缝切换:

从上面的初始化配置中,可以看到 IJPay 默认是使用当前线程中的 appId 对应的配置。

如果要切换应用可以调用 AliPayApiConfigKit.setThreadLocalAppId 来设置当前线程中的 appId, 实现应用的切换进而达到多应用的支持。

调用支付API

App 支付

public AjaxResult appPay() {
    try {
        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
        model.setBody("测试数据-Java陈序员");
        model.setSubject("Java陈序员 App 支付测试");
        model.setOutTradeNo(StringUtils.getOutTradeNo());
        model.setTimeoutExpress("15m");
        model.setTotalAmount("0.01");
        model.setPassbackParams("callback params");
        model.setProductCode("QUICK_MSECURITY_PAY");
        String orderInfo = AliPayApi.appPayToResponse(model, aliPayBean.getDomain() + NOTIFY_URL).getBody();
        result.success(orderInfo);
    } catch (AlipayApiException e) {
        e.printStackTrace();
        result.addError("system error:" + e.getMessage());
    }
    return result;
}

PC 支付

public void pcPay(HttpServletResponse response) {
    try {
        String totalAmount = "0.01";
        String outTradeNo = StringUtils.getOutTradeNo();
        log.info("pc outTradeNo>" + outTradeNo);

        String returnUrl = aliPayBean.getDomain() + RETURN_URL;
        String notifyUrl = aliPayBean.getDomain() + NOTIFY_URL;
        AlipayTradePagePayModel model = new AlipayTradePagePayModel();

        model.setOutTradeNo(outTradeNo);
        model.setProductCode("FAST_INSTANT_TRADE_PAY");
        model.setTotalAmount(totalAmount);
        model.setSubject("Java陈序员 PC 支付测试");
        model.setBody("Java陈序员 PC 支付测试");
        model.setPassbackParams("passback_params");

        AliPayApi.tradePage(response, model, notifyUrl, returnUrl);
    } catch (Exception e) {
        e.printStackTrace();
    }

}

手机网站支付

public void wapPay(HttpServletResponse response) {
    String body = "测试数据-Java陈序员";
    String subject = "Java陈序员 Wap支付测试";
    String totalAmount = "0.01";
    String passBackParams = "1";
    String returnUrl = aliPayBean.getDomain() + RETURN_URL;
    String notifyUrl = aliPayBean.getDomain() + NOTIFY_URL;

    AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
    model.setBody(body);
    model.setSubject(subject);
    model.setTotalAmount(totalAmount);
    model.setPassbackParams(passBackParams);
    String outTradeNo = StringUtils.getOutTradeNo();
    System.out.println("wap outTradeNo>" + outTradeNo);
    model.setOutTradeNo(outTradeNo);
    model.setProductCode("QUICK_WAP_PAY");

    try {
        AliPayApi.wapPay(response, model, returnUrl, notifyUrl);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

扫码支付

public String tradePreCreatePay() {
    String subject = "Java陈序员 支付宝扫码支付测试";
    String totalAmount = "0.01";
    String storeId = "123";
    String notifyUrl = aliPayBean.getDomain() + "/aliPay/cert_notify_url";

    AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
    model.setSubject(subject);
    model.setTotalAmount(totalAmount);
    model.setStoreId(storeId);
    model.setTimeoutExpress("15m");
    model.setOutTradeNo(StringUtils.getOutTradeNo());
    try {
        String resultStr = AliPayApi.tradePrecreatePayToResponse(model, notifyUrl).getBody();
        JSONObject jsonObject = JSONObject.parseObject(resultStr);
        return jsonObject.getJSONObject("alipay_trade_precreate_response").getString("qr_code");
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

单笔转账到支付宝账户

public String transfer() {
    String totalAmount = "0.01";
    AlipayFundTransToaccountTransferModel model = new AlipayFundTransToaccountTransferModel();
    model.setOutBizNo(StringUtils.getOutTradeNo());
    model.setPayeeType("ALIPAY_LOGONID");
    model.setPayeeAccount("gxthqd7606@sandbox.com");
    model.setAmount(totalAmount);
    model.setPayerShowName("测试退款");
    model.setPayerRealName("沙箱环境");
    model.setRemark("Java陈序员 测试单笔转账到支付宝");

    try {
        return AliPayApi.transferToResponse(model).getBody();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

其他支付方式集成可参考:

https://github.com/Javen205/IJPay/tree/dev/IJPay-Demo-SpringBoot

总结

可以说,目前 IJPay 集成了大部分主流的支付渠道。可以全部集成到项目中,也可以按需加载某一种、某几种支付渠道。

最后,贴上项目地址:

https://github.com/Javen205/IJPay

在线文档地址:

https://javen205.gitee.io/ijpay/

最后

推荐的开源项目已经收录到 GitHub 项目,欢迎 Star

https://github.com/chenyl8848/great-open-source-project

或者访问网站,进行在线浏览:

https://chencoding.top:8090/#/

大家的点赞、收藏和评论都是对作者的支持,如文章对你有帮助还请点赞转发支持下,谢谢!文章来源地址https://www.toymoban.com/news/detail-748514.html

到了这里,关于还在手动造轮子?试试这款可以轻松集成多种支付渠道的工具!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 快试试这款自动化测试工具,性能起飞

    在使用龙测 Agent 平台之前,也使用过其他平台的一些产品。相比之下龙测平台功能性和颜值都相当 Nice。下面会通过详细功能以及使用流程为大家详细介绍龙测平台的强大之处。 首先点击 平台体验链接 进入龙测自动化测试平台,会弹框提示简单 4 步带领用户更快熟悉平台功

    2024年02月02日
    浏览(29)
  • 方案绞尽脑汁想不出?试试这款AI代写方案

    一份计划方案,往往是工作进行下去的核心环节,需要考虑很多因素和变量,在某些情况下,可能没有足够的信息来制定有效的方案。这可能会导致需要额外的研究和调查,以便了解更多关于问题的信息,这将延长制定方案的时间。还有很多小伙伴绞尽脑汁想出来的方案,被

    2024年02月06日
    浏览(28)
  • 还在玩传统终端,不妨来试试全新 AI 终端 Warp

    最近一段时间,AI领域如同雨后春笋般开始猛烈生长,processon,sentry,一些日常使用的工具都在积极接入AI,那么正好借着AI的风头,今天给大家推荐一款非常不错的智能终端 warp(目前仅限macOS,Windows or Linux还需要等等),如果你还在用传统终端,那么你更应该看过来。 毫不

    2023年04月25日
    浏览(24)
  • 还在封装 xxxForm,xxxTable 残害你的同事?试试这个工具

    之前写过一篇文章 我理想中的低代码开发工具的形态,已经吐槽了各种封装 xxxForm,xxxTable 的行为,这里就不啰嗦了。今天再来看看我的工具达到了什么程度。 多图预警。。。 目前我们没有写一行代码,就已经达到了如下的效果 下面是一部分生成的代码 这就是用模板生成的

    2024年02月02日
    浏览(32)
  • MySQL如何实时同步数据到ES?试试这款阿里开源的神器!

    mall 项目中的商品搜索功能,一直都没有做实时数据同步。最近发现阿里巴巴开源的 canal 可以把MySQL中的数据实时同步到Elasticsearch中,能很好地解决数据同步问题。今天我们来讲讲 canal 的使用,希望对大家有所帮助! canal主要用途是对MySQL数据库增量日志进行解析,提供增量

    2024年04月14日
    浏览(32)
  • 告别if else!试试这款轻量级流程引擎吧,跟SpringBoot绝配!

    之前同事用了一款轻量级的规则引擎脚本 AviatorScript ,我也跟着用了起来,真的挺香,能少写很多代码。这期就给大家介绍一下这款规则引擎。 AviatorScript 是一门高性能、轻量级寄宿于 JVM (包括 Android 平台)之上的脚本语言。 它起源于2010年,作者对当时已有的一些产品不是

    2024年02月13日
    浏览(33)
  • 还在被机组组合问题困扰?快来试试这个用处极大的考虑安全约束机组组合模型!

    前言 所谓安全约束机组组合,即在满足电力系统安全性约束的条件下,以系统购电成本最低等为优化目标,制定多时段的机组开停机计划。 机组组合(Unit commitment, Uc)优化问题旨在电力系统运行时,安全给定以及调整发电机组的启/停与实时出力,使发电机组的总运行成本最小

    2024年03月27日
    浏览(39)
  • 【不单调的代码】还在嫌弃Ubuntu终端?快来试试做些Ubuntu终端的花式玩法。

    🎊专栏【不单调的代码】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Love Story】 🥰大一同学小吉,欢迎并且感谢大家指出我的问题🥰 本文是在 Ubuntu环境 下进行编写的,在其他环境下的代码有可能有所不同 目录 注意:   🐂终端中出现会\\\"说话\\\"的牛

    2024年02月08日
    浏览(29)
  • 扔掉 Navicat、DBeaver、DataGrip,来试试这款吊炸天的开源数据库管理工具,吹爆!...

    戳下方名片,关注并 星标 ! 回复“ 1024 ”获取 2TB 学习资源! 大家好,我是民工哥! 我们做 IT 行业的,工作始终绕不开数据库,所以,一款得心应手的、好用实用的数据库管理软件也是至关重要的。前面也推荐了不少有收费、开源的软件,大家可以点击文末 Tools 专栏查

    2024年01月15日
    浏览(47)
  • 又要报销了,还在手动下载整理发票吗?

    大多数公司都是每个月定期提交报销,一般报销用的发票都是电子发票发到邮箱,每次要报销时都需要登录邮箱,点开邮件,一个个下载整理,工作量不大,但是发票多了也着实很烦。这个月终于下决心把这个过程自动化一下。 查看了一下邮箱里的发票邮件,虽然主题内容格

    2024年02月05日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包