赞
踩
public class AlipayConfig { //商家账号sqqpls0340@sandbox.com //商户UID2088102177177706 //登录密码111111 //1.商户appid //沙箱 //public static String APPID = "2016092300579934"; // public static String APPID = "2088102177177706"; public static String APPID = "2016092500591638"; //2.私钥 pkcs8格式的 //沙箱 // public static String RSA_PRIVATE_KEY ="MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDOhHLgvX+iEekYcJfV8Ewxy2JruNdInft1btuS9cCsB/Ou7HfZd+dSAU6jJOmbMwnaBKJLpiH3tEnXeS0ISAkj00SE0cl+mZfdDheB2Y33J/5cpsj+Yy8SXVMqDmhFc9eNIcnmUrKkwgYWKGSjygy4FQbCNajJeidq5cwbzSR4niJdAvDzv0KXwJzovY7tTahpJyNBGi6oed4yzRqgVyA5mKFfLYZAvdP1GqkR97wWa8qWPiZpIfrV1RlfZFNfao3DCM6LYU/hD/Hq00vYLHMd1QepistWZTLXTJFVvY5jEFTLMd84xQwRFxBo2F7fQo2U7lZVBi7u5I+bBCXMlvOZAgMBAAECggEAeHTE1NVzJsMvpLO3vG+m4bxxscdkutR7IWoB5Nw2/6C7wCHpXg0T/b8JcRtMrtu8OVBOobVLRsH/+BCT9aqeuii2ZIpA7vkDnUpk57ZPmgPX147o2YhcomeQ5Iz2wNvqtEUrEI7X6EXLaw0wdmCZvp11Db5irvHzH+TdgrHLPhZhyjQwVXdSqxMqfaO97hu41sgJYlbwUhZz2okHCoWDrJOpoFRI1Owmo6FdSXC1xED91MwP7mXYaQDmyq0exlmPC35ahFchtvkdT/M2wqjCBrWVnXYV7pu5FgyoEGdEZS2UpxzSNLFdy2bzhbSp9oWnsgBspoJ250MXaY5OeJ2aoQKBgQD1EtHNqoWb0oAKUWrH21G0p49T2/BU0Yke+wXbm1Zzv6uH+6OeMT41hGGIK20yXqhJRn1DYPXl3+PuRRwd2R02e6LIVGqDnIGEvDsTZ7dFePlWSzfiauI6QkytPmRwDKFV+SJTBqD8Dx3Iz7i1MhEZKG5SVmfesXL2pOOVUulCzQKBgQDXuZA7WBFtpHAf02Fu/f0+u4vjaq398WpMUTwEo1RmAnuR72LlMxRxXvMC5+u3iEbcGP/Y5yhMok0NgTPM3gRw+Zi/VDEyDFzkut3gxrft9X4pAqFgSGo1H+JKF87YvUJ5i5yXXqbuqjKdAedlj1qWHLKZuFv6DSGrvEsvGDWr/QKBgHPnoagmNKhcZsf6d4jr9fl9obCkfUZwDuzDBaM2FS4LAUH/xgMkAOrooAP5ndxLnkWBe+6o5cMBH1hqAQEw1LsWwAcEvZdfJnYzW7EyxR+rNikUy+peaH3rKz5oGrJPluIFQLGJmgt7zrdRXmb7tdBzKbHxQZC11cxGcYgGvWElAoGBAIrMiz+Tl4sbLUVc5Sjb5PBTDVuijRaCGSnHbr1xNWF5IXaxNslPx0x2khcBj8mDtkvxDdTKTkSYfMk+o0yiYOsrvRsFma2hBLfqf84bLca+mJDcb2aa0TMjM58GmIEdrMK1kGhYb0HKYkxhKDhRNzC0gDmlxBAsGMj9msZPZmElAoGBAM/8gMSMnCLG73hbqI5Otn8qREGZXFvmyzMrRPEXkhSAi92hozrQSotwdi5unAvqbofNrsTWecb7QUtOBCNAc5hPJgiOhKm4LQ7zC8Zpu9fxogluzpdhKYzCYT2UIjgcscKtN14kA2kznooVfCS4u5IMoAfSWsguFWDz+snXwdcp"; // public static String RSA_PRIVATE_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCJDe3D5D54fCdFST56UEq2OcReevbAIZN6ExPo+ukMY/gqC4oNdyWU48uIzWtUbVb/8HCtrkjTBB0NyiICsVGS5PDWy05nd0d0Qm862+kI96oBfZCtfa4I2WW8RTzA+sg0A8L78ysjNDJdlafpOOy0BC1S5DlWxl2ed6dV50phLx+XG03+Gk7q/plEcR+jZ6YbA1YJ8wgOrzkVOlQZO9Qxb8fNVjp9ygPhyJSLaRrOQv1ynkXlVCelBRAZXTc9Fs4UwHB3dBqTS9foZTVHk04zxWxB1A/Ez1yQfzr0dxIs6K0oozDjxB/9cBkfSe5Iao/vckrLeSJztdYdO30c8cxTAgMBAAECggEAQu7AfXiMYb8QVrAMiSOJOTFBC3s14mMDaQzEHnXbNqfj3HTCOQ1FF0+gaPEZR6QWZuv/u3JwMk3B+qgKsBH06q5QSDYF1lXUWZzQQYiAaFa7efremzvTsJKrMqUFpKFVAMINiYoaORkWt8mMtUONpeScVe0La6t4sRlyaWuJUag8qpTqeTMrrBr+iU5aRWqJRnfqWLS/rq4/9dy1S5fLcbyGV8hV00fRST7y6+YKbTXSHMxsUWOVje6DVbKIKUt1UMuWqKQMbb69+TuVfnMBTeiS+GAEbYqQsgbCunkEVFwdGN/XmCt6WbT08Fuso8EOIocnhPNe1f0bABwxkwuxsQKBgQDoRHd0/pEvOkXKdiW40v6oR1OeSLk4Yt0zVqIndFVw9yw+6ZYM0OukH0bPPWnJnEDKSyVOE6owV6JZflFcOZ8WrHjb8ONwsnMWI35hnEhYmhyaDD1F+mH1j4RMxhbjEkg1TwiDBCHS+pI9FQu+hPkilg7WKiZo3wdwOLTWCyCDzwKBgQCXDu2V25v2FoFns+iLJSfg0PkvfMQR96F3Zv1QbVFRuwo3gqzr0ZWpxPf0iXuD6W2gBlq9o7B4IUgFKkzutQ2q3Rk1kMwp87KjaDPc0bKXBMa+luQQNosK+/5U64a6+ISGl2KXB54veKRgjHQe19uRcRXzIjQwODwr6OplfOxcPQKBgGtxIIEyMR7Tqe0Z8iEpGTvmoruZkHSQ5xoUfTYbDlsPO5xumUacbiShgzPiiMkGSsJJOJyBZDywjR0w3Zn33auzZMT5DXzYT3xyNsgYby7tO0XXW5C/XgkltmF9UKEBl/1w7dMNWkgqOPOghKpBAK4LFBnlrZbddKdo094fj47pAoGAM24Qs+nuQq3M5yrYrK880Y00mddnxhpCbi2xZzWg7yu4QcgK6csUopV+OlKoq/PIsCgZsuFNTsk+BQwu30LjYV4fnB4tdMcU9g+fQLpgjIxCwlcLVP3M/zNmlzENUREVxeE63uLoF4+Cn6CSVIH3rqAK8hmeHSC4U9bcHyuWKZ0CgYEA0ed1ZacWtVweyt58IbRQx0fA13fIX3ROplbXMqjht5P0Z1IuQZAMomRfJfCkrC9Uf7Ri1VYromjkEF74vFdJ4zm9CZhFkE0pVVnbQ+tpa0BMm9n+eJ4y5CHhQ+rVrU/ySM1rKx9iSFKca1VIiVGEj/nIhgOtPOju75nQ3YAIe7E="; public static String RSA_PRIVATE_KEY = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCLlCbwTT8JNWVBhMP1ILj/99fm2YI8laTo2yGvmc4ca4I6sr3xhvsaVVVzJlBau/e3Cje+uC5NkMDUW9+908t/IQZNhMTOLGB9Dn3k2cD6J4hIqIH9b5B4ZYjZRL+3D0nKKhRQGgO2H24PE6SJThsST9/UmKJJflNbCZLSz8WFlIBAdKWP1xvsycSSMALSjnNQxOQxd/yxo7Iuc4f9aJZaV83sqgwP/dFy+a2/wWhbpF6j7VcDEILLktzBG12y5UU14OPQeU6Fv09OFo3id944iA3AjIPYvlmp1Tpf7wIroO2stCX9RmWhXjhe2bv0B+9x1/hxF2sbok6ToiVb0FFRAgMBAAECggEALLBfkzq4PwOIiuSuNPKoKNQ6nR/w8eLbrO5UJ7vv4OuPA6os5ILaLME7naWbvqFGG6W62WZw9Mau5o8P4OBJ3Ec/lFw5AuX0crXMGxSZE77KhLDnBbTNpa6klSPM2hicAI1eeZMKsyn2+/7HBGssgb1vJctE0pEOsSwshTCexjifj9QF8THoQ7yYuZjxE+fQ0u0DcFSKhkpbb6BhOJZ6C6ClFheojXBGAseIJcpskrjiiqKiewAeYz524yjtDwjnhd7zhnjjoaYbBl1gTsnmGCfrNuXKDzJn3M6V9ryjPFv8JhNUGdj6SIn3ABADlvjnk1gGLwii2Ox+rfphs98iEQKBgQDBaWyXNRU/x5IXOa0pSJbrI2ynQC2dH9lI+ixD6HzdIEPJYh1mtDYntOqzKHSjYbQ6BveNvLkzUTwdbWWJNHnvaq4daUfmWuoFMVve5FE4Er0Ex8XBcj2AXzTQQnY3NEdk7sHZAHdLojQdiTjvEyKuwp9rKcCnx+i1jjVYOQHhvQKBgQC4vxl04jUZT2IzsZPo6covwIs+R8dw3yRw0UM3oCSIaXfYMjWyxxiq/HgJeLTlH1nX+fL0T1NN04/UysBbNem8dmNNnUvnoUoi4eHNSMQMFLZjNTRni2dZbeFSvD1p/3K1oFe1Oaa0X6qORh19/b5KTriTcGtxrOrnedPsLsoFJQKBgBK/toAd7DZnkTjhJXEYEVEv+OtppEJUAQs6/SmEEv6YjxmpgjIfjBRjTFEbvdrMsNzjKgI6ZjWcTViI70vSo3NbAw/k0cx5ya/BLie4OEtYPayF9Rygh2e3UvZRSwZk8frNzkrL6cSSL70hPTynvTf1s+B+hqd9EIjxBSjNNep9AoGALjprVUsRPF8X1JWXzE1L8Xz9mrz9U+oSRUSnzDB/U78IZQnTVAPr0UVRiBUzNq4MnjWGLMn4r13D/NwrG+e2sBjzqkU07CX41hetl9+gZuF77gEvNsW0O7V6D2jY+UAZZQdVSxy88R+LHwS+dnta9V8TYplb2VsKgJeEhvICTR0CgYAm7wrbSppPjv4RfpEniMS5P/yn6U9KGlZmmKGucsiSs2GyTngUQr+60QEVEdSDSUXb+DDAeASw1c2+sgGLaw5VYecbxTCV4qVo1Edt/QkEcDzVJEVNuNGdJqR+WQa7MWkc879ELCDftBLBXo3BDKfnoaECtl6/QDa95RkgrBbcmw=="; // 3.支付宝公钥 //沙箱 // public static String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyOeGzmLJobvHyEn5lVfxcGPvWA6HzGtXygfU/Wg4EnakSrL3ul2cFasdZfqBz6WILe7PvsYIEyMqm8r5uP3nK3IHZsQWA6/b5R0Vhra4hjpl3y65yJcBcvKJXYePg4Yph9u8o7xiW05/6d3Tq7ZlVULhvfWwX2WbhD1e2SvjhF0311G02tz9JtxYEjj1PRWcIVZyCZWYV9zFPfsktnu4A209nDZHM3ULHkaNq2nfAKp135/uswpsSmTymNvE5A8ar9WkHkcynOiIlwGf+bSchOrhVs6rNMnxiGAQas9qI9ldBBn8NBoAaSRHhjqi2vlWHYAvGtrVZdc+fYGIda4VqQIDAQAB"; // public static String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiQ3tw+Q+eHwnRUk+elBKtjnEXnr2wCGTehMT6PrpDGP4KguKDXcllOPLiM1rVG1W//Bwra5I0wQdDcoiArFRkuTw1stOZ3dHdEJvOtvpCPeqAX2QrX2uCNllvEU8wPrINAPC+/MrIzQyXZWn6TjstAQtUuQ5VsZdnnenVedKYS8flxtN/hpO6v6ZRHEfo2emGwNWCfMIDq85FTpUGTvUMW/HzVY6fcoD4ciUi2kazkL9cp5F5VQnpQUQGV03PRbOFMBwd3Qak0vX6GU1R5NOM8VsQdQPxM9ckH869HcSLOitKKMw48Qf/XAZH0nuSGqP73JKy3kic7XWHTt9HPHMUwIDAQAB"; public static String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtpkqE+FuRC1DMJ6Frw6QJy5gOHjme8RIHbRu7jEigGXqxcyOAT7yChk6bgd9ukjB6bLgGLArXRtDLD4Ch+hfH7jRvKSSxWLRQjafzO8ko5txNyCoDNemSXTy7x769IUnFgVa6hVOXbRQLFeCDNqPj5n3E8r7JT2JsSsAOTSyv5lkkKO1V2MxKW6gHdTAdlDXYjwRyUdYZouYvpluH1SR1kAOdt+LydE0o9Upb4mBHZLrT7K/3gUDNG2qUxKCsUFcL98hrH2ipuSDqSJV9yGgpLV6b0oRX/OXrGvg4OdY4svukZpgtTPFJV/Aw+aX7SGIwr+LkD9h0ahMHDI29F0uJQIDAQAB"; // 4.服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 // public static String notify_url = "http://192.168.0.128:7001/gen/app/notify_url.do"; public static String notify_url = "http://47.97.173.149:80/gen/app/notify_url"; //5.页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址 public static String return_url = "http://www.baidu.com"; //支付成功后返回的页面 // 6.请求支付宝的网关地址 // public static String URL = "https://openapi.alipay.com/gateway.do"; public static String URL = "https://openapi.alipaydev.com/gateway.do"; //沙箱环境 // 7.编码 public static String CHARSET = "utf-8"; // 8.返回格式 public static String FORMAT = "json"; // 9.加密类型 public static String SIGNTYPE = "RSA2"; }
/** * 获取支付宝加签后台的订单信息字符串 * golds 需要付的钱,giveGolds:得到的金币 * * @param * @return */ @RequestMapping(value = "alipay", method = RequestMethod.POST) public String getAliPayOrderStr(HttpServletRequest request, HttpServletResponse response, String uid, String golds, String giveGolds, String loginName, String ispc) { //最终返回加签之后的,app需要传给支付宝app的订单信息字符串 String orderString = ""; //生成订单编号(纳秒数+登录名后4位) String orderId = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + (int) System.nanoTime() + loginName.substring(loginName.length() - 4, loginName.length()); //创建订单信息(业务数据) OrderManage record = new OrderManage(); record.setId(orderId); record.setUserId(uid); record.setCreateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); record.setCoinNumber(Integer.parseInt(giveGolds)); record.setGiveCoin(0); record.setOrderCoin(Integer.parseInt(golds)); record.setOrderType("1");//0是 微信 1是支付宝 record.setOrderDetail("未付款"); record.setIspc(ispc); // 是否购买pc端服务 0:否 ,1:是 try { //实例化客户端(参数:网关地址、商户appid、商户私钥、格式、编码、支付宝公钥、加密类型),为了取得预付订单信息 AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay AlipayTradeAppPayRequest ali_request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); //业务参数传入,可以传很多,参考API //model.setPassbackParams(URLEncoder.encode(request.getBody().toString())); //公用参数(附加数据) model.setBody("具体描述"); //对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。 model.setSubject("购买金币"); //商品名称 model.setOutTradeNo(orderId); //商户订单号(自动生成) // model.setTimeoutExpress("30m"); //交易超时时间 model.setTotalAmount(golds); //支付金额 model.setProductCode("QUICK_MSECURITY_PAY"); //销售产品码(固定值) ali_request.setBizModel(model); ali_request.setNotifyUrl(AlipayConfig.notify_url); //异步回调地址(后台) ali_request.setReturnUrl(AlipayConfig.return_url); //同步回调地址(APP) // 这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse alipayTradeAppPayResponse = alipayClient.sdkExecute(ali_request); //返回支付宝订单信息(预处理) orderString = alipayTradeAppPayResponse.getBody();//就是orderString 可以直接给APP请求,无需再做处理。 orderManageService.insertSelective(record);//创建新的商户支付宝订单 logger.info("orderString:"+orderString); } catch (AlipayApiException e) { e.printStackTrace(); logger.info("与支付宝交互出错,未能生成订单,请检查代码!"); } return orderString; }
/** * 支付宝支付成功后.异步请求该接口 * * @param request * @return * @throws IOException */ @RequestMapping(value = "notify_url", method = RequestMethod.POST) @ResponseBody public String notify(HttpServletRequest request, HttpServletResponse response) throws IOException { logger.info("==================支付宝异步返回支付结果开始"); //1.从支付宝回调的request域中取值 //获取支付宝返回的参数集合 Map<String, String[]> aliParams = request.getParameterMap(); logger.info("=========支付宝参数集合=========:" + aliParams); //用以存放转化后的参数集合 Map<String, String> conversionParams = new HashMap<String, String>(); for (Iterator<String> iter = aliParams.keySet().iterator(); iter.hasNext(); ) { String key = iter.next(); String[] values = aliParams.get(key); String valueStr = ""; for (int i = 0; i < values.length; i++) { valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; } // 乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化 // valueStr = new String(valueStr.getBytes("ISO-8859-1"), "uft-8"); conversionParams.put(key, valueStr); } logger.info("==================返回参数集合:" + conversionParams); String status = this.alinotify(conversionParams); return status; } /** * 支付宝异步请求逻辑处理 * * @param * @return * @throws IOException */ public String alinotify(Map<String, String> conversionParams) { logger.info("==================支付宝异步请求逻辑处理"); //签名验证(对支付宝返回的数据验证,确定是支付宝返回的) boolean signVerified = false; try { //调用SDK验证签名 signVerified = AlipaySignature.rsaCheckV1(conversionParams, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, AlipayConfig.SIGNTYPE); logger.info("=========验签结果========="+signVerified); } catch (AlipayApiException e) { logger.info("==================验签失败 !"); e.printStackTrace(); } //对验签进行处理 if (signVerified) { //验签通过 logger.info("==================验签通过"); //获取需要保存的数据 String appId = conversionParams.get("app_id");//支付宝分配给开发者的应用Id String notifyTime = conversionParams.get("notify_time");//通知时间:yyyy-MM-dd HH:mm:ss String gmtCreate = conversionParams.get("gmt_create");//交易创建时间:yyyy-MM-dd HH:mm:ss String gmtPayment = conversionParams.get("gmt_payment");//交易付款时间 String gmtRefund = conversionParams.get("gmt_refund");//交易退款时间 String gmtClose = conversionParams.get("gmt_close");//交易结束时间 String tradeNo = conversionParams.get("trade_no");//支付宝的交易号 String outTradeNo = conversionParams.get("out_trade_no");//获取商户之前传给支付宝的订单号(商户系统的唯一订单号) String outBizNo = conversionParams.get("out_biz_no");//商户业务号(商户业务ID,主要是退款通知中返回退款申请的流水号) String buyerLogonId = conversionParams.get("buyer_logon_id");//买家支付宝账号 String sellerId = conversionParams.get("seller_id");//卖家支付宝用户号 String sellerEmail = conversionParams.get("seller_email");//卖家支付宝账号 String totalAmount = conversionParams.get("total_amount");//订单金额:本次交易支付的订单金额,单位为人民币(元) String receiptAmount = conversionParams.get("receipt_amount");//实收金额:商家在交易中实际收到的款项,单位为元 String invoiceAmount = conversionParams.get("invoice_amount");//开票金额:用户在交易中支付的可开发票的金额 String buyerPayAmount = conversionParams.get("buyer_pay_amount");//付款金额:用户在交易中支付的金额 String tradeStatus = conversionParams.get("trade_status");// 获取交易状态 logger.info("========交易状态=========="+tradeStatus); //支付宝官方建议校验的值(out_trade_no、total_amount、sellerId、app_id) logger.info("========订单号:=========="+outTradeNo); OrderManage order = orderManageService.selectByPrimaryKey1(outTradeNo);//获取订单信息 logger.info("========订单信息:=========="+order); logger.info("========订单金额:=========="+totalAmount); logger.info("========商户appid:=========="+appId); float totalAmountFloat = Float.parseFloat(totalAmount); float orderCoinFloat = Float.parseFloat(order.getOrderCoin().toString()); logger.info("========totalAmountFloat=========="+totalAmountFloat); logger.info("========orderCoinFloat=========="+orderCoinFloat); if (order != null && totalAmountFloat == orderCoinFloat && AlipayConfig.APPID.equals(appId)) { //修改数据库支付宝订单表(因为要保存每次支付宝返回的信息到数据库里,以便以后查证) String golds = userService.getCoinCount(order.getUserId());//获得用户之前的金币数 OrderManage record = new OrderManage(); record.setId(outTradeNo); // record.setOrderDetail("交易成功"); record.setOrderStatus("0"); int coins = Integer.parseInt(golds) + order.getCoinNumber() + order.getGiveCoin(); record.setAfterCoin(coins); switch (tradeStatus) // 判断交易结果 { case "TRADE_FINISHED": // 交易结束并不可退款 record.setOrderDetail("交易结束并不可退款"); break; case "TRADE_SUCCESS": // 交易支付成功 record.setOrderDetail("交易支付成功"); break; case "TRADE_CLOSED": // 未付款交易超时关闭或支付完成后全额退款 record.setOrderDetail("未付款交易超时关闭或支付完成后全额退款"); break; case "WAIT_BUYER_PAY": // 交易创建并等待买家付款 record.setOrderDetail("交易创建并等待买家付款"); break; default: break; } int returnResult = orderManageService.updateByPrimaryKeySelective(record); //更新交易表中状态 if (tradeStatus.equals("TRADE_SUCCESS")) { //只处理支付成功的订单: 修改交易表状态,支付成功 logger.info("========支付成功=========="); if (returnResult > 0) { if(order.getIspc()!=null&&order.getIspc().equals("1")){ //购买pc端服务 //新增通知信息 Notice notice = new Notice(); notice.setId(UUID.randomUUID().toString().replace("-", "")); notice.setUserId(order.getUserId()); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 notice.setCreateDate(df.format(new Date())); notice.setStatus("0"); notice.setAdminStatus("0"); notice.setType("1"); //UserUtils us = new UserUtils(); //User user = us.get(order.getUserId()); User user = userService.selectByPrimaryKey(order.getUserId()); logger.info("========用户对象==========="+user); notice.setAdminMessage(user.getName()+"已购买pc端服务,请为他开通权限!"); notice.setPersonMessage("您已购买pc端服务,若未开通,请与管理员联系."); noticeService.insertNotice(notice); } userService.updateUserCoin(order.getUserId(), coins + "");//更新用户的金币数 CoinInfo info = new CoinInfo(); info.setId(UUID.randomUUID().toString().replace("-", "")); info.setUserId(order.getUserId()); info.setDelFlag("0"); info.setNumber("+" + (order.getCoinNumber() + order.getGiveCoin())); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 info.setTime(df.format(new Date())); info.setTitle(GoldRule.USER_GET); info.setContent(GoldRule.USER_PAYSHOP); userCoinService.insertSelective(info);//新增金币详情 logger.info("========新增金币详情=========="); return "success"; } else { return "fail"; } } else { return "fail"; } } else { logger.info("==================支付宝官方建议校验的值(out_trade_no、total_amount、app_id),不一致!返回fail"); return "fail"; } } else { //验签不通过 logger.info("==================验签不通过 !"); return "fail"; } }
/** * 向支付宝发起订单查询请求 * * @param * @return * @throws IOException */ @RequestMapping(value = "/checkAlipay", method = RequestMethod.POST) public String checkAlipay(String outTradeNo) { System.out.println("==================向支付宝发起查询,查询商户订单号为:" + outTradeNo); try { //实例化客户端(参数:网关地址、商户appid、商户私钥、格式、编码、支付宝公钥、加密类型) AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE); AlipayTradeQueryRequest alipayTradeQueryRequest = new AlipayTradeQueryRequest(); alipayTradeQueryRequest.setBizContent("{" + "\"out_trade_no\":\"" + outTradeNo + "\"" + "}"); AlipayTradeQueryResponse alipayTradeQueryResponse = alipayClient.execute(alipayTradeQueryRequest); if (alipayTradeQueryResponse.isSuccess()) { OrderManage order = orderManageService.selectByPrimaryKey1(outTradeNo);//获取订单信息 //修改数据库支付宝订单表 String golds = userService.getCoinCount(order.getUserId());//获得用户之前的金币数 order.setId(alipayTradeQueryResponse.getTradeNo());//订单id order.setOrderStatus("0"); int coins = Integer.parseInt(golds) + order.getCoinNumber() + order.getGiveCoin(); order.setAfterCoin(coins); order.setOrderCoin(Integer.parseInt(alipayTradeQueryResponse.getTotalAmount()));//订单金额 switch (alipayTradeQueryResponse.getTradeStatus()) // 判断交易结果 { case "TRADE_FINISHED": // 交易结束并不可退款 order.setOrderDetail("交易结束并不可退款"); break; case "TRADE_SUCCESS": // 交易支付成功 order.setOrderDetail("交易支付成功"); break; case "TRADE_CLOSED": // 未付款交易超时关闭或支付完成后全额退款 order.setOrderDetail("未付款交易超时关闭或支付完成后全额退款"); break; case "WAIT_BUYER_PAY": // 交易创建并等待买家付款 order.setOrderDetail("交易创建并等待买家付款"); break; default: break; } orderManageService.updateByPrimaryKeySelective(order); //更新表记录 return order.getOrderDetail(); } else { System.out.println("==================调用支付宝查询接口失败!"); } } catch (AlipayApiException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "0"; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。