package com.hzs.third.pay.controller.notify;

import com.hzs.common.core.constant.Constants;
import com.hzs.common.core.enums.EPayChannel;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.third.pay.config.SandPayConfig;
import com.hzs.third.pay.constants.SandPayConstants;
import com.hzs.third.pay.service.IPayService;
import com.hzs.third.pay.util.PayUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.Date;
import java.util.TreeMap;

/**
 * 杉德支付
 */
@Slf4j
@RestController
@RequestMapping("/sand")
public class SandPayNotifyController {

    @Autowired
    private SandPayConfig sandPayConfig;
    @Autowired
    private IPayService iPayService;

//    /**
//     * 杉德支付回调
//     *
//     * @param request
//     * @return
//     */
//    @GetMapping("/notify")
//    public String notify(HttpServletRequest request) {
//        try {
//            // 通知传输的编码为UTF-8
//            request.setCharacterEncoding(Constants.UTF8);
//            // 动态遍历获取所有收到的参数,此步非常关键,因为收银宝以后可能会加字段,动态获取可以兼容
//            TreeMap<String, String> body = PayUtil.getParams(request);
//
//            log.info("杉德支付回调！ body： {}", body);
//
//            if (AlipaySignature.rsaCheckV2(body, sandPayConfig.getPublicKey(), Constants.UTF8, SandPayConstants.SIGN_TYPE)) {
//                // 签名校验通过
//                if (SandPayConstants.SUCCESS.equals(body.get("trade_status"))) {
//                    // 交易成功
//
//                    // 交易流水号
//                    String payNumber = body.get("plat_trx_no");
//                    // 支付完成时间
//                    Date payTime = DateUtils.parseDateOne(body.get("pay_success_time"), DateUtils.YAMMERERS);
//                    // 支付金额
//                    BigDecimal payMoney = new BigDecimal(body.get("pay_amount"));
//
//                    // 支付扩展类型
//                    String type = body.get("req_reserved");
//
//                    // 回调订单编号
//                    String thirdOrderCode = body.get("out_order_no");
//                    // 订单编号
//                    String orderCode = thirdOrderCode;
//                    // 处理订单号以及扩展类型
//                    if (orderCode.indexOf("-") > 0) {
//                        // 带有分隔，需要处理
//                        orderCode = orderCode.split("-")[0];
//                        if (StringUtils.isEmpty(type)) {
//                            // H5调起微信、支付宝没有支付扩展参数
//                            type = orderCode.split("-")[1].substring(0, 1);
//                        }
//                    }
//
//                    // 支付后续业务处理
//                    if (iPayService.notifyHandle(type, orderCode, thirdOrderCode, payNumber, payTime, payMoney, EPayChannel.SAND, "")) {
//                        return SandPayConstants.SUCCESS;
//                    }
//                } else {
//                    log.error("杉德支付回调交易失败");
//                }
//            } else {
//                log.error("杉德支付回调签名验证失败！");
//            }
//        } catch (Exception e) {
//            log.error("杉德支付回调处理异常", e);
//        }
//        return SandPayConstants.ERROR;
//    }

}
