| 
					
				 | 
			
			
				@@ -3,22 +3,128 @@ package com.platform.yijia.controller; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.alibaba.fastjson.JSON; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.alibaba.fastjson.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.alibaba.fastjson.parser.Feature; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.google.gson.Gson; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.platform.yijia.config.YiJiaRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.platform.yijia.param.request.PayInfoRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.platform.yijia.utils.HttpUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.platform.yijia.utils.RSASignature; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.platform.yijia.utils.ResultData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.platform.yijia.utils.SXFPaySign; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.slf4j.Logger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.slf4j.LoggerFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.beans.factory.annotation.Value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.web.bind.annotation.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.text.ParseException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.HashMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.LinkedHashMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Random; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/*** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * demo随行付测试 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @RestController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @YiJiaRequest() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @CrossOrigin 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class DemoFenZhang { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static Logger logger =(Logger) LoggerFactory.getLogger(DemoFenZhang.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//    @Value("${yijia.path.global-prefix}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//    private String globalPrefix; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//    @Value("${yijia.domainName}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//    private String domainName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @RequestMapping(value = "/demoTradeRefund", consumes = "application/json", method = RequestMethod.POST) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public String demoTradeRefund(@RequestBody PayInfoRequest payInfoRequest) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Gson gson = new Gson(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ResultData resultData = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JSONObject reqData = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Random random = new Random(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String r = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (int i = 0; i < 6; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            r += random.nextInt(10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String ordNo = System.nanoTime() + r; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        logger.info("生成的订单号:" + ordNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //业务参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        reqData.put("ordNo", ordNo); //商户订单号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        reqData.put("mno", "399210816375479"); //商户编号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //下面三个至少传一个 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        reqData.put("origOrderNo", "10012955127877835724009"); //原商户订单号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         //reqData.put("origUuid", "3357cfbe24bc4de1bcb7013dd129eba3"); //原交易科技公司订单号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //reqData.put("origSxfUuid", "83620210924554863049"); //正交易落单号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        reqData.put("amt", "0.01"); //退款金额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //String notifyUrl = "https://"+domainName+"/"+globalPrefix+"/tradeRefund"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //reqData.put("notifyUrl", notifyUrl); //回调推送地址,用来接收科技公司的异步推送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        reqData.put("refundReason", "退货"); //退货原因 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        reqData.put("extend", ""); //备用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String req= SXFPaySign.getSXFPay(reqData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ///logger.debug("参数信息:"+req); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        System.out.println("req:" + req); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //此处不要改变reqData里面值的顺序用LinkedHashMap 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        HashMap reqMap = JSON.parseObject(req, LinkedHashMap.class, Feature.OrderedField); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //组装加密串 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String signContent = RSASignature.getOrderContent(reqMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        System.out.println("拼接后的参数:" + signContent); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //logger.debug("拼接后的参数:"+signContent); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //sign 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String sign = RSASignature.encryptBASE64(RSASignature.sign(signContent, SXFPaySign.privateKey)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        System.out.println("============签名:" + sign); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        reqMap.put("sign", sign); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String reqStr = JSON.toJSONString(reqMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        System.out.println("请求参数:" + reqMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        System.out.println("请求参数:" + reqStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //调用第三方接口地址 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String url = "https://openapi.suixingpay.com/order/refund";//生产地址 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String resultJson = HttpUtils.connectPostUrl(url, reqStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        System.out.println("返回信息:" + resultJson); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //不要对reqData排序 所以用LinkedHashMap 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        HashMap<String, Object> result = JSON.parseObject(resultJson, LinkedHashMap.class, Feature.OrderedField); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if ("0000".equals(result.get("code"))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //验签 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String signResult = result.get("sign").toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            result.remove("sign"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String resultStr = RSASignature.getOrderContent(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            System.out.println("resultStr: " + resultStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //sign 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String resultSign = RSASignature.encryptBASE64(RSASignature.sign(signContent, SXFPaySign.privateKey)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            System.out.println("resultSign: " + resultSign); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //组装加密串 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (RSASignature.doCheck(resultStr, signResult, SXFPaySign.sxfPublic)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                System.out.println("===================验签成功=============="); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                resultData= ResultData.success(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(result.containsKey("reqData")){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //判断 bizCode bizCode =="0000" 则业务成功 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return gson.toJson(resultData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 异步回调通知 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @RequestMapping(value = "/tradeRefund", consumes = "application/json", method = RequestMethod.POST) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @ResponseBody 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public JSONObject tradeRefund(@RequestBody JSONObject request) throws ParseException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        logger.info("-------------------------------回调开始----------------------------------------------"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        logger.info("回调返回过来的参数" + request); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JSONObject req = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        req.put("code","success"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        req.put("msg","成功"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return req; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @RequestMapping(value = "/demoFenZhang", consumes = "application/json", method = RequestMethod.POST) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public String demoFenZhang(@RequestBody PayInfoRequest payInfoRequest) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String ss =""; 
			 |