{"id":36603831,"url":"https://github.com/alansun2/happyframework-pay","last_synced_at":"2026-01-12T08:41:45.189Z","repository":{"id":52542372,"uuid":"89225690","full_name":"alansun2/happyframework-pay","owner":"alansun2","description":"java服务端快速集成支付宝和微信支付，使用该项目可以使你快速接入支付宝与微信支付，转账，退款等业务","archived":false,"fork":false,"pushed_at":"2021-04-26T17:43:32.000Z","size":445,"stargazers_count":19,"open_issues_count":2,"forks_count":9,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-10T19:44:32.774Z","etag":null,"topics":["alipay","autoconfig","payment","spring","wechat-pay"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alansun2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-04-24T10:05:56.000Z","updated_at":"2023-09-09T07:26:36.000Z","dependencies_parsed_at":"2022-09-26T22:10:23.307Z","dependency_job_id":null,"html_url":"https://github.com/alansun2/happyframework-pay","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/alansun2/happyframework-pay","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alansun2%2Fhappyframework-pay","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alansun2%2Fhappyframework-pay/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alansun2%2Fhappyframework-pay/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alansun2%2Fhappyframework-pay/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alansun2","download_url":"https://codeload.github.com/alansun2/happyframework-pay/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alansun2%2Fhappyframework-pay/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28337599,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T06:09:07.588Z","status":"ssl_error","status_checked_at":"2026-01-12T06:05:18.301Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alipay","autoconfig","payment","spring","wechat-pay"],"created_at":"2026-01-12T08:41:43.784Z","updated_at":"2026-01-12T08:41:45.179Z","avatar_url":"https://github.com/alansun2.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 快速集成支付宝和微信\n\u003e 开发项目必须为spring项目\n\n### 1. 使用\n#### 1.1. 如何集成到项目中？\n1. 把下面的依赖加到你的 pom.xml 即可：\n```\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.alan344\u003c/groupId\u003e\n        \u003cartifactId\u003ehappyframework-pay\u003c/artifactId\u003e\n        \u003cversion\u003e1.5.2-SNAPSHOT\u003c/version\u003e\n    \u003c/dependency\u003e\n```\n2. 把 `@EnablePay` 注解放到有 @SpringBootApplication/@Configuration 的地方；\n\n2. 把以下内容，放入`application.properties/yml`并修改为你自己的微信或支付宝信息即可(有默认值的可以不填)；\n    ```\n    pay:\n      alipay:\n        app-id: ggg #应用appid\n        private-key: ccc #商户的私钥。表示一个路径，示例：/root/a/private-key\n        gateway-url: ggg #选填。 默认：https://openapi.alipay.com/gateway.do\n        open-public-key: eee #开放平台支付宝公钥 表示一个路径，示例：/root/a/private-key\n        notify-url: fff #支付回调地址\n        input-charset: aaa #选填，默认：UTF-8 \n        sign-type: bbb #选填，默认：RSA2\n        time-out: 默认：30m \n      wechat:\n        spbill-create-ip: bbb #调用接口的ip\n        notify-url: ddd #微信支付回调地址\n        mch-app-id-map: #与商户号绑定的appid或小程序appid，默认使用第一个支付\n          1: ddd\n          2: eee\n        mch-map: #商户号信息，默认第一个为primary\n          1: \n            mch-id: fff #商户号\n            public-key: ggg #微信RSA公钥。表示一个路径，示例：/root/a/private-key\n            sign-key: hhh #用户md5签名。表示一个路径，示例：/root/a/private-key\n            ca: iii #ca证书地址。表示一个路径，示例：/root/a/private-key\n            ca-code: jjj #ca证书的密匙。表示一个路径，示例：/root/a/private-key\n          2: \n            mch-id: fff #商户号\n            public-key: ggg #微信RSA公钥。表示一个路径，示例：/root/a/private-key\n            sign-key: hhh #用户md5签名。表示一个路径，示例：/root/a/private-key\n            ca: iii #ca证书地址。表示一个路径，示例：/root/a/private-key\n            ca-code: jjj #ca证书的密匙。表示一个路径，示例：/root/a/private-key\n    ```\n    alipay\n    * app-id: 应用appid\n    * sign-type: 支付宝推荐使用RSA2，这里不填默认RSA2\n    * private-key: 商户的私钥。表示一个路径，示例：/root/a/private-key\n    * open-public-key:开放平台支付宝公钥 表示一个路径，示例：/root/a/private-key\n    * notify-url: fff #支付的默认回调地址，包括app，扫码等\n    \n    你需要填写的主要有：app-id，private-key，open-public-key，notify-url\n    \n    wechat\n    * spbill-create-ip: 调用接口的ip\n    * notify-url: ddd #微信支付回调地址\n    * mch-app-id-map: 与商户号绑定的appid或小程序appid，主要用于转账到微信零钱，默认使用第一个appid进行支付，退款，查询订单\n      \u003e 该属性为一个map，key为`Integer`，value为`String`\n    * mch-map: 商户号信息，默认第一个为primary\n      \u003e 该属性为一个map，key为`Integer`，value为`WechatMch`\n       *  mch-id: 商户号\n       *  public-key: 微信RSA公钥。表示一个路径，示例：/root/a/private-key\n       *  sign-key: 用户md5签名。表示一个路径，示例：/root/a/private-key\n       *  ca: ca证书地址。表示一个路径，示例：/root/a/private-key\n       *  ca-code: ca证书的密匙。表示一个路径，示例：/root/a/private-key\n\n#### 1.2. 如何使用\n1. `PayUtils`：支持支付、退款、查询订单操作\n2. `TransferAccountsUtils`：支持转账操作（包括转账到零钱和银行卡（**支付宝未开放转账到银行卡接口**））\n\n\n### 2. 使用示例\n#### 2.1. 支付\n支付宝\n```java\nOrderPay order = new OrderPay();\norder.setBody(\"肥仔快乐水\");\norder.setPrice(\"3.25\");\norder.setSubject(\"盒马生鲜\");\norder.setOrderId(\"sadfasdfas234234\");\nPayUtils.createPayInfo(order);\n```\n\n微信\n```java\nOrderPay order = new OrderPay();\norder.setBody(\"肥仔快乐水\");\norder.setPrice(\"3.25\");\norder.setOrderId(\"sadfasdfas234234\");\norder.setPayType(PayBase.PAY_TYPE_2);\n// tradeType 默认是 APP，如果要使用小程序支付，需要修改\norderPay.setTradeType(BaseConstants.OS_WX == os ? TradeTypeEnum.APPLET : TradeTypeEnum.APP);\n// 小程序支付需要设置 openid\norderPay.getWechatPayOrder().setOpenid(request.getOpenId());\n// 选择你配置文件中配置的商户号对应的序号，也就是说，你可以配置多个商户号信息来选择，默认：1\norderPay.getWechatPayOrder().setMchNo(1);\nPayUtils.createPayInfo(order);\n```\n\n其中 body 可以使用 bodyProducts 来设置，如下：\n```java\nOrderPay order = new OrderPay();\norder.setBodyProducts(bodyProducts);\n...\n...\nPayUtils.createPayInfo(order);\n```\n使用 bodyProducts 的前提是 bodyProducts 必须实现 Product 接口。notify_url 只要在上面的配置文件中配置了，这里就不需要设置了。\n\n另外对于支付宝/微信的回调，这里我也做了简单的封装，你需要做的就是实现 ConcretePayService 写你的业务逻辑就可以了。具体的做法：\n把一下代码放入你的 Spring Controller 中就可以了。\n```java\n/**\n * 支付宝回调\n *\n * @param request re\n */\n@PostMapping(value = \"verifyAlipayCallback\")\npublic void verifyAlipayCallback(HttpServletRequest request, HttpServletResponse response) {\n    AlipayCallbackHandler.getInstance().handler(request, response, sysConfig.getProfile().equals(\"pro\"), payService);\n}\n\n/**\n * 微信回调\n *\n * @param request re\n */\n@PostMapping(value = \"verifyWXPayCallback\")\npublic void verifyWXPayCallback(HttpServletRequest request, HttpServletResponse response) {\n    WechatCallbackHandler.getInstance().handler(request, response, sysConfig.getProfile().equals(\"pro\"), payService);\n}\n```\n上面的例子中 payService 实现了 ConcretePayService 接口。\n\n#### 2.2. 查询支付状态\n当前端调起支付并支付成功后，前端可以调用后台的该接口来获取支付是否真的成功。如果成功后台可以做相应的处理。\n```java\nOrderQuery orderQuery = new OrderQuery();\norderQuery.setOrderId(\"sadfasdfas234234\");\n// PayBase.PAY_TYPE_1：支付宝；PayBase.PAY_TYPE_2：微信。默认：PayBase.PAY_TYPE_1\norderQuery.setPayType(PayBase.PAY_TYPE_2);\nPayUtils.queryOrder(orderQuery);\n```\n\n#### 2.3. 生成二维码\n主要用于生成二维码供用户扫码支付。这个接口的调用和 2.1 差不多，只是多了一个 storeId 来记录是那一台设备生成的。\n\n#### 2.4. 查询订单是否支付成功\n这个接口的调用参数和 2.2 一样。是 2.2 的一个特例，主要是为了方便查询订单是否支付成功\n\n#### 2.5 退款\n支付宝\n```java\nOrderRefund refundOrder = new OrderRefund();\nrefundOrder.setOrderId(\"sadfasdfas234234\");\nrefundOrder.setRefundId(\"uniquesfsdfsdfsd\");\nrefundOrder.setRefundAmount(\"1.23\");\nrefundOrder.setTotalAmount(\"3.23\");\nrefundOrder.setRefundReason(\"假货\");\n// 可选参数，默认是人民币\nrefundOrder.setRefundCurrency(\"USD\");\nPayUtils.refund(refundOrder);\n```\n另外你还可以通过 OrderRefund.alipayTradeRefundModel 属性进行自定义设置支付宝的参数。\n\n微信\n```java\nOrderRefund refundOrder = new OrderRefund();\nrefundOrder.setOrderId(\"sadfasdfas234234\");\nrefundOrder.setRefundId(\"uniquesfsdfsdfsd\");\nrefundOrder.setRefundAmount(\"1.23\");\nrefundOrder.setTotalAmount(\"3.23\");\nrefundOrder.setRefundReason(\"假货\");\nrefundOrder.setRefundCurrency(\"CNY\");\nrefundOrder.setPayType(PayBase.PAY_TYPE_2);\n// 以下为可选项\nWeChatRefundInfo weChatRefundInfo = refundOrder.getWeChatRefundInfo();\nweChatRefundInfo.setMchNo(1);// 配置的商户号信息，默认：1\nweChatRefundInfo.setMchAppIdNo(1);// 配置的 appid，默认：1\nweChatRefundInfo.setNotifyUrl(\"http://www.baidu.com\");// 异步通知 url，其实结果是实时返回的，不配置也是可以的\nPayUtils.refund(refundOrder);\n```\nresultCode == SUCCESS 表示退款成功，如果返回 FAIL 或出现异常则退款失败，你需要定时的去处理这些退款失败的订单。\n\n#### 2.6. 转账到余额/零钱\n支付宝\n```java\nTransferMoneyInternal params = new TransferMoneyInternal();\nparams.setTransferId(\"sdfsdf\");\nparams.setPayeeAccount(\"18658254585\");\nparams.setAmount(\"100\");\n//以下为可选项\nparams.setReUserName(\"张三\");\nparams.setDesc(\"转账测试\");\nTransferAccountsUtils.transferMoneyInternal(params);\n```\n还可以通过 TransferMoneyInternal.fundTransToaccountTransferModel 配置支付宝的转账信息。\n\n微信\n```java\nTransferMoneyInternal params = new TransferMoneyInternal();\nparams.setTransferId(\"sdfsdf\");\nparams.setPayeeAccount(\"18658254585\");\nparams.setAmount(\"100\");\nparams.setPayType(PayBase.PAY_TYPE_2);\n//以下为可选项\nparams.setReUserName(\"张三\");\nparams.setDesc(\"转账测试\");\nTransferAccountsUtils.transferMoneyInternal(params);\n```\n\n#### 2.7. 转账到银行卡\n只支持微信，支付宝没开放此接口。\n```java\nTransferToBankCardParams params = new TransferToBankCardParams();\nparams.setPartnerTradeNo(\"sdfsfsdf\");\nparams.setEncTrueName(\"张三\");\nparams.setEncBankNo(\"62223234235623423423\");\nparams.setBankCode(\"1002\");\nparams.setAmount(\"0.1\");\n// 以下为可选\nparams.setDesc(\"测试银行卡转账\");\nparams.setMchAppIdNo(1);\nparams.setMchNo(1);\nTransferAccountsUtils.transferToBankCard(params);\n```\n\n#### 2.8. 查询转账到银行卡\n2.7 有可能返回 PROCESSING 对于这些订单你需要定时去查询这些订单的状态，知道这些状态为最终状态。\n\n#### 2.9. 查询转账到余额/零钱\n\nIt's all!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falansun2%2Fhappyframework-pay","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falansun2%2Fhappyframework-pay","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falansun2%2Fhappyframework-pay/lists"}