From 9b426ebdbe9d283cd6f01719db9a00f2533df286 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期四, 18 五月 2023 16:41:21 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java | 12 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java | 2 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payout.java | 54 +++ UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutResponse.java | 35 ++ UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java | 28 + UserIGOTravel/guns-admin/src/test/java/com/stylefeng/guns/TestGunsApplication.java | 26 + UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Packet.java | 132 ++++++++ UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackResponse.java | 33 ++ UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Results.java | 56 +++ UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java | 21 + UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Credentials.java | 49 +++ UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/ExtraData.java | 27 + UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/CallbackRequest.java | 12 /dev/null | 35 -- UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payload.java | 51 +++ UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayUtil.java | 54 ++ UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayoutUtil.java | 75 ++++ UserIGOTravel/guns-admin/src/main/resources/application.yml | 28 DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/enums/BankEnum.java | 1 UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackRequest.java | 45 ++ UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutPacket.java | 93 +++++ UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/AuthStatus.java | 35 ++ UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayOutload.java | 33 ++ 23 files changed, 856 insertions(+), 81 deletions(-) diff --git a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/enums/BankEnum.java b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/enums/BankEnum.java index 485e059..cd33321 100644 --- a/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/enums/BankEnum.java +++ b/DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/enums/BankEnum.java @@ -8,7 +8,6 @@ */ @Getter public enum BankEnum { - KCB_BANK("0001", "KCB"), STANCHART_BANK("0002", "Stanchart"), ABSA_BANK("0003", "ABSA"), diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java index 49ad62e..02a55ca 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java @@ -16,10 +16,7 @@ import com.stylefeng.guns.modular.system.model.UserInfo; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.*; -import com.stylefeng.guns.modular.system.util.Tingg.model.CallbackRequest; -import com.stylefeng.guns.modular.system.util.Tingg.model.CallbackResponse; -import com.stylefeng.guns.modular.system.util.Tingg.model.CheckoutRequest; -import com.stylefeng.guns.modular.system.util.Tingg.model.Payments; +import com.stylefeng.guns.modular.system.util.Tingg.model.*; import com.stylefeng.guns.modular.system.warpper.*; import com.stylefeng.guns.modular.taxi.model.OrderTaxi; import com.stylefeng.guns.modular.taxi.model.TransactionDetails; @@ -1475,4 +1472,27 @@ e.printStackTrace(); } } + + + + @ResponseBody + @PostMapping("/base/IGO/tinggPayoutCallback") + public PayoutCallbackResponse tinggPayoutCallback(@RequestBody PayoutCallbackRequest request){ + System.err.println("转账回调>>>>" + JSON.toJSONString(request)); + PayoutCallbackResponse payoutCallbackResponse = new PayoutCallbackResponse(); + AuthStatus authStatus = new AuthStatus(); + authStatus.setAuthStatusCode(131); + authStatus.setAuthStatusDescription("Authentication was successful"); + payoutCallbackResponse.setAuthStatus(authStatus); + Results results = new Results(); + PayoutPacket packet = request.getPayload().getPacket(); + String beepTransactionID = packet.getBeepTransactionID(); + String payerTransactionID = packet.getPayerTransactionID(); + results.setBeepTransactionID(beepTransactionID); + results.setPayerTransactionID(payerTransactionID); + results.setStatusCode("188"); + results.setStatusDescription("Response was received"); + payoutCallbackResponse.setResults(results); + return payoutCallbackResponse; + } } diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java index bb369cd..e942298 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserCallbackController.java @@ -28,9 +28,6 @@ @Autowired private IUserInfoService userInfoService; - /*@Autowired - private ICBCPayUtil icbcPayUtil;*/ - @Autowired private PayMoneyUtil payMoneyUtil; @@ -41,8 +38,9 @@ * @param callbackRequest */ @ResponseBody - @PostMapping("/wxCancelUserBalance") + @PostMapping("/IGO/wxCancelUserBalance") public CallbackResponse wxCancelUserBalance(@RequestBody CallbackRequest callbackRequest){ + System.err.println("支付成功回调------>" + JSON.toJSONString(callbackRequest)); CallbackResponse callbackResponse = new CallbackResponse(); try { /** @@ -61,9 +59,9 @@ Payments payments = callbackRequest.getPayments().get(0); String order_id = payments.getPayer_transaction_id(); if(ToolUtil.isNotEmpty(out_trade_no)){ - Integer language = Integer.valueOf(out_trade_no.substring(17, 18)); - Integer id = Integer.valueOf(out_trade_no.substring(18)); - userInfoService.payCancelUserBalance(null, order_id, Integer.valueOf(id), 1, language); +// Integer language = Integer.valueOf(out_trade_no.substring(17, 18)); +// Integer id = Integer.valueOf(out_trade_no.substring(18)); +// userInfoService.payCancelUserBalance(null, order_id, Integer.valueOf(id), 1, language); callbackResponse.setCheckout_request_id(order_id); callbackResponse.setMerchant_transaction_id(out_trade_no); callbackResponse.setStatus_code("183"); diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java index 59f16db..6bd7e2b 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java @@ -491,7 +491,7 @@ CheckoutRequest checkoutRequest = new CheckoutRequest(); checkoutRequest.setMsisdn(Long.valueOf(userInfo.getPhone())); checkoutRequest.setCustomerEmail(userInfo.getEmail()); - checkoutRequest.setAccountNumber(accountNumber); + checkoutRequest.setAccountNumber(userInfo.getPhone()); checkoutRequest.setCustomerFirstName(userInfo.getFirstName()); checkoutRequest.setCustomerLastName(userInfo.getLastName()); checkoutRequest.setRequestAmount(orderMoney); diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java index ccbb289..1b6aab8 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/WithdrawalServiceImpl.java @@ -8,6 +8,10 @@ import com.stylefeng.guns.modular.system.service.IUserInfoService; import com.stylefeng.guns.modular.system.service.IWithdrawalService; import com.stylefeng.guns.modular.system.util.ResultUtil; +import com.stylefeng.guns.modular.system.util.Tingg.TinggPayoutUtil; +import com.stylefeng.guns.modular.system.util.Tingg.model.AuthStatus; +import com.stylefeng.guns.modular.system.util.Tingg.model.PayoutResponse; +import com.stylefeng.guns.modular.system.util.Tingg.model.Results; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; @@ -29,8 +33,8 @@ @Autowired private IUserInfoService userInfoService; - /* @Autowired - private ICBCPayUtil icbcPayUtil;*/ + @Autowired + private TinggPayoutUtil tinggPayoutUtil; private Map<String, Timer> timerMap = new HashMap<>(); @@ -70,8 +74,17 @@ withdrawal.setUserId(uid); withdrawal.setUserType(1); - /*ResultUtil<String> transfer = icbcPayUtil.transfer(Double.valueOf(withdrawal.getMoney() * 100).longValue(), withdrawal.getCode(), withdrawal.getName()); - withdrawal.setSerialNo(transfer.getData());*/ + PayoutResponse payoutResponse = tinggPayoutUtil.sendPayout("+233" + userInfo.getPhone(), withdrawal.getCode(), withdrawal.getMoney(), "", "用户提现"); + AuthStatus authStatus = payoutResponse.getAuthStatus(); + Results results = payoutResponse.getResults().get(0); + String statusCode = results.getStatusCode(); + if(!"131".equals(authStatus.getAuthStatusCode())){ + return ResultUtil.error(authStatus.getAuthStatusDescription()); + } + if(!"139".equals(statusCode)){ + return ResultUtil.error(results.getStatusDescription()); + } + withdrawal.setSerialNo(results.getBeepTransactionID()); this.insert(withdrawal); double v = new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayUtil.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayUtil.java index ab8458d..1b2ce68 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayUtil.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayUtil.java @@ -2,10 +2,16 @@ import com.alibaba.fastjson.JSON; import com.stylefeng.guns.modular.system.util.ResultUtil; +import com.stylefeng.guns.modular.system.util.Tingg.model.CallbackRequest; import com.stylefeng.guns.modular.system.util.Tingg.model.CheckoutRequest; import io.cellulant.model.Payload; import io.cellulant.service.CheckoutEncryption; +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.text.SimpleDateFormat; import java.util.*; @@ -14,11 +20,11 @@ */ public class TinggPayUtil { - private static String accessKey = "KxjPP444jEE7K88E7juej4PKqqzKq7qKjKj84q744q9zj4Ej4zK47uj4KKj4"; + private static String accessKey = "8rc1gTV9n91Tc1Sy9oVWry99fgrgrVV8concf9onWooWSg9TVW8nSgo98g88"; - private static String ivKey = "qsffKsCOJJdhSBCQ"; + private static String ivKey = "ABp0pqpHMteEJM2N"; - private static String secretKey = "9jjz4Ex74P8ue4qK"; + private static String secretKey = "rf8Vo1n9yTSW98cg"; /** @@ -32,7 +38,7 @@ Payload payload = getPayload(checkoutRequest); String param = checkoutEncrption.encrypt(payload); System.out.println("Encrpted payload=" + param); - String url = "https://online.uat.tingg.africa/testing/express/checkout?encrypted_payload=" + param + "&access_key=" + accessKey; + String url = "https://checkout.tingg.africa/express/checkout?encrypted_payload=" + param + "&access_key=" + accessKey; return ResultUtil.success(url); }catch (Exception e){ e.printStackTrace(); @@ -47,7 +53,7 @@ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String countryCode="GHA";//收取付款的国家的3位ISO代码 String currencyCode = "GHS";//3位ISO代码的货币,商家正在开发票。 - String serviceCode="IGOGHANA";//服务代码 + String serviceCode="I-GO_TECHNOLOGIES_LI";//服务代码 String dueDate = sdf.format(new Date(System.currentTimeMillis() + 1800000));//到期时间 String languageCode="EN"; String paymentOptionCode = "";//支付选项码 @@ -59,19 +65,41 @@ } + public static CallbackRequest getRequestParam(HttpServletRequest request) throws IOException { + // 读取参数 + InputStream inputStream; + StringBuilder sb = new StringBuilder(); + inputStream = request.getInputStream(); + String s; + BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); + while ((s = in.readLine()) != null) { + sb.append(s); + } + in.close(); + inputStream.close(); + String json = sb.toString(); + System.err.println("结果-----》" + json); + CallbackRequest callbackRequest = JSON.parseObject(json, CallbackRequest.class); + + return callbackRequest; + } + + + + public static void main(String[] ages){ CheckoutRequest checkoutRequest = new CheckoutRequest(); - checkoutRequest.setMsisdn(233240000000L); + checkoutRequest.setMsisdn(Long.valueOf("233244915521")); checkoutRequest.setCustomerEmail("393733352@qq.com"); - checkoutRequest.setAccountNumber("4111111111111111"); - checkoutRequest.setCustomerFirstName("zhibing"); - checkoutRequest.setCustomerLastName("pu"); + checkoutRequest.setAccountNumber("233244915521"); + checkoutRequest.setCustomerFirstName("XIONG"); + checkoutRequest.setCustomerLastName("GOU"); checkoutRequest.setRequestAmount(1.00D); - checkoutRequest.setMerchantTransactionId("123456T"); + checkoutRequest.setMerchantTransactionId("00016"); checkoutRequest.setRequestDescription("payment test"); - checkoutRequest.setCallbackUrl("https://10pz685243.zicp.fun"); - checkoutRequest.setPendingRedirectUrl("https://10pz685243.zicp.fun"); - checkoutRequest.setSuccessRedirectUrl("https://10pz685243.zicp.fun"); + checkoutRequest.setCallbackUrl("https://10pz685243.zicp.fun/base/IGO/wxCancelUserBalance"); + checkoutRequest.setPendingRedirectUrl("https://www.baidu.com"); + checkoutRequest.setSuccessRedirectUrl("https://www.baidu.com"); checkoutRequest.setFailRedirectUrl("https://www.baidu.com"); ResultUtil resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest); System.err.println(JSON.toJSONString(resultUtil)); diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayoutUtil.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayoutUtil.java new file mode 100644 index 0000000..5a72d56 --- /dev/null +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayoutUtil.java @@ -0,0 +1,75 @@ +package com.stylefeng.guns.modular.system.util.Tingg; + +import com.alibaba.fastjson.JSON; +import com.stylefeng.guns.modular.system.util.HttpClientUtil; +import com.stylefeng.guns.modular.system.util.ResultUtil; +import com.stylefeng.guns.modular.system.util.Tingg.model.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * 转账 + * @author zhibing.pu + * @date 2023/3/17 9:48 + */ +@Component +public class TinggPayoutUtil { + + @Autowired + private RestTemplate restTemplate; + + + /** + * 转账接口 + * @param phone 电话号码,带国家代码+233 + * @param payerTransactionID 支付单号 + * @param amount 支付金额 + * @param callbackUrl 回调地址 + * @param narration 备注 + * @return + */ + public PayoutResponse sendPayout(String phone, String payerTransactionID, Double amount, String callbackUrl, String narration) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Credentials credentials = new Credentials("igo_api_user", "mXo%kJM.p;_i)SSZ&^b?6XSH)D+OCPh8"); + List<Packet> packets = new ArrayList<>(); + Packet packet = new Packet(); + packet.setServiceCode("GH-TIGO-B2C");//手机网络运营商 GH-MTN-B2C、GH-TIGO-B2C、GH-VODAFONE-B2C、GH-AIRTEL-B2C + packet.setMSISDN(phone); + packet.setAccountNumber(phone); + packet.setPayerTransactionID(payerTransactionID); + packet.setAmount(amount); + packet.setNarration(narration); + packet.setDatePaymentReceived(sdf.format(new Date())); + packet.setExtraData(new ExtraData(callbackUrl)); + packet.setCurrencyCode("GHS"); + packets.add(packet); + Payload payload = new Payload(credentials, packets); + Payout payout = new Payout("GH", "BEEP.postPayment", payload); + String string = JSON.toJSONString(payout); + string = string.replace("mSISDN", "MSISDN"); + System.err.println(string); + HttpHeaders headers = new HttpHeaders(); + MediaType type = MediaType.parseMediaType("text/plain"); + headers.setContentType(type); + headers.add("Accept", MediaType.APPLICATION_JSON.toString()); + HttpEntity<String> formEntity = new HttpEntity<>(string, headers); + + String url = "https://apps.cellulant.co.ke:9801/globalApi/v2/JSON/"; + String s = restTemplate.postForObject(url, formEntity, String.class); + PayoutResponse payoutResponse = JSON.parseObject(s, PayoutResponse.class); + System.err.println(s); + return payoutResponse; + } + + + +} diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/AuthStatus.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/AuthStatus.java new file mode 100644 index 0000000..febc11c --- /dev/null +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/AuthStatus.java @@ -0,0 +1,35 @@ +package com.stylefeng.guns.modular.system.util.Tingg.model; + +/** + * @author zhibing.pu + * @date 2023/3/20 16:52 + */ +public class AuthStatus { + /** + * 认证状态码 + * 131 客户端认证成功 + * 132 客户端认证失败 + * 174 具有匹配的适当描述的通用故障状态代码 + */ + private Integer authStatusCode; + /** + * 账号认证说明 + */ + private String authStatusDescription; + + public Integer getAuthStatusCode() { + return authStatusCode; + } + + public void setAuthStatusCode(Integer authStatusCode) { + this.authStatusCode = authStatusCode; + } + + public String getAuthStatusDescription() { + return authStatusDescription; + } + + public void setAuthStatusDescription(String authStatusDescription) { + this.authStatusDescription = authStatusDescription; + } +} diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/CallbackRequest.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/CallbackRequest.java index 919d015..305ef4f 100644 --- a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/CallbackRequest.java +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/CallbackRequest.java @@ -1,8 +1,11 @@ package com.stylefeng.guns.modular.system.util.Tingg.model; + +import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; +import java.util.Locale; /** @@ -177,8 +180,13 @@ return request_date; } - public void setRequest_date(Date request_date) { - this.request_date = request_date; + public void setRequest_date(String request_date) { + try { + SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH); + this.request_date = format.parse(request_date); + }catch (Exception e){ + e.printStackTrace(); + } } public String getService_code() { diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Credentials.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Credentials.java new file mode 100644 index 0000000..c984aba --- /dev/null +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Credentials.java @@ -0,0 +1,49 @@ +package com.stylefeng.guns.modular.system.util.Tingg.model; + +/** + * 凭证 + * @author zhibing.pu + * @date 2023/3/17 9:53 + */ +public class Credentials { + /** + * 用户名称 + */ + private String username; + /** + * 密码 + */ + private String password; + + public Credentials() { + } + + public Credentials(String username, String password) { + this.username = username; + this.password = password; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public String toString() { + return "Credentials{" + + "username='" + username + '\'' + + ", password='" + password + '\'' + + '}'; + } +} diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/ExtraData.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/ExtraData.java new file mode 100644 index 0000000..4fdfc49 --- /dev/null +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/ExtraData.java @@ -0,0 +1,27 @@ +package com.stylefeng.guns.modular.system.util.Tingg.model; + +/** + * @author zhibing.pu + * @date 2023/3/17 10:13 + */ +public class ExtraData { + /** + * 回调地址 + */ + private String callbackUrl; + + public ExtraData() { + } + + public ExtraData(String callbackUrl) { + this.callbackUrl = callbackUrl; + } + + public String getCallbackUrl() { + return callbackUrl; + } + + public void setCallbackUrl(String callbackUrl) { + this.callbackUrl = callbackUrl; + } +} diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Packet.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Packet.java new file mode 100644 index 0000000..ff74346 --- /dev/null +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Packet.java @@ -0,0 +1,132 @@ +package com.stylefeng.guns.modular.system.util.Tingg.model; + +/** + * 实体包信息 + * @author zhibing.pu + * @date 2023/3/17 9:56 + */ +public class Packet { + /** + * 服务产品代码 + */ + private String serviceCode; + /** + * 进行支付的客户的手机号码。MSISDN应以国家代码开头,例如254xxxxxxxxx + */ + private String MSISDN; + /** + * 账号为收款账号。如果是手机号码,则应以国家代码开头,例如254xxxxxxxxx + */ + private String accountNumber; + /** + * 由银行为该事务生成的惟一transactionID。 + */ + private String payerTransactionID; + /** + * 客户支付的金额 + */ + private Double amount; + /** + * 备注信息 + */ + private String narration; + /** + * 付款人收到付款的日期。yyyy-mm-dd hh: mm: ss。 + */ + private String datePaymentReceived; + /** + * 额外数据 + */ + private ExtraData extraData; + /** + * 交易货币的 ISO 代码。 + */ + private String currencyCode; + + public String getServiceCode() { + return serviceCode; + } + + public void setServiceCode(String serviceCode) { + this.serviceCode = serviceCode; + } + + public String getMSISDN() { + return MSISDN; + } + + public void setMSISDN(String MSISDN) { + this.MSISDN = MSISDN; + } + + public String getAccountNumber() { + return accountNumber; + } + + public void setAccountNumber(String accountNumber) { + this.accountNumber = accountNumber; + } + + public String getPayerTransactionID() { + return payerTransactionID; + } + + public void setPayerTransactionID(String payerTransactionID) { + this.payerTransactionID = payerTransactionID; + } + + public Double getAmount() { + return amount; + } + + public void setAmount(Double amount) { + this.amount = amount; + } + + public String getNarration() { + return narration; + } + + public void setNarration(String narration) { + this.narration = narration; + } + + public String getDatePaymentReceived() { + return datePaymentReceived; + } + + public void setDatePaymentReceived(String datePaymentReceived) { + this.datePaymentReceived = datePaymentReceived; + } + + public ExtraData getExtraData() { + return extraData; + } + + public void setExtraData(ExtraData extraData) { + this.extraData = extraData; + } + + public String getCurrencyCode() { + return currencyCode; + } + + public void setCurrencyCode(String currencyCode) { + this.currencyCode = currencyCode; + } + + @Override + public String toString() { + return "Packet{" + + "serviceCode='" + serviceCode + '\'' + + ", MSISDN='" + MSISDN + '\'' + + ", accountNumber='" + accountNumber + '\'' + + ", payerTransactionID='" + payerTransactionID + '\'' + + ", amount=" + amount + + ", narration='" + narration + '\'' + + ", datePaymentReceived='" + datePaymentReceived + '\'' + + ", extraData=" + extraData + + ", currencyCode='" + currencyCode + '\'' + + '}'; + } +} diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayOutload.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayOutload.java new file mode 100644 index 0000000..aada462 --- /dev/null +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayOutload.java @@ -0,0 +1,33 @@ +package com.stylefeng.guns.modular.system.util.Tingg.model; + + +/** + * @author zhibing.pu + * @date 2023/3/20 16:33 + */ +public class PayOutload { + /** + * 凭证 + */ + private Credentials credentials; + /** + * 实体包信息 + */ + private PayoutPacket packet; + + public Credentials getCredentials() { + return credentials; + } + + public void setCredentials(Credentials credentials) { + this.credentials = credentials; + } + + public PayoutPacket getPacket() { + return packet; + } + + public void setPacket(PayoutPacket packet) { + this.packet = packet; + } +} diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payload.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payload.java new file mode 100644 index 0000000..87dad6f --- /dev/null +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payload.java @@ -0,0 +1,51 @@ +package com.stylefeng.guns.modular.system.util.Tingg.model; + +import java.util.List; + +/** + * 退款实体 + * @author zhibing.pu + * @date 2023/3/17 9:51 + */ +public class Payload { + /** + * 凭证 + */ + private Credentials credentials; + /** + * 实体包信息 + */ + private List<Packet> packet; + + public Payload() { + } + + public Payload(Credentials credentials, List<Packet> packet) { + this.credentials = credentials; + this.packet = packet; + } + + public Credentials getCredentials() { + return credentials; + } + + public void setCredentials(Credentials credentials) { + this.credentials = credentials; + } + + public List<Packet> getPacket() { + return packet; + } + + public void setPacket(List<Packet> packet) { + this.packet = packet; + } + + @Override + public String toString() { + return "Payload{" + + "credentials=" + credentials + + ", packet=" + packet + + '}'; + } +} diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payout.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payout.java new file mode 100644 index 0000000..8e14711 --- /dev/null +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payout.java @@ -0,0 +1,54 @@ +package com.stylefeng.guns.modular.system.util.Tingg.model; + +/** + * 退款 + * @author zhibing.pu + * @date 2023/3/17 9:49 + */ +public class Payout { + /** + * 国家代码 + */ + private String countryCode; + /** + * 接口类型 + */ + private String function; + /** + * 参数实体 + */ + private Payload payload; + + public Payout() { + } + + public Payout(String countryCode, String function, Payload payload) { + this.countryCode = countryCode; + this.function = function; + this.payload = payload; + } + + public String getCountryCode() { + return countryCode; + } + + public void setCountryCode(String countryCode) { + this.countryCode = countryCode; + } + + public String getFunction() { + return function; + } + + public void setFunction(String function) { + this.function = function; + } + + public Payload getPayload() { + return payload; + } + + public void setPayload(Payload payload) { + this.payload = payload; + } +} diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackRequest.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackRequest.java new file mode 100644 index 0000000..64916b2 --- /dev/null +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackRequest.java @@ -0,0 +1,45 @@ +package com.stylefeng.guns.modular.system.util.Tingg.model; + +/** + * 转账回调请求 + * @author zhibing.pu + * @date 2023/3/20 16:31 + */ +public class PayoutCallbackRequest { + /** + * 国家代码 + */ + private String countryCode; + /** + * 调用函数 + */ + private String function; + /** + * 数据 + */ + private PayOutload payload; + + public String getCountryCode() { + return countryCode; + } + + public void setCountryCode(String countryCode) { + this.countryCode = countryCode; + } + + public String getFunction() { + return function; + } + + public void setFunction(String function) { + this.function = function; + } + + public PayOutload getPayload() { + return payload; + } + + public void setPayload(PayOutload payload) { + this.payload = payload; + } +} diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackResponse.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackResponse.java new file mode 100644 index 0000000..50ef0dd --- /dev/null +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackResponse.java @@ -0,0 +1,33 @@ +package com.stylefeng.guns.modular.system.util.Tingg.model; + +/** + * 转账回调反馈 + * @author zhibing.pu + * @date 2023/3/20 16:40 + */ +public class PayoutCallbackResponse { + /** + * 认证状态及说明 + */ + private AuthStatus authStatus; + /** + * + */ + private Results results; + + public AuthStatus getAuthStatus() { + return authStatus; + } + + public void setAuthStatus(AuthStatus authStatus) { + this.authStatus = authStatus; + } + + public Results getResults() { + return results; + } + + public void setResults(Results results) { + this.results = results; + } +} diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutPacket.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutPacket.java new file mode 100644 index 0000000..b69b9d7 --- /dev/null +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutPacket.java @@ -0,0 +1,93 @@ +package com.stylefeng.guns.modular.system.util.Tingg.model; + +/** + * 实体包信息 + * @author zhibing.pu + * @date 2023/3/17 9:56 + */ +public class PayoutPacket { + /** + * 返回状态 + */ + private String statusCode; + /** + * 状态说明 + */ + private String statusDescription; + /** + * 正在支付账号。如果是手机号码,应该以国家代码开头,例如2547xxxxxxxx + */ + private String beepTransactionID; + /** + * 由银行为该事务生成的惟一transactionID。 + */ + private String payerTransactionID; + /** + * 客户支付的金额。 + */ + private String receiptNumber; + /** + * 正在付款的叙述。 + */ + private String receiverNarration; + + public String getStatusCode() { + return statusCode; + } + + public void setStatusCode(String statusCode) { + this.statusCode = statusCode; + } + + public String getStatusDescription() { + return statusDescription; + } + + public void setStatusDescription(String statusDescription) { + this.statusDescription = statusDescription; + } + + public String getBeepTransactionID() { + return beepTransactionID; + } + + public void setBeepTransactionID(String beepTransactionID) { + this.beepTransactionID = beepTransactionID; + } + + public String getPayerTransactionID() { + return payerTransactionID; + } + + public void setPayerTransactionID(String payerTransactionID) { + this.payerTransactionID = payerTransactionID; + } + + public String getReceiptNumber() { + return receiptNumber; + } + + public void setReceiptNumber(String receiptNumber) { + this.receiptNumber = receiptNumber; + } + + public String getReceiverNarration() { + return receiverNarration; + } + + public void setReceiverNarration(String receiverNarration) { + this.receiverNarration = receiverNarration; + } + + @Override + public String toString() { + return "PayoutPacket{" + + "statusCode='" + statusCode + '\'' + + ", statusDescription='" + statusDescription + '\'' + + ", beepTransactionID='" + beepTransactionID + '\'' + + ", payerTransactionID='" + payerTransactionID + '\'' + + ", receiptNumber='" + receiptNumber + '\'' + + ", receiverNarration='" + receiverNarration + '\'' + + '}'; + } +} diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutResponse.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutResponse.java new file mode 100644 index 0000000..37b7f5c --- /dev/null +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutResponse.java @@ -0,0 +1,35 @@ +package com.stylefeng.guns.modular.system.util.Tingg.model; + +import java.util.List; + +/** + * 转账回调反馈 + * @author zhibing.pu + * @date 2023/3/20 16:40 + */ +public class PayoutResponse { + /** + * 认证状态及说明 + */ + private AuthStatus authStatus; + /** + * + */ + private List<Results> results; + + public AuthStatus getAuthStatus() { + return authStatus; + } + + public void setAuthStatus(AuthStatus authStatus) { + this.authStatus = authStatus; + } + + public List<Results> getResults() { + return results; + } + + public void setResults(List<Results> results) { + this.results = results; + } +} diff --git a/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Results.java b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Results.java new file mode 100644 index 0000000..0023e15 --- /dev/null +++ b/UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Results.java @@ -0,0 +1,56 @@ +package com.stylefeng.guns.modular.system.util.Tingg.model; + +/** + * @author zhibing.pu + * @date 2023/3/20 16:55 + */ +public class Results { + /** + * beep流水ID + */ + private String beepTransactionID; + /** + * 交易id + */ + private String payerTransactionID; + /** + * 188 + */ + private String statusCode; + /** + * 状态说明 + */ + private String statusDescription; + + public String getBeepTransactionID() { + return beepTransactionID; + } + + public void setBeepTransactionID(String beepTransactionID) { + this.beepTransactionID = beepTransactionID; + } + + public String getPayerTransactionID() { + return payerTransactionID; + } + + public void setPayerTransactionID(String payerTransactionID) { + this.payerTransactionID = payerTransactionID; + } + + public String getStatusCode() { + return statusCode; + } + + public void setStatusCode(String statusCode) { + this.statusCode = statusCode; + } + + public String getStatusDescription() { + return statusDescription; + } + + public void setStatusDescription(String statusDescription) { + this.statusDescription = statusDescription; + } +} diff --git a/UserIGOTravel/guns-admin/src/main/resources/application.yml b/UserIGOTravel/guns-admin/src/main/resources/application.yml index f133d11..8e0b942 100644 --- a/UserIGOTravel/guns-admin/src/main/resources/application.yml +++ b/UserIGOTravel/guns-admin/src/main/resources/application.yml @@ -1,5 +1,5 @@ server: - port: 8006 + port: 82 guns: swagger-open: true #是否开启swagger (true/false) @@ -13,8 +13,8 @@ application: name: user-server profiles: -# active: dev - active: produce + active: dev +# active: produce mvc: static-path-pattern: /static/** view: @@ -50,24 +50,24 @@ base-package: com.stylefeng.guns.modular -spring: - datasource: - url: jdbc:mysql://127.0.0.1:3306/igotravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai - username: root - password: HjKbXilb9zajmXbl - db-name: guns #用来搜集数据库的所有表 - filters: wall,mergeStat - - -################# 测试环境 ################### #spring: # datasource: # url: jdbc:mysql://127.0.0.1:3306/igotravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai # username: root -# password: 123456 +# password: HjKbXilb9zajmXbl # db-name: guns #用来搜集数据库的所有表 # filters: wall,mergeStat + +################# 测试环境 ################### +spring: + datasource: + url: jdbc:mysql://127.0.0.1:3306/igotravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai + username: root + password: 123456 + db-name: guns #用来搜集数据库的所有表 + filters: wall,mergeStat + #多数据源情况的配置 guns: muti-datasource: diff --git a/UserIGOTravel/guns-admin/src/test/java/com/stylefeng/guns/TestGunsApplication.java b/UserIGOTravel/guns-admin/src/test/java/com/stylefeng/guns/TestGunsApplication.java new file mode 100644 index 0000000..c939120 --- /dev/null +++ b/UserIGOTravel/guns-admin/src/test/java/com/stylefeng/guns/TestGunsApplication.java @@ -0,0 +1,26 @@ +package com.stylefeng.guns; + +import com.stylefeng.guns.modular.system.util.Tingg.TinggPayoutUtil; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * @author zhibing.pu + * @date 2023/3/17 11:27 + */ +@RunWith(SpringRunner.class) +@SpringBootTest +public class TestGunsApplication { + + @Autowired + private TinggPayoutUtil tinggPayoutUtil; + + + @Test + public void test(){ + tinggPayoutUtil.sendPayout("+233277211131", "00007", 1D, "https://10pz685243.zicp.fun/base/IGO/tinggPayoutCallback", "Transfer remittance"); + } +} diff --git a/UserIGOTravel/guns-admin/src/test/sql/test.sql b/UserIGOTravel/guns-admin/src/test/sql/test.sql deleted file mode 100644 index 04b15ca..0000000 --- a/UserIGOTravel/guns-admin/src/test/sql/test.sql +++ /dev/null @@ -1,35 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : localhost - Source Server Type : MySQL - Source Server Version : 50719 - Source Host : localhost:3306 - Source Schema : guns - - Target Server Type : MySQL - Target Server Version : 50719 - File Encoding : 65001 - - Date: 10/07/2018 14:09:19 -*/ - -DROP DATABASE IF EXISTS guns_test; -CREATE DATABASE IF NOT EXISTS guns_test DEFAULT CHARSET utf8 COLLATE utf8_general_ci; - -use guns_test; - -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - --- ---------------------------- --- Table structure for test --- ---------------------------- -DROP TABLE IF EXISTS `test`; -CREATE TABLE `test` ( - `aaa` int(11) NOT NULL AUTO_INCREMENT, - `bbb` varchar(255) DEFAULT NULL, - PRIMARY KEY (`aaa`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC; - -SET FOREIGN_KEY_CHECKS = 1; -- Gitblit v1.7.1