diff --git a/packages/docs/docs/.vuepress/config.js b/packages/docs/docs/.vuepress/config.js index 43c3762464fc08d8079b994c50db72e4e1eaaf2b..23bc08bdb1e155963e72580a2370cd5e631f6d2a 100755 --- a/packages/docs/docs/.vuepress/config.js +++ b/packages/docs/docs/.vuepress/config.js @@ -128,6 +128,7 @@ function getGuideSidebar (groupA, groupB,groupC,groupD,groupE,groupF,groupG,grou children: [ 'alipay/', 'alipay/init', + 'alipay/extension', ] }, { diff --git a/packages/docs/docs/.vuepress/nav/zh.js b/packages/docs/docs/.vuepress/nav/zh.js index 8de47f4c035bf9584ff41ecbb2d9fb304d6b503b..a0c564f97d75e321f6a728bcee4c9fbfa26d504c 100755 --- a/packages/docs/docs/.vuepress/nav/zh.js +++ b/packages/docs/docs/.vuepress/nav/zh.js @@ -7,19 +7,19 @@ module.exports = [ text: '加入VIP', link: '/guide/donate/', }, - { - text: '全民云计算', - items: [ - { - text: '云主机低至2折', - link: 'https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=b1hkzv2x', - }, - { - text: '云服务器首年 88', - link: 'https://cloud.tencent.com/act/cps/redirect?redirect=1048&cps_key=a21676d22e4b11a883893d54e158c1d3&from=console', - }, - ] - }, + // { + // text: '全民云计算', + // items: [ + // { + // text: '云主机低至2折', + // link: 'https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=b1hkzv2x', + // }, + // { + // text: '云服务器首年 88', + // link: 'https://cloud.tencent.com/act/cps/redirect?redirect=1048&cps_key=a21676d22e4b11a883893d54e158c1d3&from=console', + // }, + // ] + // }, { text: 'JavaDoc 文档', link: 'https://apidoc.gitee.com/javen205/IJPay', @@ -57,10 +57,10 @@ module.exports = [ }, ] }, - { - text: '1.x 文档', - link: 'https://ijpay.javen.dev/doc/opensource/IJPay.html', - }, + // { + // text: '1.x 文档', + // link: 'https://ijpay.javen.dev/doc/opensource/IJPay.html', + // }, { text: 'Gitee', link: 'https://gitee.com/javen205/IJPay', diff --git a/packages/docs/docs/README.md b/packages/docs/docs/README.md index 62a68153041aca949cda3f69d87de2060fef6444..27836e464ea54efd450d0225746075181b00d069 100755 --- a/packages/docs/docs/README.md +++ b/packages/docs/docs/README.md @@ -31,12 +31,14 @@ footer: Apache License 2.0 | Copyright © 2019-present Javen com.github.javen205 IJPay-All - latest-version + latest-version ``` ::: tip - 当然,不同的支付方式也可以单独添加相关依赖 [了解更多](./guide/maven.md) + 2.3.2 版本开始 IJPay-All 中不会自动下载银联支付相关依赖,如有银联支付需求请单独手动添加 IJPay-UnionPay 相关依赖。 + + 当然,不同的支付方式也可以单独添加相关依赖 [了解更多](./guide/maven.md) ::: ### 全民云计算 @@ -75,21 +77,21 @@ export default { this.$notify({ offset: 50, - title: '请为 IJPay 投票', - message: '2019 年度中国开源软件评选来了!希望你能够为 IJPay 投一票(点击消息再点击「投票赢奖品」) 截止日期:2019 年 12 月 6 日 24 点', + title: 'IJPay VIP 服务', + message: 'IJPay VIP 服务可提供一对一在线答疑,加入 VIP 为您节省更多时间去陪恋人、家人以及朋友 :) 交流群:723992875', type: 'success', - showClose: false, + showClose: true, duration: 0, onClick: function() { // Notification.closeAll(); - window.open("https://www.oschina.net/p/ijpay"); + window.open("https://javen205.gitee.io/ijpay/guide/donate/"); } }); this.$notify({ offset: 200, - title: 'TNWX 微信系开发脚手架,Start 支持一下', - message: '同时支持微信公众号、微信支付、微信小游戏(微信小程序、微信企业号敬请期待)。可接入到任何 Node.js 框架(Express、Nest、Egg、Koa 等)', + title: 'TNWX 微信系开发脚手架', + message: '同时支持微信公众号、微信小程序、微信企业号、微信支付、微信小游戏。可接入到任何 Node.js 框架(Express、Nest、Egg、Koa 等)', type: 'success', showClose: true, duration: 0, diff --git a/packages/docs/docs/guide/alipay/extension.md b/packages/docs/docs/guide/alipay/extension.md new file mode 100644 index 0000000000000000000000000000000000000000..ec5deea8bba57bf1d1a002a5948de7cdbde97d74 --- /dev/null +++ b/packages/docs/docs/guide/alipay/extension.md @@ -0,0 +1,106 @@ +# 扩展接口 + +## 说明 + +支付宝支付中涉及到的接口非常多,如果 IJPay 中有没有实现某个接口大家可自行扩展,同时也欢迎 PR + +## 封装 AliPayClient 常用的执行方法 + +如何使用? 请参考源码或者看下方示例 + +```java () +public static T execute(AlipayRequest request) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().execute(request); +} + +public static T execute(AlipayRequest request, String authToken) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().execute(request, authToken); +} + +public static T execute(AlipayRequest request, String accessToken, String appAuthToken) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().execute(request, accessToken, appAuthToken); +} + +public static T execute(AlipayRequest request, String accessToken, String appAuthToken, String targetAppId) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().execute(request, accessToken, appAuthToken, targetAppId); +} + +public static T pageExecute(AlipayRequest request) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().pageExecute(request); +} + +public static T pageExecute(AlipayRequest request, String method) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().pageExecute(request, method); +} + +public static T sdkExecute(AlipayRequest request) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().sdkExecute(request); +} + +public static BatchAlipayResponse execute(BatchAlipayRequest request) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().execute(request); +} + +public static T certificateExecute(AlipayRequest request) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().certificateExecute(request); +} + +public static T certificateExecute(AlipayRequest request, String authToken) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().certificateExecute(request, authToken); +} + +public static T certificateExecute(AlipayRequest request, String accessToken, String appAuthToken) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().certificateExecute(request, accessToken, appAuthToken); +} + +public static T certificateExecute(AlipayRequest request, String accessToken, String appAuthToken, String targetAppId) throws AlipayApiException { + return AliPayApiConfigKit.getAliPayApiConfig().getAliPayClient().certificateExecute(request, accessToken, appAuthToken, targetAppId); +} +``` + +## 账户余额查询 + +官方文档 [API 列表](https://docs.open.alipay.com/309/106237/) + +```java () +/** + * 支付宝资金账户资产查询接口 + * + * @param model model {@link AlipayFundAccountQueryModel} + * @param appAuthToken 应用授权token + * @return {@link AlipayFundAccountQueryResponse} + * @throws AlipayApiException 支付宝 Api 异常 + */ +public static AlipayFundAccountQueryResponse accountQueryToResponse(AlipayFundAccountQueryModel model, String appAuthToken) throws AlipayApiException { + AlipayFundAccountQueryRequest request = new AlipayFundAccountQueryRequest(); + request.setBizModel(model); + if (!StringUtils.isEmpty(appAuthToken)) { + request.putOtherTextParam("app_auth_token", appAuthToken); + } + if (AliPayApiConfigKit.getAliPayApiConfig().isCertModel()) { + return certificateExecute(request); + } else { + return execute(request); + } +} +``` + +## 如何使用? + +使用前请初始化客户端,请参考[支付宝初始化](../alipay/init.md) + +```java () +@RequestMapping(value = "/accountQuery") +@ResponseBody +public String accountQuery(@RequestParam("aliPayUserId") String aliPayUserId) { + AlipayFundAccountQueryModel model = new AlipayFundAccountQueryModel(); + model.setAlipayUserId(aliPayUserId); + model.setAccountType("ACCTRANS_ACCOUNT"); + try { + return AliPayApi.accountQueryToResponse(model,null).getBody(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; +} +``` \ No newline at end of file diff --git a/packages/docs/docs/guide/alipay/init.md b/packages/docs/docs/guide/alipay/init.md index 9c2aa7236102ada92d2b5aa57b4acfc93b5da6b7..e0a5893b466fde35c8288d619cb1377446699c2e 100755 --- a/packages/docs/docs/guide/alipay/init.md +++ b/packages/docs/docs/guide/alipay/init.md @@ -3,8 +3,22 @@ ## 初始化客户端 -```java{8,9,11,12} -AliPayApiConfig aliPayApiConfig = AliPayApiConfig.builder() +```java{3,4,5,11,12,13,14,22,23} +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") diff --git a/packages/docs/docs/guide/config/alipay_config.md b/packages/docs/docs/guide/config/alipay_config.md index 4ad00feb1100199b769cad4f037ed0c8cf7987fa..373d9471ca6f682cc110024fac1a8a316dbf38d6 100755 --- a/packages/docs/docs/guide/config/alipay_config.md +++ b/packages/docs/docs/guide/config/alipay_config.md @@ -5,7 +5,10 @@ ::: tip IJPay 中支付宝支付需要配置的参数如下: - appId: 应用编号 - privateKey: 应用私钥 -- publicKey: 支付宝公钥,通过应用公钥上传到支付宝开放平台换取支付宝公钥。 +- publicKey: 支付宝公钥,通过应用公钥上传到支付宝开放平台换取支付宝公钥(如果是证书模式,公钥与私钥在CSR目录)。 +- appCertPath: 应用公钥证书 (证书模式必须) +- aliPayCertPath: 支付宝公钥证书 (证书模式必须) +- aliPayRootCertPath: 支付宝根证书 (证书模式必须) - serverUrl: 支付宝支付网关 - domain: 外网访问项目的域名,支付通知中会使用 ::: diff --git a/packages/docs/docs/guide/donate/README.md b/packages/docs/docs/guide/donate/README.md index 557ff7a2d9a36b0aee596aff526a6bd5cfd0418a..0440221d9981032de903889f96023943b83ecd5a 100644 --- a/packages/docs/docs/guide/donate/README.md +++ b/packages/docs/docs/guide/donate/README.md @@ -1,10 +1,16 @@ # 加入 VIP -IJPay 一直以简洁至上、开箱即用为核心。提供的 IJPay-Demo 也在简化使用流程做到简单修改配置就能用,同时也鼓励用户与 IJPay 「亲密接触」。 +IJPay 一直以简洁至上、开箱即用为核心,提供的示例 (IJPay-Demo) 简单修改配置即可使用。 +但由于开发环境不同或多或少会出现一些疑难问题,遇到问题不要慌你可以提 [issues](https://gitee.com/javen205/IJPay/issues) +会统一时间安排回复,如果你觉得响应慢或者交流不方便。那么请考虑一下 IJPay 提供的 VIP 服务。 -如果项目周期短不想投入过多时间和精力在接入上面或者实在为技术感到头疼,那么请考虑一下 IJPay 提供的 VIP 服务。 +如果您的项目开发周期短不想耗更多的时间与精力在踩坑与填坑的路上,那么请考虑一下 IJPay 提供的 VIP 服务。 -提供一对一技术支持费用: **¥ 299** 元。**付款时请备注联系方式,或者[加群:723992875](http://shang.qq.com/wpa/qunwpa?idkey=44c2b0331f1bdca6c9d404e863edd83973fa97224b79778db79505fc592f00bc)联系群主** +亦或者没有研发团队,实在为技术感到头疼,那么请考虑一下 IJPay 提供的 VIP 服务。 + +同时也鼓励用户与 IJPay 「亲密接触」。 + +一对一在线技术支持: 限时优惠 **¥ 299** 元。**付款时请备注联系方式,或者[加群:723992875](http://shang.qq.com/wpa/qunwpa?idkey=44c2b0331f1bdca6c9d404e863edd83973fa97224b79778db79505fc592f00bc)联系群主** # 请作者喝一杯咖啡 diff --git a/packages/docs/docs/guide/wxpay/README.md b/packages/docs/docs/guide/wxpay/README.md index 3d9e203993096eec98e2a17209efb4b819c2dff3..ed12707ce3fa055428aaeada871e00970cd956c3 100755 --- a/packages/docs/docs/guide/wxpay/README.md +++ b/packages/docs/docs/guide/wxpay/README.md @@ -37,6 +37,18 @@ IJPay 中支持的支付方式以及支付工具 IJPay 中常用支付方式涉及到的 [Model](https://gitee.com/javen205/IJPay/blob/master/IJPay-WxPay/src/main/java/com/ijpay/wxpay/model) 都是使用 `builder` 模式来构建,**其中 Model 每个字段与官方接口文档保持一致**,同时支持商户模式、服务商模式。 + ::: warning + 为什么要使用 Lombok 来构建接口的请求参数? + +1、使用 Lombok 来构建请求参数是为了方便,不用写太多的冗余 get set。 + +2、避免手动设置误写参数导致的低级错误。 + +外界对 Lombok 的评价也不太一致,喜欢的非常喜欢不喜欢的就使劲吐槽,那么 IJPay 中有其他的替代方案吗? + +当然是有的,最简单粗暴的方法使用 Map 来构建请求参数,再使用 `WxPayKit.buildSign` 来构建签名即可。 IJPay 1.x 版本就是这么做的 + ::: + ## 扩展 Model 由于支付方式的不同涉及到的接口非常多,如果某些接口的 Model 在 IJPay 没有提供封装,大家可以继承 [BaseModel](https://gitee.com/javen205/IJPay/blob/master/IJPay-Core/src/main/java/com/ijpay/core/model/BaseModel.java)