IJPay 的宗旨是讓支付觸手可及。封裝了微信支付、QQ 支付、支付寶支付、京東支付、銀聯支付、PayPal 支付等常用的支付方式以及各種常用的介面。 ...
大家好,我是 Java陳序員
。
隨著電商的興起,各種支付也是蓬勃發展。
微信支付、支付寶支付、銀聯支付等各種支付方式可是深入到日常生活中。可以說,掃碼支付給我們的生活帶來了極大的便利。
同時,隨著市場需求的變化,這也要求我們在企業開發中,需要集成第三方支付渠道!
我們在集成第三方支付渠道時,常規的操作是查閱官方文檔、封裝代碼、測試聯調等。
今天,給大家介紹一個已經封裝好各種支付渠道的項目,開箱即用,我們就不用重覆手動造輪子了!
項目介紹
IJPay
的宗旨是讓支付觸手可及。封裝了微信支付、QQ
支付、支付寶支付、京東支付、銀聯支付、PayPal
支付等常用的支付方式以及各種常用的介面。
不依賴任何第三方 MVC
框架,僅僅作為工具使用簡單快速完成支付模塊的開發,開箱即用,可快速集成到系統中。
功能模塊:
- 微信支付: 支持多商戶多應用,普通商戶模式與服務商商模式當然也支持境外商戶、同時支持
Api-v3
與Api-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("[email protected]");
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/#/
大家的點贊、收藏和評論都是對作者的支持,如文章對你有幫助還請點贊轉發支持下,謝謝!