package com.fs.pay.controller;


import com.alipay.api.AlipayApiException;

import com.fs.pay.bean.AliPayBean;
import com.ijpay.alipay.AliPayApiConfig;
import com.ijpay.alipay.AliPayApiConfigKit;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
@RequestMapping("/pay/aliPay")
public class AliPayController extends AliPayApiController {

	private static final Logger log = LoggerFactory.getLogger(AliPayController.class);

	@Autowired
	private AliPayBean aliPayBean;

	/**
	 * 普通公钥模式
	 */
//     private final static String NOTIFY_URL = "/app/aliPay/payNotify";
	/**
	 * 证书模式
	 */
	private final static String NOTIFY_URL = "/app/aliPay/payNotify";
	//private final static String RETURN_URL = "/aliPay/return_url";
	/**
	 * 证书模式
	 */
	//private final static String RETURN_URL = "/aliPay/cert_return_url";



	@Override
	public AliPayApiConfig getApiConfig() throws AlipayApiException {

		AliPayApiConfig aliPayApiConfig;
		try {
			aliPayApiConfig = AliPayApiConfigKit.getApiConfig(aliPayBean.getAppId());
		} catch (Exception e) {
			aliPayApiConfig = AliPayApiConfig.builder()
					.setAppId(aliPayBean.getAppId())
					.setAliPayPublicKey(aliPayBean.getPublicKey())
					.setAppCertPath(aliPayBean.getAppCertPath())
					.setAliPayCertPath(aliPayBean.getAliPayCertPath())
					.setAliPayRootCertPath(aliPayBean.getAliPayRootCertPath())
					.setCharset("UTF-8")
					.setPrivateKey(aliPayBean.getPrivateKey())
					.setServiceUrl(aliPayBean.getServerUrl())
					.setSignType("RSA2")
					// 普通公钥方式
					//.build();
					// 证书模式
					.buildByCert();

		}

		return aliPayApiConfig;
	}
	@ApiOperation(value="支付宝APP支付Test",notes="支付宝APP支付Test")
	@GetMapping("/test")
	@ResponseBody
	public AliPayApiConfig test() {
		AliPayApiConfig aliPayApiConfig = AliPayApiConfigKit.getAliPayApiConfig();
		String charset = aliPayApiConfig.getCharset();
		log.info("charset>" + charset);
		return aliPayApiConfig;
	}




//	/**
//         * app支付
//         */
//	@ApiOperation(value="支付宝APP支付",notes="支付宝APP支付")
//	@RequestMapping(value="/appPay",method= RequestMethod.GET)
//	@ResponseBody
//	@Login
//	public R appPay(
//			@ApiParam(required = true, name = "orderId", value = "orderId") @RequestParam(value = "orderId", required = false) String orderId,
//			HttpServletRequest request){
//
//		try {
//
//			PaymentOrder paymentOrder= paymentOrderService.selectPaymentOrderById(orderId);
//
//			if(paymentOrder==null){
//				return R.error("支付订单不存在");
//			}
//			if(paymentOrder.getPayStatus()==1){
//				return R.error("此订单已支付");
//			}
//
//			AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
//			model.setBody("收银台");
//			model.setSubject("支付");
//			model.setOutTradeNo(orderId);
//			model.setTimeoutExpress("30m");
//			model.setTotalAmount(paymentOrder.getPayMoney().toString());
//			model.setPassbackParams("");
//			model.setProductCode("QUICK_MSECURITY_PAY");
//			String orderInfo = AliPayApi.appPayToResponse(model, aliPayBean.getDomain() + NOTIFY_URL).getBody();
//			//修改订单信息
//			paymentOrder.setPayType(1);
//			paymentOrderService.updatePaymentOrder(paymentOrder);
//			return R.ok().put("data",orderInfo);
//
//
//		} catch (AlipayApiException e) {
//			return R.error(e.getErrMsg());
//		}
//	}
//
//	@RequestMapping(value = "/payNotify")
//	@ResponseBody
//	public String payNotify(HttpServletRequest request) {
//
//		try {
//
//
//			Map<String, String> params = AliPayApi.toMap(request);
//
//			for (Map.Entry<String, String> entry : params.entrySet()) {
//				System.out.println(entry.getKey() + " = " + entry.getValue());
//			}
//			boolean verifyResult = AlipaySignature.rsaCertCheckV1(params, aliPayBean.getAliPayCertPath(), "UTF-8", "RSA2");
//			if (verifyResult) {// 验证成功
//				// TODO 请在这里加上商户的业务逻辑程序代码 异步通知可能出现订单重复通知 需要做去重处理
//				System.out.println("notify_url 验证成功succcess");
//				String trade_status=params.get("trade_status");
//				//交易支付成功
//				if(trade_status.equals("TRADE_SUCCESS")){
//					//更新订单信息
//					//
//					String transaction_id=params.get("trade_no");
//					String out_trade_no=params.get("out_trade_no");
//					PaymentOrder paymentOrder= paymentOrderService.selectPaymentOrderById(out_trade_no);
//					if(paymentOrder==null){
//						return "failure";
//					}
//					if(paymentOrder.getPayStatus()==1){
//						return "success";
//					}
//					R r;
//					switch (paymentOrder.getOrderType()){
//						case 1://保证金
//							paymentOrder.setTradeNo(transaction_id);
//							r= paymentOrderService.DepositNotify(paymentOrder);
//							if(r.get("code").equals(200)){
//								Map<String, String> xml = new HashMap<String, String>(2);
//								xml.put("return_code", "SUCCESS");
//								xml.put("return_msg", "OK");
//								return WxPayKit.toXml(xml);
//
//							}
//							else {
//								return null;
//							}
//
//
//					}
//				}
//				return "success";
//			} else {
//				System.out.println("notify_url 验证失败");
//				// TODO
//				return "failure";
//			}
//		} catch (AlipayApiException e) {
//			e.printStackTrace();
//			return "failure";
//		}
//	}



}
