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"), 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; } } 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"); 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); 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(); 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)); UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/TinggPayoutUtil.java
New file @@ -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; } } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/AuthStatus.java
New file @@ -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; } } 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() { UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Credentials.java
New file @@ -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 + '\'' + '}'; } } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/ExtraData.java
New file @@ -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; } } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Packet.java
New file @@ -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 + '\'' + '}'; } } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayOutload.java
New file @@ -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; } } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payload.java
New file @@ -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 + '}'; } } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Payout.java
New file @@ -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; } } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackRequest.java
New file @@ -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; } } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutCallbackResponse.java
New file @@ -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; } } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutPacket.java
New file @@ -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 + '\'' + '}'; } } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/PayoutResponse.java
New file @@ -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; } } UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/Tingg/model/Results.java
New file @@ -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; } } 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: UserIGOTravel/guns-admin/src/test/java/com/stylefeng/guns/TestGunsApplication.java
New file @@ -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"); } } UserIGOTravel/guns-admin/src/test/sql/test.sql
File was deleted