快速完成支付模块的开发,轻松嵌入到任何系统里

快速完成支付模块的开发,轻松嵌入到任何系统里

2022-09-05 0 922
资源编号 38072 最近更新 2022-09-05
¥ 0人民币 升级VIP
立即下载 注意事项
下载不了?请联系网站客服提交链接错误!
增值服务: 安装指导 环境配置 二次开发 模板修改 源码安装

本期推荐的是一个开源的聚合支付框架,支持微信支付、支付宝支付等——IJPay。

快速完成支付模块的开发,轻松嵌入到任何系统里

IJPay封装了微信支付、QQ支付、支付宝支付、京东支付、银联支付、PayPal支付等常用的支付方式以及各种常用的接口。不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。

功能特性

  • 简洁至上:以 Module 为中心的项目结构,简洁方便易扩展,发布后总包体不超过 2M。
  • 开箱即用:不依赖任何第三方 MVC 框架,仅仅作为工具使用,简单快速完成支付模块的开发,可轻松嵌入到任何系统里。
  • 渠道丰富:支持微信支付、QQ钱包支付、支付宝支付、银联支付、京东支付等。

微信支付:支持多应用多商户,支持普通商户模式与服务商商模式当然也支持境外、同时支持 Api-v 3 与 Api-v2 版本的接口。

支付宝支付:支持多应用,签名同时支持普通公钥方式与公钥证书方式。

银联支付:全渠道扫码支付、微信 App 支付、公众号&小程序支付、银联 JS 支付、支付宝服务窗支付。

个人微信支付:微信个人商户,最低费率 0.38%,官方直连的异步回调通知。

PayPal 支付:自动管理 AccessToken,极速接入各种常用的支付方式。

  • 极简入门:IJPay 一直以简洁至上、开箱即用为核心,提供完整示例简单修改配置即可使用。

接入微信支付示例

1 添加依赖

  • 一次性添加所有支付方式的依赖
<dependency>
    <groupId>com.github.javen205</groupId>
    <artifactId>IJPay-All</artifactId>
    <version>latest-version</version>
</dependency>
  • 或者只添加所需支付方式的依赖

微信支付:

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

更多依赖:

安装依赖 | IJPay

2 构建请求参数 Model

  • 微信支付 Model

IJPay 中常用的支付方式涉及到的 Model 都是使用 builder 模式来构建,其中 Model 每个字段与官方接口文档保持一致,同时支持商户模式、服务商模式。

代码地址:
https://gitee.com/javen205/IJPay/tree/master/IJPay-WxPay/src/main/java/com/ijpay/wxpay/model

为什么要使用 Lombok 来构建接口的请求参数?

1、使用 Lombok 来构建请求参数是为了方便,不用写太多的冗余 get set。

2、避免手动设置误写参数导致的低级错误。

外界对 Lombok 的评价也不太一致,喜欢的非常喜欢不喜欢的就使劲吐槽,那么 IJPay 中有其他的替代方案吗?

当然是有的,最简单粗暴的方法就是使用 Map 来构建请求参数,再使用 WxPayKit.buildSign 来构建签名即可。 IJPay 1.x 版本就是这么做的

  • 扩展 Model

由于支付方式的不同涉及到的接口非常多,如果某些接口的 Model 在 IJPay 没有提供封装,大家可以继承 BaseModel 所有属性字段名称与接口参数保持一致且必须为 String 类型,最后添加如下注解来实现 builder 模式。

代码地址:
https://gitee.com/javen205/IJPay/blob/master/IJPay-Core/src/main/java/com/ijpay/core/model/BaseModel.java

@Builder
@AllArgsConstructor
@Getter
@Setter
public class CloseOrderModel extends BaseModel {
    // 属性字段名称与接口参数保持一致 
    private String appid;
    // 省略接口中的其他参数...
}

注意:

1、扩展 Model 必须继承 BaseModel

2、所有属性字段名称与接口参数保持一致且必须为 String 类型

3、必须添加 Lombok 注解 @Builder

@AllArgsConstructor(access = AccessLevel.PRIVATE) @Getter

4、IDEA 必须安装 Lombok 插件

3 构建参数并执行请求

1. 根据接口需要的参数,使用 Model 构建除 sign 以外的参数

2. build 后根据接口的签名方式创建签名 creatSign

3. 使用 WxPayApi 提供的接口执行 https 请求

代码地址:
https://gitee.com/javen205/IJPay/blob/master/IJPay-WxPay/src/main/java/com/ijpay/wxpay/WxPayApi.java

4. 构建支付参数唤起支付

  • 例如公众号支付(JSAPI 支付)的统一下单:
// 统一下单构建请求参数
Map<String, String> params = UnifiedOrderModel
    .builder()
    .appid(wxPayBean.getAppId())
    .mch_id(wxPayBean.getMchId())
    .nonce_str(WxPayKit.generateStr())
    .body("IJPay 让支付触手可及")
    .attach("Node.js 版:https://gitee.com/javen205/TNWX")
    .out_trade_no(WxPayKit.generateStr())
    .total_fee("1000")
    .spbill_create_ip(ip)
    .notify_url(wxPayBean.getDomain().concat("/wxpay/pay_notify"))
    .trade_type(TradeType.JSAPI.getTradeType())
    .openid(openId)
    .build()
    // 同时支持 SignType.MD5、SignType.HMACSHA256
    .creatSign(wxPayBean.getPartnerKey(), SignType.HMACSHA256);  
// 发送请求
String xmlResult = WxPayApi.pushOrder(false,params); 
// 将请求返回的 xml 数据转为 Map,方便后面逻辑获取数据
Map<String, String> resultMap = WxPayKit.xmlToMap(xmlResult);
// 判断返回的结果
String returnCode = resultMap.get("return_code");
String returnMsg = resultMap.get("return_msg");
if (!WxPayKit.codeIsOk(returnCode)) {
    return new AjaxResult().addError(returnMsg);
}
String resultCode = resultMap.get("result_code");
if (!WxPayKit.codeIsOk(resultCode)) {
    return new AjaxResult().addError(returnMsg);
}

// 以下字段在return_code 和result_code都为SUCCESS的时候有返回
String prepayId = resultMap.get("prepay_id");
// 二次签名,构建公众号唤起支付的参数,这里的签名方式要与上面统一下单请求签名方式保持一致
Map<String, String> packageParams = WxPayKit.prepayIdCreateSign(prepayId, 
    wxPayBean.getAppId(),wxPayBean.getPartnerKey(),SignType.HMACSHA256);
// 将二次签名构建的数据返回给前端并唤起公众号支付
String jsonStr = JSON.toJSONString(packageParams);
return new AjaxResult().success(jsonStr);

完整示例代码:
https://gitee.com/javen205/IJPay/blob/master/IJPay-Demo-SpringBoot/src/main/java/com/ijpay/demo/controller/wxpay/WxPayController.java

更多内容大家可前往阅读。

资源下载此资源为免费资源立即下载

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

七爪网 免费源码 快速完成支付模块的开发,轻松嵌入到任何系统里 https://www.7claw.com/38072.html

分享免费的开源源码

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、七爪会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、七爪无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在七爪上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于七爪介入快速处理。
查看详情
  • 1、七爪作为第三方中介平台,依据交易合同(商品描述、交易前商定的内容)来保障交易的安全及买卖双方的权益; 2、非平台线上交易的项目,出现任何后果均与互站无关;无论卖家以何理由要求线下交易的,请联系管理举报。
查看详情

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务