|
5 | 5 | import java.io.ByteArrayOutputStream;
|
6 | 6 | import java.io.IOException;
|
7 | 7 | import java.math.BigDecimal;
|
| 8 | +import java.util.Collections; |
8 | 9 | import java.util.HashMap;
|
9 | 10 | import java.util.Map;
|
10 | 11 | import java.util.UUID;
|
11 | 12 |
|
12 |
| -import javax.annotation.PostConstruct; |
13 | 13 | import javax.imageio.ImageIO;
|
14 | 14 | import javax.servlet.http.HttpServletRequest;
|
15 | 15 |
|
|
27 | 27 | import com.egzosn.pay.wx.v3.api.WxPayConfigStorage;
|
28 | 28 | import com.egzosn.pay.wx.v3.api.WxPayService;
|
29 | 29 | import com.egzosn.pay.wx.v3.bean.WxTransactionType;
|
| 30 | +import com.egzosn.pay.wx.v3.bean.WxTransferType; |
30 | 31 | import com.egzosn.pay.wx.v3.bean.order.H5Info;
|
31 | 32 | import com.egzosn.pay.wx.v3.bean.order.SceneInfo;
|
| 33 | +import com.egzosn.pay.wx.v3.bean.transfer.TransferDetail; |
| 34 | +import com.egzosn.pay.wx.v3.bean.transfer.WxTransferOrder; |
| 35 | +import com.egzosn.pay.wx.v3.bean.transfer.WxTransferQueryOrder; |
32 | 36 | import com.egzosn.pay.wx.v3.utils.WxConst;
|
33 | 37 |
|
34 | 38 | /**
|
@@ -233,5 +237,137 @@ public Object downloadBill(QueryOrder order) {
|
233 | 237 | return service.downloadBill(order.getBillDate(), order.getBillType());
|
234 | 238 | }
|
235 | 239 |
|
| 240 | + /** |
| 241 | + * 转账到余额 |
| 242 | + * |
| 243 | + * |
| 244 | + * @return 对应的转账结果 |
| 245 | + */ |
| 246 | + @RequestMapping("transfer") |
| 247 | + public Map<String, Object> transfer() { |
| 248 | + |
| 249 | + WxTransferOrder order = new WxTransferOrder(); |
| 250 | + order.setOutBatchNo("商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一"); |
| 251 | + order.setBatchName("该笔批量转账的名称"); |
| 252 | + order.setBatchRemark("转账说明,UTF8编码,最多允许32个字符"); |
| 253 | + // 转账金额单位为“分”。转账总金额必须与批次内所有明细转账金额之和保持一致,否则无法发起转账操作 |
| 254 | + order.setTotalAmount(100); |
| 255 | + //一个转账批次单最多发起一千笔转账。转账总笔数必须与批次内所有明细之和保持一致,否则无法发起转账操作 |
| 256 | + order.setTotalNum(1); |
| 257 | + TransferDetail transferDetail = new TransferDetail(); |
| 258 | + transferDetail.setOutDetailNo("商户系统内部区分转账批次单下不同转账明细单的唯一标识,要求此参数只能由数字、大小写字母组成"); |
| 259 | + // 转账金额单位为“分”。转账总金额必须与批次内所有明细转账金额之和保持一致,否则无法发起转账操作 |
| 260 | + transferDetail.setTransferAmount(100); |
| 261 | + transferDetail.setTransferRemark("单条转账备注(微信用户会收到该备注),UTF8编码,最多允许32个字符"); |
| 262 | + transferDetail.setOpenid("商户appid下,某用户的openid"); |
| 263 | + transferDetail.setUserName("收款方真实姓名: 张三"); |
| 264 | + transferDetail.setUserIdCard("当填入收款方身份证号时,姓名字段必须填入。"); |
| 265 | + order.setTransferDetailList(Collections.singletonList(transferDetail)); |
| 266 | + //发起商家转账,转账到零钱 |
| 267 | + order.setTransferType(WxTransferType.TRANSFER_BATCHES); |
| 268 | + order.setTransferSceneId("必填,指定该笔转账使用的转账场景ID"); |
| 269 | + return service.transfer(order); |
| 270 | + } |
| 271 | + /** |
| 272 | + * 转账账单电子回单申请受理接口 |
| 273 | + * |
| 274 | + * |
| 275 | + * @return 转账账单电子回单申请受理接口结果 |
| 276 | + */ |
| 277 | + @RequestMapping("billReceipt") |
| 278 | + public Map<String, Object> billReceipt() { |
| 279 | + WxTransferOrder order = new WxTransferOrder(); |
| 280 | + order.setOutBatchNo("商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一"); |
| 281 | + //转账账单电子回单申请受理接口 |
| 282 | + order.setTransferType(WxTransferType.TRANSFER_BILL_RECEIPT); |
| 283 | + return service.transfer(order); |
| 284 | + } |
| 285 | + |
| 286 | + |
| 287 | + /** |
| 288 | + * 通过微信批次单号查询批次单 |
| 289 | + * |
| 290 | + * <p> |
| 291 | + * <a href="https://pay.weixin.qq.com/docs/merchant/apis/batch-transfer-to-balance/transfer-batch/get-transfer-batch-by-no.html">通过微信批次单号查询批次单</a> |
| 292 | + * </p> |
| 293 | + * @return 对应的转账订单 |
| 294 | + */ |
| 295 | + @RequestMapping("getTransferBatchByNo") |
| 296 | + public Map<String, Object> getTransferBatchByNo() { |
| 297 | + WxTransferQueryOrder queryOrder = new WxTransferQueryOrder(); |
| 298 | + queryOrder.setBatchId("1030000071100999991182020050700019480001"); |
| 299 | + queryOrder.setNeedQueryDetail(true); |
| 300 | + queryOrder.setOffset(0); |
| 301 | + queryOrder.setLimit(20); |
| 302 | + queryOrder.setDetailStatus("FAIL"); |
| 303 | + queryOrder.setTransactionType(WxTransferType.QUERY_BATCH_BY_BATCH_ID); |
| 304 | + return service.transferQuery(queryOrder); |
| 305 | + } |
| 306 | + /** |
| 307 | + * 通过微信批次单号查询批次单 |
| 308 | + * |
| 309 | + * <p> |
| 310 | + * <a href="https://pay.weixin.qq.com/docs/merchant/apis/batch-transfer-to-balance/transfer-batch/get-transfer-batch-by-out-no.html">通过商家批次单号查询批次单</a> |
| 311 | + * </p> |
| 312 | + * @return 对应的转账订单 |
| 313 | + */ |
| 314 | + @RequestMapping("getTransferBatchByOutNo") |
| 315 | + public Map<String, Object> getTransferBatchByOutNo() { |
| 316 | + WxTransferQueryOrder queryOrder = new WxTransferQueryOrder(); |
| 317 | + queryOrder.setOutBatchNo("1030000071100999991182020050700019480001"); |
| 318 | + queryOrder.setNeedQueryDetail(true); |
| 319 | + queryOrder.setOffset(0); |
| 320 | + queryOrder.setLimit(20); |
| 321 | + queryOrder.setDetailStatus("FAIL"); |
| 322 | + queryOrder.setTransactionType(WxTransferType.QUERY_BATCH_BY_OUT_BATCH_NO); |
| 323 | + return service.transferQuery(queryOrder); |
| 324 | + } |
| 325 | + /** |
| 326 | + * 通过微信明细单号查询明细单 |
| 327 | + * |
| 328 | + * <p> |
| 329 | + * <a href="https://pay.weixin.qq.com/docs/merchant/apis/batch-transfer-to-balance/transfer-detail/get-transfer-detail-by-no.html">通过微信明细单号查询明细单</a> |
| 330 | + * </p> |
| 331 | + * @return 对应的转账订单 |
| 332 | + */ |
| 333 | + @RequestMapping("getTransferDetailByNo") |
| 334 | + public Map<String, Object> getTransferDetailByNo() { |
| 335 | + WxTransferQueryOrder queryOrder = new WxTransferQueryOrder(); |
| 336 | + queryOrder.setBatchId("1030000071100999991182020050700019480001"); |
| 337 | + queryOrder.setDetailId("1040000071100999991182020050700019500100"); |
| 338 | + queryOrder.setTransactionType(WxTransferType.QUERY_BATCH_DETAIL_BY_BATCH_ID); |
| 339 | + return service.transferQuery(queryOrder); |
| 340 | + } |
| 341 | + /** |
| 342 | + * 通过商家明细单号查询明细单 |
| 343 | + * |
| 344 | + * <p> |
| 345 | + * <a href="https://pay.weixin.qq.com/docs/merchant/apis/batch-transfer-to-balance/transfer-detail/get-transfer-detail-by-out-no.html">通过商家明细单号查询明细单</a> |
| 346 | + * </p> |
| 347 | + * @return 对应的转账订单 |
| 348 | + */ |
| 349 | + @RequestMapping("getTransferDetailByOutNo") |
| 350 | + public Map<String, Object> getTransferDetailByOutNo() { |
| 351 | + WxTransferQueryOrder queryOrder = new WxTransferQueryOrder(); |
| 352 | + queryOrder.setOutDetailNo("x23zy545Bd5436"); |
| 353 | + queryOrder.setOutBatchNo("plfk2020042013"); |
| 354 | + queryOrder.setTransactionType(WxTransferType.QUERY_BATCH_DETAIL_BY_OUT_BATCH_NO); |
| 355 | + return service.transferQuery(queryOrder); |
| 356 | + } |
| 357 | + /** |
| 358 | + * 查询转账账单电子回单接口 |
| 359 | + * |
| 360 | + * <p> |
| 361 | + * <a href="https://pay.weixin.qq.com/docs/merchant/apis/batch-transfer-to-balance/transfer-detail/get-transfer-detail-by-out-no.html">查询转账账单电子回单接口</a> |
| 362 | + * </p> |
| 363 | + * @return 对应的转账订单 |
| 364 | + */ |
| 365 | + @RequestMapping("getElectronicSignatureByOutNo") |
| 366 | + public Map<String, Object> getElectronicSignatureByOutNo() { |
| 367 | + WxTransferQueryOrder queryOrder = new WxTransferQueryOrder(); |
| 368 | + queryOrder.setOutBatchNo("plfk2020042013"); |
| 369 | + queryOrder.setTransactionType(WxTransferType.QUERY_TRANSFER_BILL_RECEIPT); |
| 370 | + return service.transferQuery(queryOrder); |
| 371 | + } |
236 | 372 |
|
237 | 373 | }
|
0 commit comments