diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/controller/PayController.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/controller/PayController.java index 2e991da..acd0431 100644 --- a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/controller/PayController.java +++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/controller/PayController.java @@ -390,7 +390,7 @@ public class PayController extends BaseController miniOrderWechatPay.setTransactionid(params.get("trade_no")); appOrderPayMapper.insertAppOrderPay(miniOrderWechatPay); //修改用户信息 -// updateUser(appOrder); + updateUser(appOrder); out.println("success"); } else { // TODO 验签失败则记录异常日志,并在response中返回fail. @@ -521,7 +521,8 @@ public class PayController extends BaseController String orderNo = KeyUtil.generateUniqueKey(); AlipayTradeAppPayResponse result = null; try { - result = alipayService.startPay(orderNo,appOrderArg.getPrice()); + //result = alipayService.startPay(orderNo,appOrderArg.getPrice(),appOrderArg.getLevel() == 2 ? 30 : (appOrderArg.getLevel() == 3 ? 365 : 0)); + result = alipayService.startPay(orderNo,appOrderArg.getPrice(),1); } catch (AlipayApiException e) { e.printStackTrace(); } @@ -542,4 +543,61 @@ public class PayController extends BaseController return null; } } + + @RequestMapping(value = "/aliPaySignCallback") + public void aliPaySignCallback(HttpServletRequest request, HttpServletResponse response) throws Exception{ + log.info("=======>>>开始获取支付宝支付返回信息"); + //获取支付宝POST过来反馈信息,将异步通知中收到的待验证所有参数都存放到map中 + Map< String , String > params = new HashMap < String , String > (); + Map requestParams = request.getParameterMap(); + for(Iterator iter = requestParams.keySet().iterator();iter.hasNext();){ + String name = (String)iter.next(); + String[] values = (String [])requestParams.get(name); + String valueStr = ""; + for(int i = 0;i < values.length;i ++ ){ + valueStr = (i==values.length-1)?valueStr + values [i]:valueStr + values[i] + ","; + } + //乱码解决,这段代码在出现乱码时使用。 + //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); + System.out.println(name); + params.put (name,valueStr); + } + //公钥证书验签示例代码 + boolean signVerified = AlipaySignature.rsaCertCheckV1(params,"/Users/wyh/Documents/code/gan/gan-modules/ruoyi-gan/src/main/resources/alipayCertPublicKey_RSA2.crt","UTF-8","RSA2"); + PrintWriter out; + try { + out = response.getWriter(); + if (signVerified){ + // TODO 验签成功后 + String outTradeNo = params.get("out_trade_no"); + System.out.println(outTradeNo); + /*AppOrder appOrder = appOrderMapper.selectOneByOutTradeNo(outTradeNo); + + AppOrder entity = new AppOrder(); + entity.setId(appOrder.getId()); + entity.setTradeNo(params.get("trade_no")); + entity.setPayStatus(2); + entity.setPayTime(new Date()); + appOrderMapper.updateAppOrder(entity); + + AppOrderPay miniOrderWechatPay = new AppOrderPay(); + miniOrderWechatPay.setAppid(params.get("app_id")); + miniOrderWechatPay.setOuttradeno(params.get("out_trade_no")); + miniOrderWechatPay.setResultcode(params.get("trade_status")); + miniOrderWechatPay.setTimeend(params.get("gmt_payment")); + miniOrderWechatPay.setTotalfee(params.get("total_amount")); + miniOrderWechatPay.setTransactionid(params.get("trade_no")); + appOrderPayMapper.insertAppOrderPay(miniOrderWechatPay);*/ + //修改用户信息 +// updateUser(appOrder); + out.println("success"); + } else { + // TODO 验签失败则记录异常日志,并在response中返回fail. + out.println("fail"); + } + } catch (Exception e) { + log.info("异常订单:" + params.toString()); + log.info("========>PrintWriter fail"); + } + } } diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/service/AlipayService.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/service/AlipayService.java index 039b894..e846dde 100644 --- a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/service/AlipayService.java +++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/service/AlipayService.java @@ -14,6 +14,8 @@ import com.alipay.api.response.AlipayTradeAppPayResponse; import com.alipay.api.response.AlipayTradeCreateResponse; import com.ruoyi.app.domain.AppOrderArg; import com.ruoyi.app.domain.dto.KeyUtil; +import com.ruoyi.common.core.utils.DateUtils; +import org.apache.poi.ss.usermodel.DataFormat; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -42,6 +44,7 @@ public class AlipayService { private static final String SIGN_TYPE = "RSA2"; private static final String NOTIFY_URL = "http://139.224.213.131:7008/pay/aliPayCallback"; + private static final String SIGN_NOTIFY_URL = "http://139.224.213.131:7008/pay/aliPaySignCallback"; private static final String SUBJECT = "订单充值"; @@ -133,7 +136,7 @@ public class AlipayService { // System.out.println(diagnosisUrl); } }*/ - public AlipayTradeAppPayResponse startPay(String orderNo,String price) throws AlipayApiException{ + public AlipayTradeAppPayResponse startPay(String orderNo,String price,Integer day) throws AlipayApiException{ try { // 1. 创建AlipayClient实例 AlipayClient alipayClient = new DefaultAlipayClient(getClientParams()); @@ -145,6 +148,27 @@ public class AlipayService { jsonObject.put("out_trade_no" , orderNo); jsonObject.put("total_amount","0.01"); jsonObject.put("subject","订单充值"); + if (day > 0) { + jsonObject.put("product_code", "CYCLE_PAY_AUTH"); + JSONObject signParams = new JSONObject(); + signParams.put("product_code","GENERAL_WITHHOLDING"); + signParams.put("personal_product_code","CYCLE_PAY_AUTH_P"); + signParams.put("sign_scene","INDUSTRY|DIGITAL_MEDIA"); + signParams.put("external_agreement_no",orderNo); + + JSONObject accessParams = new JSONObject(); + accessParams.put("channel","QRCODEORSMS"); + signParams.put("access_params",accessParams); + jsonObject.put("agreement_sign_params", signParams); + + JSONObject ruleParams = new JSONObject(); + ruleParams.put("period_type","DAY"); + ruleParams.put("period",day); + ruleParams.put("execute_time", DateUtils.getDate()); + ruleParams.put("single_amount", jsonObject.get("total_amount")); + ruleParams.put("sign_notify_url",SIGN_NOTIFY_URL); + jsonObject.put("period_rule_params", ruleParams); + } request.setBizContent(jsonObject.toString()); // 3. 发起请求并处理响应 AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);