Fixing .gitignore

This commit is contained in:
wangjinlei
2023-09-19 18:24:19 +08:00
parent 06e2f68ad9
commit ae15750e6a
581 changed files with 67226 additions and 67275 deletions

View File

@@ -1,150 +1,150 @@
package com.peanut.modules.pay.applePay.controller;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.peanut.common.utils.R;
import com.peanut.modules.pay.applePay.service.ApplePayService;
import com.peanut.modules.pay.applePay.utils.ApplePayUtil;
import com.peanut.modules.pay.applePay.utils.IPayNotifyPo;
import com.peanut.modules.pay.IOSPay.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestController
@Api(tags = {"苹果内购"})
@RequestMapping(value = "/apple")
public class ApplePayController {
@Autowired
ApplePayService applePayService;
@Autowired
ApplePayUtil applePayUtil;
/**
* @param :TransactionID订单号
* @param :receipt订单加密收据
* @Description: Ios客户端内购支付
*/
// @PostMapping 文档显示都是post请求
@RequestMapping("/applePay")
public R doIosRequest(@RequestParam("receipt") String receipt, @RequestParam("TransactionID") String TransactionID) {
String verifyResult = applePayUtil.buyAppVerify(receipt, 0);
//苹果服务器没有返回验证结果
if (verifyResult == null) {
return R.error(500,"服务器未接收到验证结果!");
// return Result.failed(ResultCode.APPLE_NULL);
} else {
//
return applePayService.getAppPay(verifyResult, TransactionID);
// return applePayService.doIosRequest(TransactionID,receipt,userId);
}
}
/**
* IOS支付成功后通过APP回调服务器
*
* @param iPayNotifyPo
* @return
*/
@ApiOperation("ios支付成功后验证结果")
@RequestMapping(value = "iPayNotify/", method = RequestMethod.POST)
@ResponseBody
public Result<Object> iPayNotify(@RequestBody IPayNotifyPo iPayNotifyPo) {
log.info("ios支付成功后验证结果[前端传递的ios支付参数:{}]", iPayNotifyPo.toString());
System.out.println("支付");
String receipt = iPayNotifyPo.getTransactionReceipt();
// 拿到收据的MD5
String receiptMd5 = SecureUtil.md5(receipt);
// 查询数据库,看是否是己经验证过的该支付收据
// boolean existsIOSReceipt = paymentService.isExistsIOSReceipt(receiptMd5);
// if (existsIOSReceipt) {
// return Result.error("该充值已完成");
// }
// 1.先线上测试 发送平台验证
String verifyResult = ApplePayUtil.buyAppVerify(receipt, 0);
log.info("1苹果返回的参数:{}]", verifyResult);
if (verifyResult == null) {
// 苹果服务器没有返回验证结果
log.info("苹果服务器没有返回验证结果");
return Result.error("订单没有找到");
} else {
// 苹果验证有返回结果
JSONObject job = JSONUtil.parseObj(verifyResult);
log.info("2[苹果验证返回的json串:{}]", job.toString());
String states = job.getStr("status");
if ("21007".equals(states)) {
log.debug("是沙盒环境,应沙盒测试,否则执行下面");
// 是沙盒环境,应沙盒测试,否则执行下面
// 2.再沙盒测试 发送平台验证
verifyResult = ApplePayUtil.buyAppVerify(receipt, 0);
job = JSONUtil.parseObj(verifyResult);
log.debug("3沙盒环境验证返回的json字符串=" + job.toString());
states = job.getStr("status");
}
if ("0".equals(states)) { // 前端所提供的收据是有效的 验证成功
log.debug("前端所提供的收据是有效的 验证成功");
String r_receipt = job.getStr("receipt");
JSONObject returnJson = JSONUtil.parseObj(r_receipt);
String in_app = returnJson.getStr("in_app");
/**
* in_app说明
* 验证票据返回的receipt里面的in_app字段这个字段包含了所有你未完成交易的票据信息。也就是在上面说到的APP完成交易之后这个票据信息就会从in_app中消失。
* 如果APP不完成交易这个票据信息就会在in_app中一直保留。(这个情况可能仅限于你的商品类型为消耗型)
*
* 知道了事件的原委就很好优化解决了方案有2个
* 1.对票据返回的in_app数据全部进行处理没有充值的全部进行充值
* 2.仅对最新的充值信息进行处理(我们采取的方案)
*
* 因为采用一方案:
* 如果用户仅进行了一次充值,该充值未到账,他不再进行充值了,那么会无法导致。
* 如果他通过客服的途径已经进行了补充充值,那么他在下一次充值的时候依旧会把之前的产品票据带回,这时候有可能出现重复充值的情况
*
* 以上说明是我在网上找到的,可以查看原文
* https://www.cnblogs.com/widgetbox/p/8241333.html
*/
JSONArray jsonArray = JSONUtil.parseArray(in_app);
if (jsonArray.size() > 0) {
int index = 0;
JSONObject o = JSONUtil.parseObj(jsonArray.get(index));
String transaction_id = o.getStr("transaction_id"); // 订单号
String product_id = o.getStr("product_id"); // 产品id也就是支付金额
String purchase_date_ms = o.getStr("purchase_date_ms"); // 支付时间
//
// // 添加支付金额
// Result<Object> iosChargeSuccess = paymentService.iosChargeSuccess(transaction_id, product_id, purchase_date_ms, receiptMd5, iPayNotifyPo.getMoneyId(), iPayNotifyPo.getUserId());
// int i =0;
// int a = 0;
// if (iosChargeSuccess.getCode().equals(200)){
// i = paymentService.updateCurrentState(iPayNotifyPo.getPayId(),iPayNotifyPo.getUserId(),a);
// }else {
// a = 1;
// i = paymentService.updateCurrentState(iPayNotifyPo.getPayId(),iPayNotifyPo.getUserId(),a);
// }
//
// return iosChargeSuccess;
}
} else {
return Result.error("收到数据有误");
}
}
return Result.ok();
}
}
package com.peanut.modules.pay.applePay.controller;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.peanut.common.utils.R;
import com.peanut.modules.pay.applePay.service.ApplePayService;
import com.peanut.modules.pay.applePay.utils.ApplePayUtil;
import com.peanut.modules.pay.applePay.utils.IPayNotifyPo;
import com.peanut.modules.pay.IOSPay.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestController
@Api(tags = {"苹果内购"})
@RequestMapping(value = "/apple")
public class ApplePayController {
@Autowired
ApplePayService applePayService;
@Autowired
ApplePayUtil applePayUtil;
/**
* @param :TransactionID订单号
* @param :receipt订单加密收据
* @Description: Ios客户端内购支付
*/
// @PostMapping 文档显示都是post请求
@RequestMapping("/applePay")
public R doIosRequest(@RequestParam("receipt") String receipt, @RequestParam("TransactionID") String TransactionID) {
String verifyResult = applePayUtil.buyAppVerify(receipt, 0);
//苹果服务器没有返回验证结果
if (verifyResult == null) {
return R.error(500,"服务器未接收到验证结果!");
// return Result.failed(ResultCode.APPLE_NULL);
} else {
//
return applePayService.getAppPay(verifyResult, TransactionID);
// return applePayService.doIosRequest(TransactionID,receipt,userId);
}
}
/**
* IOS支付成功后通过APP回调服务器
*
* @param iPayNotifyPo
* @return
*/
@ApiOperation("ios支付成功后验证结果")
@RequestMapping(value = "iPayNotify/", method = RequestMethod.POST)
@ResponseBody
public Result<Object> iPayNotify(@RequestBody IPayNotifyPo iPayNotifyPo) {
log.info("ios支付成功后验证结果[前端传递的ios支付参数:{}]", iPayNotifyPo.toString());
System.out.println("支付");
String receipt = iPayNotifyPo.getTransactionReceipt();
// 拿到收据的MD5
String receiptMd5 = SecureUtil.md5(receipt);
// 查询数据库,看是否是己经验证过的该支付收据
// boolean existsIOSReceipt = paymentService.isExistsIOSReceipt(receiptMd5);
// if (existsIOSReceipt) {
// return Result.error("该充值已完成");
// }
// 1.先线上测试 发送平台验证
String verifyResult = ApplePayUtil.buyAppVerify(receipt, 0);
log.info("1苹果返回的参数:{}]", verifyResult);
if (verifyResult == null) {
// 苹果服务器没有返回验证结果
log.info("苹果服务器没有返回验证结果");
return Result.error("订单没有找到");
} else {
// 苹果验证有返回结果
JSONObject job = JSONUtil.parseObj(verifyResult);
log.info("2[苹果验证返回的json串:{}]", job.toString());
String states = job.getStr("status");
if ("21007".equals(states)) {
log.debug("是沙盒环境,应沙盒测试,否则执行下面");
// 是沙盒环境,应沙盒测试,否则执行下面
// 2.再沙盒测试 发送平台验证
verifyResult = ApplePayUtil.buyAppVerify(receipt, 0);
job = JSONUtil.parseObj(verifyResult);
log.debug("3沙盒环境验证返回的json字符串=" + job.toString());
states = job.getStr("status");
}
if ("0".equals(states)) { // 前端所提供的收据是有效的 验证成功
log.debug("前端所提供的收据是有效的 验证成功");
String r_receipt = job.getStr("receipt");
JSONObject returnJson = JSONUtil.parseObj(r_receipt);
String in_app = returnJson.getStr("in_app");
/**
* in_app说明
* 验证票据返回的receipt里面的in_app字段这个字段包含了所有你未完成交易的票据信息。也就是在上面说到的APP完成交易之后这个票据信息就会从in_app中消失。
* 如果APP不完成交易这个票据信息就会在in_app中一直保留。(这个情况可能仅限于你的商品类型为消耗型)
*
* 知道了事件的原委就很好优化解决了方案有2个
* 1.对票据返回的in_app数据全部进行处理没有充值的全部进行充值
* 2.仅对最新的充值信息进行处理(我们采取的方案)
*
* 因为采用一方案:
* 如果用户仅进行了一次充值,该充值未到账,他不再进行充值了,那么会无法导致。
* 如果他通过客服的途径已经进行了补充充值,那么他在下一次充值的时候依旧会把之前的产品票据带回,这时候有可能出现重复充值的情况
*
* 以上说明是我在网上找到的,可以查看原文
* https://www.cnblogs.com/widgetbox/p/8241333.html
*/
JSONArray jsonArray = JSONUtil.parseArray(in_app);
if (jsonArray.size() > 0) {
int index = 0;
JSONObject o = JSONUtil.parseObj(jsonArray.get(index));
String transaction_id = o.getStr("transaction_id"); // 订单号
String product_id = o.getStr("product_id"); // 产品id也就是支付金额
String purchase_date_ms = o.getStr("purchase_date_ms"); // 支付时间
//
// // 添加支付金额
// Result<Object> iosChargeSuccess = paymentService.iosChargeSuccess(transaction_id, product_id, purchase_date_ms, receiptMd5, iPayNotifyPo.getMoneyId(), iPayNotifyPo.getUserId());
// int i =0;
// int a = 0;
// if (iosChargeSuccess.getCode().equals(200)){
// i = paymentService.updateCurrentState(iPayNotifyPo.getPayId(),iPayNotifyPo.getUserId(),a);
// }else {
// a = 1;
// i = paymentService.updateCurrentState(iPayNotifyPo.getPayId(),iPayNotifyPo.getUserId(),a);
// }
//
// return iosChargeSuccess;
}
} else {
return Result.error("收到数据有误");
}
}
return Result.ok();
}
}

View File

@@ -1,133 +1,133 @@
package com.peanut.modules.pay.applePay.controller;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.commons.lang.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.RestController;
/**
* @author :
* @date :
* @Version: 1.0
* @Desc : 苹果支付 参考地址https://www.cnblogs.com/shoshana-kong/p/10991753.html
* sendHttpsCoon 方法里面包含了增加的业务逻辑
* 本类引入多种的Json序列化工具选择了Hutool
*/
@RestController
@RequestMapping("iap")
public class IapController {
//购买凭证验证地址
private static final String certificateUrl = "https://buy.itunes.apple.com/verifyReceipt";
//测试的购买凭证验证地址
private static final String certificateUrlTest = "https://sandbox.itunes.apple.com/verifyReceipt";
/**
* 重写X509TrustManager
*/
private static TrustManager myX509TrustManager = new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
};
/**
* 接收iOS端发过来的购买凭证
* @param userId
* @param receipt
* @param chooseEnv
*/
@RequestMapping("/setIapCertificate")
public String setIapCertificate(String userId, String receiptData, boolean chooseEnv){
if(StringUtils.isEmpty(userId) || StringUtils.isEmpty(receiptData)){
return null;
}
String url = null;
url = chooseEnv == true? certificateUrl:certificateUrlTest;
final String certificateCode = receiptData;
if(StringUtils.isNotEmpty(certificateCode)){
return sendHttpsCoon(url, certificateCode);
}else{
return null;
}
}
/**
* 发送请求
* @param url
* @param strings
* @return
*/
private String sendHttpsCoon(String url, String code){
if(url.isEmpty()){
return null;
}
try {
//设置SSLContext
SSLContext ssl = SSLContext.getInstance("SSL");
ssl.init(null, new TrustManager[]{myX509TrustManager}, null);
//打开连接
HttpsURLConnection conn = (HttpsURLConnection) new URL(url).openConnection();
//设置套接工厂
conn.setSSLSocketFactory(ssl.getSocketFactory());
//加入数据
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setRequestProperty("Content-type","application/json");
JSONObject obj = new JSONObject();
obj.put("receipt-data", code);
BufferedOutputStream buffOutStr = new BufferedOutputStream(conn.getOutputStream());
buffOutStr.write(obj.toString().getBytes());
buffOutStr.flush();
buffOutStr.close();
//获取输入流
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null;
StringBuffer sb = new StringBuffer();
while((line = reader.readLine())!= null){
sb.append(line);
}
return sb.toString();
} catch (Exception e) {
return null;
}
}
}
package com.peanut.modules.pay.applePay.controller;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.commons.lang.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.RestController;
/**
* @author :
* @date :
* @Version: 1.0
* @Desc : 苹果支付 参考地址https://www.cnblogs.com/shoshana-kong/p/10991753.html
* sendHttpsCoon 方法里面包含了增加的业务逻辑
* 本类引入多种的Json序列化工具选择了Hutool
*/
@RestController
@RequestMapping("iap")
public class IapController {
//购买凭证验证地址
private static final String certificateUrl = "https://buy.itunes.apple.com/verifyReceipt";
//测试的购买凭证验证地址
private static final String certificateUrlTest = "https://sandbox.itunes.apple.com/verifyReceipt";
/**
* 重写X509TrustManager
*/
private static TrustManager myX509TrustManager = new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
};
/**
* 接收iOS端发过来的购买凭证
* @param userId
* @param receipt
* @param chooseEnv
*/
@RequestMapping("/setIapCertificate")
public String setIapCertificate(String userId, String receiptData, boolean chooseEnv){
if(StringUtils.isEmpty(userId) || StringUtils.isEmpty(receiptData)){
return null;
}
String url = null;
url = chooseEnv == true? certificateUrl:certificateUrlTest;
final String certificateCode = receiptData;
if(StringUtils.isNotEmpty(certificateCode)){
return sendHttpsCoon(url, certificateCode);
}else{
return null;
}
}
/**
* 发送请求
* @param url
* @param strings
* @return
*/
private String sendHttpsCoon(String url, String code){
if(url.isEmpty()){
return null;
}
try {
//设置SSLContext
SSLContext ssl = SSLContext.getInstance("SSL");
ssl.init(null, new TrustManager[]{myX509TrustManager}, null);
//打开连接
HttpsURLConnection conn = (HttpsURLConnection) new URL(url).openConnection();
//设置套接工厂
conn.setSSLSocketFactory(ssl.getSocketFactory());
//加入数据
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setRequestProperty("Content-type","application/json");
JSONObject obj = new JSONObject();
obj.put("receipt-data", code);
BufferedOutputStream buffOutStr = new BufferedOutputStream(conn.getOutputStream());
buffOutStr.write(obj.toString().getBytes());
buffOutStr.flush();
buffOutStr.close();
//获取输入流
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null;
StringBuffer sb = new StringBuffer();
while((line = reader.readLine())!= null){
sb.append(line);
}
return sb.toString();
} catch (Exception e) {
return null;
}
}
}

View File

@@ -1,36 +1,36 @@
package com.peanut.modules.pay.applePay.service;
import com.peanut.common.utils.R;
import com.peanut.modules.pay.IOSPay.Result;
import org.springframework.stereotype.Service;
@Service
public interface ApplePayService {
/**
* 看是否是己经验证过的该支付收据
* @param receiptMd5
* @return
*/
public boolean isExistsIOSReceipt(String receiptMd5);
int updateCurrentState(String payId, String userId, int a);
/**
* IOS支付
* @param transaction_id 订单号
* @param product_id 产品id也就是支付金额
* @param purchase_date_ms 支付时间
* @param receiptMd5 拿到收据的MD5
* @param moneyId 金额id
*/
Result<Object> iosChargeSuccess(String transaction_id, String product_id, String purchase_date_ms, String receiptMd5, String moneyId, String userId);
R getAppPay(String verifyResult, String transactionID);
}
package com.peanut.modules.pay.applePay.service;
import com.peanut.common.utils.R;
import com.peanut.modules.pay.IOSPay.Result;
import org.springframework.stereotype.Service;
@Service
public interface ApplePayService {
/**
* 看是否是己经验证过的该支付收据
* @param receiptMd5
* @return
*/
public boolean isExistsIOSReceipt(String receiptMd5);
int updateCurrentState(String payId, String userId, int a);
/**
* IOS支付
* @param transaction_id 订单号
* @param product_id 产品id也就是支付金额
* @param purchase_date_ms 支付时间
* @param receiptMd5 拿到收据的MD5
* @param moneyId 金额id
*/
Result<Object> iosChargeSuccess(String transaction_id, String product_id, String purchase_date_ms, String receiptMd5, String moneyId, String userId);
R getAppPay(String verifyResult, String transactionID);
}

View File

@@ -1,214 +1,214 @@
package com.peanut.modules.pay.applePay.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.peanut.common.utils.DateUtils;
import com.peanut.common.utils.R;
import com.peanut.modules.book.entity.*;
import com.peanut.modules.book.service.*;
import com.peanut.modules.pay.IOSPay.Result;
import com.peanut.modules.pay.applePay.service.ApplePayService;
import com.peanut.modules.pay.applePay.utils.*;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
@Service("ApplePayService")
@Slf4j
@AllArgsConstructor
public class ApplePayServiceImpl implements ApplePayService {
// 日志记录系统支付模块记录日志信息输出到sys-pay
private static final Logger logger = LoggerFactory.getLogger("sys-pay");
@Autowired
private MyUserService userService;
@Autowired
private BuyOrderService buyOrderService;
@Autowired
private TransactionDetailsService transactionDetailsService;
@Autowired
private ApplePayUtil applePayUtil;
@Autowired
private BookBuyConfigService bookBuyConfigService;
@Autowired
private PayPaymentOrderService payPaymentOrderService;
@Autowired
public static final String TRADE_TYPE_APP = "APP";
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public boolean isExistsIOSReceipt(String receiptMd5) {
return false;
}
@Resource
private TsBillMapper tsBillMapper;
/**
* 支付成功之后将当前订单的状态改为1
*
* @param payId
* @param userId
* @param a
* @return
*/
@Override
public int updateCurrentState(String payId, String userId, int a) {
return 0;
}
/**
* IOS支付
* @param transaction_id 订单号
* @param product_id 产品id也就是支付金额
* @param purchase_date_ms 支付时间
* @param receiptMd5 拿到收据的MD5
* @param moneyId 金额id
*/
@Override
public Result<Object> iosChargeSuccess(String transaction_id, String product_id, String purchase_date_ms, String receiptMd5, String moneyId, String userId) {
/**
* IOS支付
* @param transaction_id 订单号
* @param product_id 产品id也就是支付金额
* @param purchase_date_ms 支付时间
* @param receiptMd5 拿到收据的MD5
* @param moneyId 金额id
*/
try {
List<Map<String, Object>> queryForList = jdbcTemplate.queryForList("SELECT id,showcoin_num,give_showcoin_num,rmb_price from tsm_payment_config_ios where product_id =? ",
moneyId);
if (queryForList.size() > 0) {
String bill_content = "充值";//账单产生方式
int bill_state = 1;// 充值
int current_state = 1;// 支付成功
int payment_method = 3;// IOS
String date = DateUtils.DATE_TIME_PATTERN;// 当前时间
BigDecimal amountofmoney = new BigDecimal(queryForList.get(0).get("rmb_price").toString());// 金额
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
// 生成消费订单
//String sql = "insert into ts_bill (id,users_id,payment_config_id,bill_num,bill_content,bill_sumofmoney,bill_state,current_state,payment_method,receipt,createtdate) value(?,?,?,?,?,?,?,?,?,?,?);";
//jdbcTemplate.update(sql, uuid,userId,moneyId,transaction_id,bill_content,amountofmoney,bill_state,current_state,payment_method,receiptMd5,date);
String type = "1";// 加
long showcoin_num = Long.parseLong(queryForList.get(0).get("showcoin_num").toString()) + Long.parseLong(queryForList.get(0).get("give_showcoin_num").toString());
// 此操作为需求实际场景可根据用户产品需求更改
//commonServiceI.updShowcoinNum(type, userId, showcoin_num);
return Result.ok("支付成功");
} else {
return Result.error("操作异常,所选金额不存在");
}
} catch (Exception e) {
return Result.error("ios支付异常");
}
}
@Override
public R getAppPay(String verifyResult, String transactionID) {
log.info("##########################苹果支付验证!########################");
JSONObject jsonObject = JSONObject.parseObject(verifyResult);
String status = jsonObject.getString("status");
//判断是否验证成功
if ("0".equals(status)) {
//app端所提供的收据是有效的,验证成功
String receipt = jsonObject.getString("receipt");
JSONObject returnJson = JSONObject.parseObject(receipt);
String in_app = returnJson.getString("in_app");
JSONObject in_appJson = JSONObject.parseObject(in_app.substring(1, in_app.length() - 1));
String transactionId = in_appJson.getString("transaction_id");
String in_app_ownership_type = in_appJson.getString("in_app_ownership_type");
//如果验证后的订单号与app端传来的订单号一致并且状态为已支付状态则处理自己的业务
if (transactionID.equals(transactionId) && "PURCHASED".equals(in_app_ownership_type)) {
//===================处理自己的业务 ============================
BuyOrderEntity order = this.buyOrderService.getOne(new QueryWrapper<BuyOrderEntity>().eq("order_sn", transactionId ));
PayWechatOrderEntity wechat = new PayWechatOrderEntity();
if ("vip".equals(order.getOrderType())) {
//会员记录
BookBuyConfigEntity bookBuyConfigEntity = bookBuyConfigService.getById(wechat.getBuyOrderId());
String month = bookBuyConfigEntity.getMonth();
userService.openMember(Integer.valueOf(transactionId),Integer.valueOf(month));
buyOrderService.updateOrderStatus(Integer.valueOf(transactionId),order.getOrderSn(),"2");
}
if ("order".equals(order.getOrderType())) {
BuyOrderEntity orderEntity = buyOrderService.getBaseMapper().selectOne(new QueryWrapper<BuyOrderEntity>().eq("order_sn", wechat.getOrderId()));
BigDecimal realMoney = orderEntity.getRealMoney();
//更新 订单 记录
}
if ("point".equals(order.getOrderType())) {
BookBuyConfigEntity bookBuyConfigEntity = bookBuyConfigService.getById(wechat.getBuyOrderId());
String realMoney = bookBuyConfigEntity.getRealMoney();
Integer money = Integer.valueOf(realMoney);
userService.rechargeHSPoint(Integer.valueOf(order.getUserId()),money);
TransactionDetailsEntity transactionDetailsEntity = new TransactionDetailsEntity();
transactionDetailsEntity.setUserId(Integer.valueOf(order.getUserId()));
transactionDetailsEntity.setChangeAmount(new BigDecimal(money));
transactionDetailsEntity.setOrderType("充值");
transactionDetailsEntity.setRelationId(wechat.getId().intValue());
transactionDetailsEntity.setRemark("充值");
MyUserEntity user = userService.getById(Integer.valueOf(order.getUserId()));
BigDecimal peanutCoin = user.getPeanutCoin();
transactionDetailsEntity.setUserBalance(peanutCoin);
transactionDetailsEntity.setUserName(user.getNickname());
transactionDetailsEntity.setTel(user.getTel());
transactionDetailsService.save(transactionDetailsEntity);
// 插入 花生币 充值记录
PayPaymentOrderEntity payPaymentOrderEntity = new PayPaymentOrderEntity();
payPaymentOrderEntity.setUserId(Integer.valueOf(order.getUserId()));
payPaymentOrderEntity.setOrderId(String.valueOf(wechat.getId()));
payPaymentOrderEntity.setRealAmount(new BigDecimal(bookBuyConfigEntity.getRealMoney()));
payPaymentOrderEntity.setRechargeAmount(new BigDecimal(bookBuyConfigEntity.getMoney()));
payPaymentOrderEntity.setRechargeChannel(bookBuyConfigEntity.getQudao());
payPaymentOrderEntity.setRechargeStatus("success");
payPaymentOrderEntity.setSuccessTime(new Date());
payPaymentOrderEntity.setUserName(user.getNickname());
payPaymentOrderEntity.setTel(user.getTel());
payPaymentOrderService.save(payPaymentOrderEntity);
buyOrderService.updateOrderStatus(Integer.valueOf(order.getUserId()),order.getOrderSn(),"2");
// 插入花生币 变动记录
}
}
return R.ok();
}
return R.error("苹果内购验证失败");
}}
package com.peanut.modules.pay.applePay.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.peanut.common.utils.DateUtils;
import com.peanut.common.utils.R;
import com.peanut.modules.book.entity.*;
import com.peanut.modules.book.service.*;
import com.peanut.modules.pay.IOSPay.Result;
import com.peanut.modules.pay.applePay.service.ApplePayService;
import com.peanut.modules.pay.applePay.utils.*;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
@Service("ApplePayService")
@Slf4j
@AllArgsConstructor
public class ApplePayServiceImpl implements ApplePayService {
// 日志记录系统支付模块记录日志信息输出到sys-pay
private static final Logger logger = LoggerFactory.getLogger("sys-pay");
@Autowired
private MyUserService userService;
@Autowired
private BuyOrderService buyOrderService;
@Autowired
private TransactionDetailsService transactionDetailsService;
@Autowired
private ApplePayUtil applePayUtil;
@Autowired
private BookBuyConfigService bookBuyConfigService;
@Autowired
private PayPaymentOrderService payPaymentOrderService;
@Autowired
public static final String TRADE_TYPE_APP = "APP";
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public boolean isExistsIOSReceipt(String receiptMd5) {
return false;
}
@Resource
private TsBillMapper tsBillMapper;
/**
* 支付成功之后将当前订单的状态改为1
*
* @param payId
* @param userId
* @param a
* @return
*/
@Override
public int updateCurrentState(String payId, String userId, int a) {
return 0;
}
/**
* IOS支付
* @param transaction_id 订单号
* @param product_id 产品id也就是支付金额
* @param purchase_date_ms 支付时间
* @param receiptMd5 拿到收据的MD5
* @param moneyId 金额id
*/
@Override
public Result<Object> iosChargeSuccess(String transaction_id, String product_id, String purchase_date_ms, String receiptMd5, String moneyId, String userId) {
/**
* IOS支付
* @param transaction_id 订单号
* @param product_id 产品id也就是支付金额
* @param purchase_date_ms 支付时间
* @param receiptMd5 拿到收据的MD5
* @param moneyId 金额id
*/
try {
List<Map<String, Object>> queryForList = jdbcTemplate.queryForList("SELECT id,showcoin_num,give_showcoin_num,rmb_price from tsm_payment_config_ios where product_id =? ",
moneyId);
if (queryForList.size() > 0) {
String bill_content = "充值";//账单产生方式
int bill_state = 1;// 充值
int current_state = 1;// 支付成功
int payment_method = 3;// IOS
String date = DateUtils.DATE_TIME_PATTERN;// 当前时间
BigDecimal amountofmoney = new BigDecimal(queryForList.get(0).get("rmb_price").toString());// 金额
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
// 生成消费订单
//String sql = "insert into ts_bill (id,users_id,payment_config_id,bill_num,bill_content,bill_sumofmoney,bill_state,current_state,payment_method,receipt,createtdate) value(?,?,?,?,?,?,?,?,?,?,?);";
//jdbcTemplate.update(sql, uuid,userId,moneyId,transaction_id,bill_content,amountofmoney,bill_state,current_state,payment_method,receiptMd5,date);
String type = "1";// 加
long showcoin_num = Long.parseLong(queryForList.get(0).get("showcoin_num").toString()) + Long.parseLong(queryForList.get(0).get("give_showcoin_num").toString());
// 此操作为需求实际场景可根据用户产品需求更改
//commonServiceI.updShowcoinNum(type, userId, showcoin_num);
return Result.ok("支付成功");
} else {
return Result.error("操作异常,所选金额不存在");
}
} catch (Exception e) {
return Result.error("ios支付异常");
}
}
@Override
public R getAppPay(String verifyResult, String transactionID) {
log.info("##########################苹果支付验证!########################");
JSONObject jsonObject = JSONObject.parseObject(verifyResult);
String status = jsonObject.getString("status");
//判断是否验证成功
if ("0".equals(status)) {
//app端所提供的收据是有效的,验证成功
String receipt = jsonObject.getString("receipt");
JSONObject returnJson = JSONObject.parseObject(receipt);
String in_app = returnJson.getString("in_app");
JSONObject in_appJson = JSONObject.parseObject(in_app.substring(1, in_app.length() - 1));
String transactionId = in_appJson.getString("transaction_id");
String in_app_ownership_type = in_appJson.getString("in_app_ownership_type");
//如果验证后的订单号与app端传来的订单号一致并且状态为已支付状态则处理自己的业务
if (transactionID.equals(transactionId) && "PURCHASED".equals(in_app_ownership_type)) {
//===================处理自己的业务 ============================
BuyOrderEntity order = this.buyOrderService.getOne(new QueryWrapper<BuyOrderEntity>().eq("order_sn", transactionId ));
PayWechatOrderEntity wechat = new PayWechatOrderEntity();
if ("vip".equals(order.getOrderType())) {
//会员记录
BookBuyConfigEntity bookBuyConfigEntity = bookBuyConfigService.getById(wechat.getBuyOrderId());
String month = bookBuyConfigEntity.getMonth();
userService.openMember(Integer.valueOf(transactionId),Integer.valueOf(month));
buyOrderService.updateOrderStatus(Integer.valueOf(transactionId),order.getOrderSn(),"2");
}
if ("order".equals(order.getOrderType())) {
BuyOrderEntity orderEntity = buyOrderService.getBaseMapper().selectOne(new QueryWrapper<BuyOrderEntity>().eq("order_sn", wechat.getOrderId()));
BigDecimal realMoney = orderEntity.getRealMoney();
//更新 订单 记录
}
if ("point".equals(order.getOrderType())) {
BookBuyConfigEntity bookBuyConfigEntity = bookBuyConfigService.getById(wechat.getBuyOrderId());
String realMoney = bookBuyConfigEntity.getRealMoney();
Integer money = Integer.valueOf(realMoney);
userService.rechargeHSPoint(Integer.valueOf(order.getUserId()),money);
TransactionDetailsEntity transactionDetailsEntity = new TransactionDetailsEntity();
transactionDetailsEntity.setUserId(Integer.valueOf(order.getUserId()));
transactionDetailsEntity.setChangeAmount(new BigDecimal(money));
transactionDetailsEntity.setOrderType("充值");
transactionDetailsEntity.setRelationId(wechat.getId().intValue());
transactionDetailsEntity.setRemark("充值");
MyUserEntity user = userService.getById(Integer.valueOf(order.getUserId()));
BigDecimal peanutCoin = user.getPeanutCoin();
transactionDetailsEntity.setUserBalance(peanutCoin);
transactionDetailsEntity.setUserName(user.getNickname());
transactionDetailsEntity.setTel(user.getTel());
transactionDetailsService.save(transactionDetailsEntity);
// 插入 花生币 充值记录
PayPaymentOrderEntity payPaymentOrderEntity = new PayPaymentOrderEntity();
payPaymentOrderEntity.setUserId(Integer.valueOf(order.getUserId()));
payPaymentOrderEntity.setOrderId(String.valueOf(wechat.getId()));
payPaymentOrderEntity.setRealAmount(new BigDecimal(bookBuyConfigEntity.getRealMoney()));
payPaymentOrderEntity.setRechargeAmount(new BigDecimal(bookBuyConfigEntity.getMoney()));
payPaymentOrderEntity.setRechargeChannel(bookBuyConfigEntity.getQudao());
payPaymentOrderEntity.setRechargeStatus("success");
payPaymentOrderEntity.setSuccessTime(new Date());
payPaymentOrderEntity.setUserName(user.getNickname());
payPaymentOrderEntity.setTel(user.getTel());
payPaymentOrderService.save(payPaymentOrderEntity);
buyOrderService.updateOrderStatus(Integer.valueOf(order.getUserId()),order.getOrderSn(),"2");
// 插入花生币 变动记录
}
}
return R.ok();
}
return R.error("苹果内购验证失败");
}}

View File

@@ -1,116 +1,116 @@
package com.peanut.modules.pay.applePay.utils;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
//购买所需参数类
@ApiModel(value = "支付数据字段对比")
@Data
@AllArgsConstructor //有参数的构造方法
@NoArgsConstructor //无参构造方法
public class AddIosOrderPM implements Serializable {
//
// /**
// * ios支付所需参数
// */
// private String receipt;
//
// /**
// * 用户id
// */
// private Integer userId;
//
/**
* 交易编号
* eg:1000000852134037 交易唯一标识符;
*/
private String transaction_id;
/**
* APP所有权类型 eg: PURCHASED为沙箱环境
* eg:PURCHASED
*/
private String in_app_ownership_type;
/**
* 原来的交易编号 原始购买标识符
* eg:1000000852108057
*/
private String original_transaction_id;
/**
* 数量
* eg:1 购买消耗品的数量
*/
private String quantity;
/**
* 唯一标识符
* eg:1e10a9ec617549f986765b8546eddd0a9f349f15
*/
private String unique_identifier;
/**
* item_id
* eg:1578853844
*/
private String item_id;
/**
* 处于介绍报价期
* eg:false
*/
private String is_in_intro_offer_period;
/**
* 购买日期
* eg:2021-08-02 03:57:56 America/Los_Angeles
*/
private String purchase_date_pst;
/**
* 原始购买日期 ms
* eg:1627900203000
*/
private String original_purchase_date_ms;
/**
* 原始购买日期
* eg:2021-08-02 03:30:03 America/Los_Angeles 太平洋时区
*/
private String original_purchase_date_pst;
/**
* 是试用期
* eg:false
*/
private String is_trial_period;
/**
* 原始购买日期
* eg:2021-08-02 10:30:03 Etc/GMT 原始购买时间 ISO 8601日期格式
*/
private String original_purchase_date;
/**
* 购买日期ms 时间日期
*/
private String purchase_date_ms;
/**
* 产品id 购买产品唯一标识符
* eg:2
*/
private String product_id;
private String bvrs;
/**
* 购买日期
* eg:2021-08-02 10:57:56 Etc/GMT 时间日期
*/
private String purchase_date;
private String bid;
/**
* 唯一供应商标识符
* eg:A1D7647F-019C-4D15-A23C-3A48CFBFF4E3
*/
private String unique_vendor_identifier;
}
package com.peanut.modules.pay.applePay.utils;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
//购买所需参数类
@ApiModel(value = "支付数据字段对比")
@Data
@AllArgsConstructor //有参数的构造方法
@NoArgsConstructor //无参构造方法
public class AddIosOrderPM implements Serializable {
//
// /**
// * ios支付所需参数
// */
// private String receipt;
//
// /**
// * 用户id
// */
// private Integer userId;
//
/**
* 交易编号
* eg:1000000852134037 交易唯一标识符;
*/
private String transaction_id;
/**
* APP所有权类型 eg: PURCHASED为沙箱环境
* eg:PURCHASED
*/
private String in_app_ownership_type;
/**
* 原来的交易编号 原始购买标识符
* eg:1000000852108057
*/
private String original_transaction_id;
/**
* 数量
* eg:1 购买消耗品的数量
*/
private String quantity;
/**
* 唯一标识符
* eg:1e10a9ec617549f986765b8546eddd0a9f349f15
*/
private String unique_identifier;
/**
* item_id
* eg:1578853844
*/
private String item_id;
/**
* 处于介绍报价期
* eg:false
*/
private String is_in_intro_offer_period;
/**
* 购买日期
* eg:2021-08-02 03:57:56 America/Los_Angeles
*/
private String purchase_date_pst;
/**
* 原始购买日期 ms
* eg:1627900203000
*/
private String original_purchase_date_ms;
/**
* 原始购买日期
* eg:2021-08-02 03:30:03 America/Los_Angeles 太平洋时区
*/
private String original_purchase_date_pst;
/**
* 是试用期
* eg:false
*/
private String is_trial_period;
/**
* 原始购买日期
* eg:2021-08-02 10:30:03 Etc/GMT 原始购买时间 ISO 8601日期格式
*/
private String original_purchase_date;
/**
* 购买日期ms 时间日期
*/
private String purchase_date_ms;
/**
* 产品id 购买产品唯一标识符
* eg:2
*/
private String product_id;
private String bvrs;
/**
* 购买日期
* eg:2021-08-02 10:57:56 Etc/GMT 时间日期
*/
private String purchase_date;
private String bid;
/**
* 唯一供应商标识符
* eg:A1D7647F-019C-4D15-A23C-3A48CFBFF4E3
*/
private String unique_vendor_identifier;
}

View File

@@ -1,159 +1,159 @@
package com.peanut.modules.pay.applePay.utils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import sun.misc.BASE64Decoder;
import javax.net.ssl.*;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Locale;
@Component
public class ApplePayUtil {
private static class TrustAnyTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[]{};
}
}
private static class TrustAnyHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
private static String url_apple_pay = "https://buy.itunes.apple.com/verifyReceipt";
private static String test_url_apple_pay = "https://sandbox.itunes.apple.com/verifyReceipt";
/**
* 苹果服务器验证
*
* @param receipt 账单
* @return null 或返回结果
* @url 要验证的地址 沙盒 https://sandbox.itunes.apple.com/verifyReceipt
*/
public static String buyAppVerify(String receipt, int type) {
//环境判断 线上/开发环境用不同的请求链接
try {
String url = null;
if (type == 0) {
url = test_url_apple_pay; //沙盒环境,测试
} else {
url = url_apple_pay; //线上环境
}
//String url = EnvUtils.isOnline() ?url_verify : url_sandbox;
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
URL console = new URL(url);
HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
conn.setSSLSocketFactory(sc.getSocketFactory());
conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
conn.setRequestMethod("POST");
conn.setRequestProperty("content-type", "text/json");
conn.setRequestProperty("Proxy-Connection", "Keep-Alive");
conn.setDoInput(true);
conn.setDoOutput(true);
//r如果有错误就注释
conn.setConnectTimeout(3000);
BufferedOutputStream hurlBufOus = new BufferedOutputStream(conn.getOutputStream());
//拼成固定的格式传给平台
String str = String.format(Locale.CHINA, "{\"receipt-data\":\"" + receipt + "\"}");
// 直接将receipt当参数发到苹果验证就行不用拼格
String str1 = String.format(Locale.CHINA, receipt);
hurlBufOus.write(str.getBytes());
hurlBufOus.flush();
InputStream is = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = null;
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null) {
sb.append(line);
}
return sb.toString();
} catch (Exception ex) {
System.out.println("苹果服务器异常");
ex.printStackTrace();
}
return null;
}
//视情况而定苹果app进行支付然后收到苹果的收据一串很长的BASE64编码的字符串
/**
* 用BASE64加密
*
* @param str
* @return
*/
public static String getBASE64(String str) {
byte[] b = str.getBytes();
String s = null;
if (b != null) {
s = new sun.misc.BASE64Encoder().encode(b);
}
return s;
}
/**
* 解密BASE64字窜
* @param s
* @return
*/
public static String getFromBASE64(String s) {
byte[] b = null;
if (s != null) {
BASE64Decoder decoder = new BASE64Decoder();
try {
b = decoder.decodeBuffer(s);
return new String(b);
} catch (Exception e) {
e.printStackTrace();
}
}
return new String(b);
}
}
package com.peanut.modules.pay.applePay.utils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import sun.misc.BASE64Decoder;
import javax.net.ssl.*;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Locale;
@Component
public class ApplePayUtil {
private static class TrustAnyTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[]{};
}
}
private static class TrustAnyHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
private static String url_apple_pay = "https://buy.itunes.apple.com/verifyReceipt";
private static String test_url_apple_pay = "https://sandbox.itunes.apple.com/verifyReceipt";
/**
* 苹果服务器验证
*
* @param receipt 账单
* @return null 或返回结果
* @url 要验证的地址 沙盒 https://sandbox.itunes.apple.com/verifyReceipt
*/
public static String buyAppVerify(String receipt, int type) {
//环境判断 线上/开发环境用不同的请求链接
try {
String url = null;
if (type == 0) {
url = test_url_apple_pay; //沙盒环境,测试
} else {
url = url_apple_pay; //线上环境
}
//String url = EnvUtils.isOnline() ?url_verify : url_sandbox;
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
URL console = new URL(url);
HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
conn.setSSLSocketFactory(sc.getSocketFactory());
conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
conn.setRequestMethod("POST");
conn.setRequestProperty("content-type", "text/json");
conn.setRequestProperty("Proxy-Connection", "Keep-Alive");
conn.setDoInput(true);
conn.setDoOutput(true);
//r如果有错误就注释
conn.setConnectTimeout(3000);
BufferedOutputStream hurlBufOus = new BufferedOutputStream(conn.getOutputStream());
//拼成固定的格式传给平台
String str = String.format(Locale.CHINA, "{\"receipt-data\":\"" + receipt + "\"}");
// 直接将receipt当参数发到苹果验证就行不用拼格
String str1 = String.format(Locale.CHINA, receipt);
hurlBufOus.write(str.getBytes());
hurlBufOus.flush();
InputStream is = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = null;
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null) {
sb.append(line);
}
return sb.toString();
} catch (Exception ex) {
System.out.println("苹果服务器异常");
ex.printStackTrace();
}
return null;
}
//视情况而定苹果app进行支付然后收到苹果的收据一串很长的BASE64编码的字符串
/**
* 用BASE64加密
*
* @param str
* @return
*/
public static String getBASE64(String str) {
byte[] b = str.getBytes();
String s = null;
if (b != null) {
s = new sun.misc.BASE64Encoder().encode(b);
}
return s;
}
/**
* 解密BASE64字窜
* @param s
* @return
*/
public static String getFromBASE64(String s) {
byte[] b = null;
if (s != null) {
BASE64Decoder decoder = new BASE64Decoder();
try {
b = decoder.decodeBuffer(s);
return new String(b);
} catch (Exception e) {
e.printStackTrace();
}
}
return new String(b);
}
}

View File

@@ -1,21 +1,21 @@
package com.peanut.modules.pay.applePay.utils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class IPayNotifyPo {
@ApiModelProperty("苹果支付凭证")
private String transactionReceipt;
@ApiModelProperty("苹果支付单号")
private String payId;
@ApiModelProperty("用户id")
private String userId;
@ApiModelProperty("金额id")
private String moneyId;
}
package com.peanut.modules.pay.applePay.utils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class IPayNotifyPo {
@ApiModelProperty("苹果支付凭证")
private String transactionReceipt;
@ApiModelProperty("苹果支付单号")
private String payId;
@ApiModelProperty("用户id")
private String userId;
@ApiModelProperty("金额id")
private String moneyId;
}

View File

@@ -1,79 +1,79 @@
package com.peanut.modules.pay.applePay.utils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel("订单号")
public class TsBill implements Serializable {
private static final long serialVersionUID = 1L;
// @ApiModelProperty("苹果支付凭证")
// private String transactionReceipt;
//
// @ApiModelProperty("苹果支付单号")
// private String payId;
// iOS端支付完成苹果返回给iOS端的那个receiptData app返回的数据
// @ApiModelProperty("用户id")
// private String userId;
//
// @ApiModelProperty("金额id")
// private String moneyId;
// @ApiModelProperty("")
// private String currentState;
// @ApiModelProperty("IOS内购商品Id")
// private String product_id; // IOS内购商品Id
// @ApiModelProperty("应用内购买的时间")
// private String purchase_date_pst; // 应用内购买的时间
// @ApiModelProperty("购买的消费品数量")
// private String quantity; // 购买的消费品数量
// @ApiModelProperty("交易的唯一标识符")
// private String transaction_id; //
//
// @ApiModelProperty("支付时间")
// private String purchase_date_ms; //
// @ApiModelProperty("拿到收据的MD5")
// private String receiptMd5; //
// @ApiModelProperty("拿到收据的MD5")
// private String BillNum; //
@ApiModelProperty("主键ID")
private String id;
@ApiModelProperty("用户ID")
private String usersId;
@ApiModelProperty("充值配置ID")
private String paymentConfigId;
@ApiModelProperty("交易单号根据当前的28位当前时间加上11位随机数字对上的")
private String billNum;
@ApiModelProperty("交易号")
private String tradeNo;
@ApiModelProperty("账单生成方式,比如充值,说说币之类的")
private String billContent;
@ApiModelProperty("账单对应的金额id")
private String billSumofmoney;
@ApiModelProperty("账单类型还是充值")
private Integer billState;
@ApiModelProperty(" 当前状态,0是支付失败,1是支付成功,10是待支付")
private Integer currentState;
@ApiModelProperty("支付方式0是虚拟币,1是支付宝,2是微信3是ios")
private Integer paymentMethod;
@ApiModelProperty("收据MD5,仅ios可用")
private String receipt;
@ApiModelProperty("创集时间")
private String createtdate;
@ApiModelProperty("修改时间")
private String updatedate;
}
package com.peanut.modules.pay.applePay.utils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel("订单号")
public class TsBill implements Serializable {
private static final long serialVersionUID = 1L;
// @ApiModelProperty("苹果支付凭证")
// private String transactionReceipt;
//
// @ApiModelProperty("苹果支付单号")
// private String payId;
// iOS端支付完成苹果返回给iOS端的那个receiptData app返回的数据
// @ApiModelProperty("用户id")
// private String userId;
//
// @ApiModelProperty("金额id")
// private String moneyId;
// @ApiModelProperty("")
// private String currentState;
// @ApiModelProperty("IOS内购商品Id")
// private String product_id; // IOS内购商品Id
// @ApiModelProperty("应用内购买的时间")
// private String purchase_date_pst; // 应用内购买的时间
// @ApiModelProperty("购买的消费品数量")
// private String quantity; // 购买的消费品数量
// @ApiModelProperty("交易的唯一标识符")
// private String transaction_id; //
//
// @ApiModelProperty("支付时间")
// private String purchase_date_ms; //
// @ApiModelProperty("拿到收据的MD5")
// private String receiptMd5; //
// @ApiModelProperty("拿到收据的MD5")
// private String BillNum; //
@ApiModelProperty("主键ID")
private String id;
@ApiModelProperty("用户ID")
private String usersId;
@ApiModelProperty("充值配置ID")
private String paymentConfigId;
@ApiModelProperty("交易单号根据当前的28位当前时间加上11位随机数字对上的")
private String billNum;
@ApiModelProperty("交易号")
private String tradeNo;
@ApiModelProperty("账单生成方式,比如充值,说说币之类的")
private String billContent;
@ApiModelProperty("账单对应的金额id")
private String billSumofmoney;
@ApiModelProperty("账单类型还是充值")
private Integer billState;
@ApiModelProperty(" 当前状态,0是支付失败,1是支付成功,10是待支付")
private Integer currentState;
@ApiModelProperty("支付方式0是虚拟币,1是支付宝,2是微信3是ios")
private Integer paymentMethod;
@ApiModelProperty("收据MD5,仅ios可用")
private String receipt;
@ApiModelProperty("创集时间")
private String createtdate;
@ApiModelProperty("修改时间")
private String updatedate;
}