package com.guahao.api.walkinto.service; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.guahao.common.util.HttpClientUtil; import com.guahao.common.util.JedisUntils; import com.guahao.common.util.VeDate; // sang:注释icbc部分 // import com.icbc.api.DefaultIcbcClient; // import com.icbc.api.IcbcApiException; // import com.icbc.api.IcbcConstants; // import com.icbc.api.UiIcbcClient; // import com.icbc.api.request.CardbusinessAggregatepayB2cOnlineMerrefundRequestV1; // import com.icbc.api.request.CardbusinessAggregatepayB2cOnlineOrderqryRequestV1; // import com.icbc.api.request.CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1; // import com.icbc.api.request.CardbusinessEpayh5UiConsumptionRequestV1; // import com.icbc.api.response.CardbusinessAggregatepayB2cOnlineMerrefundResponseV1; // import com.icbc.api.response.CardbusinessAggregatepayB2cOnlineOrderqryResponseV1; // import com.icbc.api.utils.IcbcSignature; // import com.icbc.api.utils.WebUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; @Service public class PayService { private Logger log = LoggerFactory.getLogger(PayService.class); //商户编号 public static final String MER_ID="1726317574"; // public static final String MER_ID="060351010017004"; //线上协议编号 public static final String MER_PRTCL_NO="060351010017004"; //工行APPID public static final String GH_APP_ID="10000000000003190784"; //微信APPID public static final String WX_APP_ID="wx45acd2b4907cb8f4"; //微信AppSecret public static final String WX_SECRET="4b5c37baebecfa9d5d0282c5d2867cd2"; // public static final String URL="http://gzh.btlsoln.com/WGZH"; public static final String URL="http://wx.btdbyy.cn:9081"; //工行网关公钥 public static final String APIGW_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCMpjaWjngB4E3ATh+G1DVAmQnIp\n" + "iPEFAEDqRfNGAVvvH35yDetqewKi0l7OEceTMN1C6NPym3zStvSoQayjYV+eIcZER\n" + "kx31KhtFu9clZKgRTyPjdKMIth/wBtPKjL/5+PYalLdomM4ONthrPgnkN4x4R0+D4\n" + "+EBpXo8gNiAFsNwIDAQAB"; //自己的私钥 // public static final String MY_PRIVATE_KEY="MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCWrJCh0z3q4w0yFyZSfYyPZPlbQYdz/dyGL6nodVlgELspDQ2XencoO1vg43T7OOEQDScp3IREDcha+9I/iGLSiPIlYUEfqQyCWIC28Jr0gr1f+zfb4pbejY46Fc2SntGmwlN/JPLPHWhKLpig/i6aqZN3IvXPM9Lu5tW0JSa6uEPsYIMPZY/2+8okuvPuBU2Zlzdf+pvtP+BUVc/GjbFI26F+uo95eLBufuBnZ9z++ttP4UrAZJ7VNU2iztHheBgV9S3nupdL1SJN6Ga+ZROdfXEo8KKVSQmjPh9U3eaz+o3iLnuAnoj3UP31SuDeiOGLdRW0YY5MzFmvCHBA1b4vAgMBAAECggEALDFVAoHIyVnrBuQPU2aLkYtWL9PafMTap2jXdtzkZ+7AVlwDvogm5t/yJNXR+9VE/cY91GNfT+6S80yk8Al6orGUBC6wQS7+AkUfC4kqicjG7p3qVk3xXjk6nALFFtoKN9ULVGFr7h979TYRgjbLSIWwQOM6IZnbpkKCL6It59mrp5ns6EQthEVvijpD7yqj7xCOAB1EF8tBG9TyM+jc5exbslbQKtapAaGTEBVPLNC66rOkaDIlBQY6tQwzugCBzVo31//Jrx0pule7MNBdP1iCqP5XvLIgJ+P/al9d32vgbN+Ce1VUD9ghAJ44VzdDhNMsfXVVx/xPKdB2Luw2wQKBgQDgVcY3Pb+0lFIRhT81OpFne1JnVxmXCDkoqWWNnVOY7rFsd71Xf4tnYfr9fdIZHy/esun2OFhkGr/gK5K6HJW+LtZHCwXTO10TR5h+mWbJBSNCpOGVf/ZeRuaKrRLcPeeKllIZN3MYkL5ytLrBccskvCUZxNZL4E2P2U7TRop/8QKBgQCr8Rdfa6uWLcA7MqaS3Y6MCemLAvLqdRwe8r+zRfrS0kbz3bJB/wDdb1qrx7m72uSkFQjQvOnFzoaVuPy95WCOTEjWel7QtFmTYuFEN+kx2qBQiW0KU3C0H7CHLDDk6593og5qSsU3tA3wHQOatFFYY+7TGBYmhKcuHklyy1RAHwKBgQC8gZcECFE0zoV/z3XjpolUaV4/FAOe0/wj3ORG8XKzya8xNBTYl4ZuovijVbzb+0bgXXsXuRUdWRTuq+6pkSeLHhRUskB81R9K+hh8GS8zr6uHbsFYPKSrZ+yFjxWQGDyeSd5G7j863zYJcTCVKKfJAIg0dSCVta+3NqV0B4yOIQKBgQCL1Ow/K99FqTt2aUDSm+B7vuvxo5pOVqNh/+UrNLRBk8UkOp3n0iyv6QmCPlGslt3vGzQqHhi4R7doOCNDhDG8SAnMc4R8ks9ub7HnutipNLXACaNmDGnR8xurMqMo6P6tWlwC0YAGRyY2qkHuJMsq6Uqm3iXVeXhEp1jwRK/l3QKBgQCjaN6BNFHq3PM9JYHlQgJNG0ACOVW4bqEp7dy7WFaLHXuJwlpN4zoI/FYS+zVVEwX3A//d+iW29w7VR543CB0QjZNUB+swYA8KYrtDqXC2o9bF+LKSq10Ga/BHNWDHZZTm2XiFxzzpVQAcuaumoj0+5qQpQ5ZvR6HZVOEo8uq0EQ=="; public static final String MY_PRIVATE_KEY="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCJFkZeWd97TiE3LmhTHOL0dM5Oa2cMf9oKX9xiuALskTHX+2JpvNysLobqXmqgXjyeVTXP1bRldQRM5FEYfZA9oSZhRrw943ik/2UUeJJ2sq8wMa3XTrw9wWjJw9eP1lnc5IseBT1Tn/QTJhLm6ydjqXjl/KyBF3HMZy7rKiqt9vH6zDaSwYGHC+UeVbQvcvLdwJDVsiv7Ah5SgIVZydfUXKwKx4BbkHLbn0zMEWAIzFlu92xpDQ8+mX6lMZS9jefcSDmrwpLFIUmkfb6ZM4lqWV1Z01QXws8vu4ONEqT7mxJ9oNQmIVk9Ys4YiSn6bCN8zTCdNzsVmXN+iL/jcNQRAgMBAAECggEAZ06uAPRhgh7C0T7bx6aBMg/EWTx/D+BZhG/xOUPKkFRq54S+CUkWU3tMmNpGKExcCkXUo6c8pyij8P4uTvJw/MCwl6YivdDqXg1JM0AZv/GwK/WEODlRiohyW3qGvBKg7eIdJKZ2LMrhuHx8yiB0MprITSk5Jp9wVsV7iiTgvO+8ywz6SW0mANvuxSh/5/mR/ybQK+40IuVHTyScvL03jK1woiLM1zNqc9Rv/kb2oAvO7NbogmPxbM44TR8L8YDgnAcDugONqE3dZfR8fmgUJQRixaAijx2Q/xoqoxhGkfVrhfUdKBsiHL+uuji5CgZbYDgTGTue0jiYmNkk+rGnAQKBgQDMQdIvdsFfuhFM4TQEy7FivEcFxvWlQ4IshwFhAxJAQpcqxuKq8i5qjsZ5RGrg8Le3KaFbmfS99QRoL8xM22cfLAz/p6z1BP52wY4No+/MSsMZGuBDivBX9ASUVNPHOWzAoq8qCMZ69nb+mVCU/O+T4ePxilRZATpcKanPUG7DuQKBgQCr0HApc+ooPQ5Akho3JupgqtpFERvG4dSxWiU9qx0/kMAbfDsCL63zciceMuq0t31yzs/5KmzJtJIOC0iUaLBSJhA53ZCXCJUULZbAWSgw6nbbIsx1F5JrJFoZrQtqxzLU/+i2TMA5ZxHmtXvzK2TwG4aOn11A7VUvv5luPhbvGQKBgQCZLyvwyMFRh3v+Ck824YSRJd6l6IbFgJGZz04rcWA4rTgtrqbDyYkiBR24SKVXOXCufxwyVI4GAEFj2aUAZvM5n5HIEfpWb35fld1xQWdP8SnMJCnYvdRuQeVFUTDakqiK9/ciMR6ZjUnEuzqB4gfTAnAu760+avtXry9Y+Vt4kQKBgF3w7LKtjzULFRTXDYBkRbgvEoK69P4MEhgaWsxaF/bedTtR9I2gdjLqklrfqha/UNcKHwp0WOD8WvNU1g1XJDj2WN7atyjtZ12OA6QN23zLZcsxPqszBTqRuLXbOKfcXH27ooiydFOueEo1ppzxeBIUasDmf711RqOB1ilBx5ZZAoGAFnZLJdV8SM6xm7FlXwjWN5I/4CB/hmyD5a4KNGq9clX7IUIsn9ywA+J5Cm4utpiMEyTOf0yA/iiup4YQWu+akhyded4uawd2yeyoLMu1o/ZYbiruH29/VST6iSpe6r0H7UU7B+R+0WFoXj3G6PMoMtl4LsZhdT3zUtVb2XCwbCY="; public String getOpenid(String code){ String accessUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+WX_APP_ID+"&secret="+WX_SECRET+"&code="+code+"&grant_type=authorization_code"; String accessTokenStr = HttpClientUtil.doGet(accessUrl,null); JSONObject jsonObject = JSON.parseObject(accessTokenStr); System.out.println(jsonObject.toString()); log.info(jsonObject.toString()); if (jsonObject.get("errcode") != null) { System.out.println(jsonObject.get("errcode").toString() + ":" + jsonObject.get("errmsg")); } String openId = jsonObject.getString("openid"); return openId; } /** * 调起支付接口 * * @param money 支付金额 * @param out_trade_no 订单号 * @param notify_url 回调地址 * @param body 商品名称 * @return 返回自动提交的form表单 */ public String pay(Double money,String out_trade_no,String notify_url,String body){ // sang:注释icbc部分,添加String返回值 String ret = null; return ret; //需传入appid,私钥,字符集 // UiIcbcClient client = new UiIcbcClient(GH_APP_ID, IcbcConstants.SIGN_TYPE_RSA2, MY_PRIVATE_KEY, IcbcConstants.CHARSET_UTF8); // CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1 request = new CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1(); // //根据测试环境和生产环境替换相应ip和端口 // request.setServiceUrl("https://gw.open.icbc.com.cn/ui/cardbusiness/aggregatepay/b2c/online/ui/consumepurchaseshowpay/V1"); // CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1.CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1Biz bizContent = new CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1.CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1Biz(); // request.setBizContent(bizContent); // //请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值 // bizContent.setExpireTime("120"); // bizContent.setIcbc_appid(GH_APP_ID); // bizContent.setMer_id(MER_ID); // bizContent.setMer_prtcl_no(MER_PRTCL_NO); // bizContent.setNotify_type("HS"); // bizContent.setNotify_url(URL+notify_url); // // bizContent.setResult_type("0"); // // bizContent.setReturn_url(URL+"/dist/index.html#/Yygh?type=1"); // bizContent.setReturn_url("http://gzh.btlsoln.com/jojugongzhonghao/#/Yylb"); // // //订单金额 // int m= (int) Math.round(money*100); // bizContent.setOrder_amt(""+m); // bizContent.setOut_trade_no(out_trade_no); // bizContent.setSaledepname("包头第八医院"); // String str="就医缴费"; // if(body!=null||!body.trim().equals("")){ // str=body.trim(); // if(body.trim().equals("挂号费")){ // //支付成功跳转地址 // bizContent.setReturn_url("http://wx.btdbyy.cn:9081/jojugongzhonghao/#/Yylb"); // }else if(body.trim().equals("住院预交支付")){ // bizContent.setReturn_url("http://wx.btdbyy.cn:9081/jojugongzhonghao/index.html#/ZYCharge_list?inHosNum=2020111990437&HosDate="); // } // } // bizContent.setBody(str); // try { // String ret=client.buildPostForm(request); // System.out.println(ret); // log.debug("payment info:" + ret); // JedisUntils.getJedis().set(bizContent.getOut_trade_no(),ret); // return ret; // } catch (IcbcApiException e) { // e.printStackTrace(); // return null; // } } /** * 支付回调 * @param request * @param response */ public void callback(HttpServletRequest request, HttpServletResponse response){ PrintWriter out = null; try { Map params=new HashMap(); String from=request.getParameter("from"); String api=request.getParameter("api"); String app_id=request.getParameter("app_id"); String charset=request.getParameter("charset"); String format=request.getParameter("format"); String encrypt_type=request.getParameter("encrypt_type"); String timestamp=request.getParameter("timestamp"); String biz_content=request.getParameter("biz_content"); String sign_type=request.getParameter("sign_type"); String sign=request.getParameter("sign"); params.put("from", from); params.put("api", api); params.put("app_id", app_id); params.put("charset", charset); params.put("format", format); params.put("encrypt_type", encrypt_type); params.put("timestamp", timestamp); params.put("biz_content", biz_content); params.put("sign_type", sign_type);//目前上行网关签名暂时仅支持RSA /**********验证工行上行网关RSA签名**********/ log.info("=================================="); log.info(params.toString()); //回调接口 String path="/pay/callback"; // sang:注释icbc部分,改为null // WebUtils.buildOrderedSignStr(path, params) String signStr= null; String results = null; String responseBizContent= null; // sang:注释icbc部分,改为true // IcbcSignature.verify(signStr, sign_type, APIGW_PUBLIC_KEY, charset, sign); boolean flag=true; log.info("---------------------"+flag); //验证签名 if (!flag) { responseBizContent= "{\"return_code\":-12345,\"return_msg\":\"icbc sign not pass.\"}"; } else { System.out.println("-----------------支付成功-------------------"); /**********合作方/分行 业务逻辑处理**********/ @SuppressWarnings("unchecked") Map respMap = (Map) JSON.parse(biz_content); log.info("return_code:"+respMap.get("return_code")+",return_msg:"+respMap.get("return_msg")); if(!respMap.get("return_code").toString().equals("0")){ responseBizContent= "{\"return_code\":-12345,\"return_msg\":\""+respMap.get("return_msg")+"\"}"; }else{ String msg_id=respMap.get("msg_id").toString(); //业务请求字段获取 String outTradeNo=(String)respMap.get("out_trade_no"); String order_id=(String)respMap.get("order_id"); //业务处理逻辑...... System.out.print(outTradeNo); //业务返回参数设置 int return_code=0; String return_msg="success."; responseBizContent="{\"return_code\":"+return_code+",\"return_msg\":\""+return_msg+"\",\"msg_id\":\""+msg_id+"\"," +"\"busi_param_rp\":\"thisisresponseparameter\"}"; } } //2、商户以RSA签名为例,如下:其中,priKey为商户私钥; signStr="\"response_biz_content\":"+responseBizContent+","+"\"sign_type\":"+"\"RSA2\""; // sang:注释icbc部分,改为null // IcbcSignature.sign(signStr, "RSA2", MY_PRIVATE_KEY, // charset); sign=null; results="{"+signStr+",\"sign\":\""+sign+"\"}"; response.setContentType("application/json; charset=utf-8"); out = response.getWriter(); out.write(results); }catch (Throwable e) { e.printStackTrace(); out.write(e.getMessage()); } finally { out.flush(); out.close(); } } /** * 查询 * @param out_trade_no 订单号 * @return */ public String inq(String out_trade_no){ String ret = ""; //签名类型为RSA2时,需传入appid,私钥和网关公钥,签名类型使用定值cbcConstants.SIGN_TYPE_RSA2,其他参数使用缺省值 // sang:注释icbc部分 // DefaultIcbcClient client = new DefaultIcbcClient(GH_APP_ID, IcbcConstants.SIGN_TYPE_RSA2, // MY_PRIVATE_KEY, APIGW_PUBLIC_KEY); // CardbusinessAggregatepayB2cOnlineOrderqryRequestV1 request = new // CardbusinessAggregatepayB2cOnlineOrderqryRequestV1(); // //根据测试环境和生产环境替换相应ip和端口 // request.setServiceUrl("https://gw.open.icbc.com.cn/api/cardbusiness/aggregatepay/b2c/online/orderqry/V1"); // // //请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值 // CardbusinessAggregatepayB2cOnlineOrderqryRequestV1.CardbusinessAggregatepayB2cOnlineOrderqryRequestV1Biz bizContent = new // CardbusinessAggregatepayB2cOnlineOrderqryRequestV1.CardbusinessAggregatepayB2cOnlineOrderqryRequestV1Biz(); // request.setBizContent(bizContent); // // bizContent.setMer_id(MER_ID);//商户编号‐必输项 // // //商户订单号 // bizContent.setOut_trade_no(out_trade_no); // // //bizContent.setOrder_id("020001030558000611912230005002"); // bizContent.setDeal_flag("0"); // bizContent.setIcbc_appid(GH_APP_ID); // // CardbusinessAggregatepayB2cOnlineOrderqryResponseV1 response; log.debug("------------------------------查询单号:"+out_trade_no); // sang:注释icbc部分 // try{ // response=client.execute(request,"bdby" + System.currentTimeMillis()); // //msgId消息通讯唯一编号,要求每次调用独立生成,APP级唯一 // // if(response.getReturnCode()==0){ // //6、业务成功处理,请根据接口文档用response.getxxx()获取同步返回的业务数据 // log.debug("查询ReturnCode:"+response.getReturnCode()); // log.debug("查询response:"+JSON.toJSONString(response)); // ret=JSON.toJSONString(response); // }else{ // //失败 // log.debug("查询response:"+JSON.toJSONString(response)); // log.debug("查询ReturnCode:"+response.getReturnCode()); // log.debug("查询ReturnMsg:"+response.getReturnMsg()); // ret=JSON.toJSONString(response); // } // }catch(IcbcApiException e){ // e.printStackTrace(); // } return ret; } /** * 退款 * @param money 退款金额 * @param out_trade_no 订单号 * @return */ public String refundHis(Double money,String out_trade_no){ String ret = ""; //签名类型为RSA2时,需传入appid,私钥和网关公钥,签名类型使用定值cbcConstants.SIGN_TYPE_RSA2,其他参数使用缺省值 // sang:注释icbc部分 // DefaultIcbcClient client = new DefaultIcbcClient(GH_APP_ID, IcbcConstants.SIGN_TYPE_RSA2, // MY_PRIVATE_KEY, APIGW_PUBLIC_KEY); // CardbusinessAggregatepayB2cOnlineMerrefundRequestV1 request = new // CardbusinessAggregatepayB2cOnlineMerrefundRequestV1(); // //根据测试环境和生产环境替换相应ip和端口 // request.setServiceUrl("https://gw.open.icbc.com.cn/api/cardbusiness/aggregatepay/b2c/online/merrefund/V1"); // //请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值 // CardbusinessAggregatepayB2cOnlineMerrefundRequestV1.CardbusinessAggregatepayB2cOnlineMerrefundRequestV1Biz bizContent = new // CardbusinessAggregatepayB2cOnlineMerrefundRequestV1.CardbusinessAggregatepayB2cOnlineMerrefundRequestV1Biz(); // request.setBizContent(bizContent); // // bizContent.setMer_id(MER_ID);//商户编号‐必输项 // // //商户订单号 // bizContent.setOut_trade_no(out_trade_no); log.debug("------------------------------退款单号:"+out_trade_no); //工行订单号 //bizContent.setOrder_id("060551080009000532107130007355"); // sang:注释icbc部分 // bizContent.setOuttrx_serial_no(VeDate.getNo(4));//外部退货流水号‐必输项 // //退货总金额‐必输项 // int m= (int) Math.round(money*100); // bizContent.setRet_total_amt(""+m); // bizContent.setTrnsc_ccy("001");//交易币种‐必输项 // bizContent.setOrder_apd_inf(""); // bizContent.setIcbc_appid(GH_APP_ID); // bizContent.setMer_acct(""); // bizContent.setMer_prtcl_no(MER_PRTCL_NO); // // CardbusinessAggregatepayB2cOnlineMerrefundResponseV1 response; // try { // //msgId消息通讯唯一编号,要求每次调用独立生成,APP级唯一 // response = client.execute(request); // // if (response.isSuccess()) { // // 业务成功处理,请根据接口文档用response.getxxx()获取同步返回的业务数据 // // ret=response.getReturnCode(); // ret = JSON.toJSONString(response); // log.debug("退费ICBC success return:" + ret); // } else { // // 失败 // ret = JSON.toJSONString(response); // log.debug("退费ICBC failed return:" + ret); // log.error("退费ReturnMsg:"+response.getReturnMsg()); // } // } catch (IcbcApiException e) { // e.printStackTrace(); // } return ret; } /** * 退款 * @param money 退款金额 * @param out_trade_no 订单号 * @return */ public int refund(Double money,String out_trade_no){ int ret = -1; // sang:注释icbc部分 //签名类型为RSA2时,需传入appid,私钥和网关公钥,签名类型使用定值cbcConstants.SIGN_TYPE_RSA2,其他参数使用缺省值 // DefaultIcbcClient client = new DefaultIcbcClient(GH_APP_ID, IcbcConstants.SIGN_TYPE_RSA2, // MY_PRIVATE_KEY, APIGW_PUBLIC_KEY); // CardbusinessAggregatepayB2cOnlineMerrefundRequestV1 request = new // CardbusinessAggregatepayB2cOnlineMerrefundRequestV1(); // //根据测试环境和生产环境替换相应ip和端口 // request.setServiceUrl("https://gw.open.icbc.com.cn/api/cardbusiness/aggregatepay/b2c/online/merrefund/V1"); // //请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值 // CardbusinessAggregatepayB2cOnlineMerrefundRequestV1.CardbusinessAggregatepayB2cOnlineMerrefundRequestV1Biz bizContent = new // CardbusinessAggregatepayB2cOnlineMerrefundRequestV1.CardbusinessAggregatepayB2cOnlineMerrefundRequestV1Biz(); // request.setBizContent(bizContent); // // bizContent.setMer_id(MER_ID);//商户编号‐必输项 // // //商户订单号 // bizContent.setOut_trade_no(out_trade_no); System.out.println("------------------------------退款单号:"+out_trade_no); //工行订单号 //bizContent.setOrder_id("060551080009000532107130007355"); // sang:注释icbc部分 // bizContent.setOuttrx_serial_no(VeDate.getNo(4));//外部退货流水号‐必输项 // //退货总金额‐必输项 // int m= (int) Math.round(money*100); // bizContent.setRet_total_amt(""+m); // bizContent.setTrnsc_ccy("001");//交易币种‐必输项 // bizContent.setOrder_apd_inf(""); // bizContent.setIcbc_appid(GH_APP_ID); // bizContent.setMer_acct(""); // bizContent.setMer_prtcl_no(MER_PRTCL_NO); // // CardbusinessAggregatepayB2cOnlineMerrefundResponseV1 response; // try { // //msgId消息通讯唯一编号,要求每次调用独立生成,APP级唯一 // response = client.execute(request); // // if (response.isSuccess()) { // // 业务成功处理,请根据接口文档用response.getxxx()获取同步返回的业务数据 // ret=response.getReturnCode(); // } else { // // 失败 // ret=response.getReturnCode(); // log.error("ReturnMsg:"+response.getReturnMsg()); // } // } catch (IcbcApiException e) { // e.printStackTrace(); // } return ret; } /** * 退款 * @param args */ /*public static void main(String[] args) { //签名类型为RSA2时,需传入appid,私钥和网关公钥,签名类型使用定值cbcConstants.SIGN_TYPE_RSA2,其他参数使用缺省值 DefaultIcbcClient client = new DefaultIcbcClient(GH_APP_ID, IcbcConstants.SIGN_TYPE_RSA2, MY_PRIVATE_KEY, APIGW_PUBLIC_KEY); CardbusinessAggregatepayB2cOnlineMerrefundRequestV1 request = new CardbusinessAggregatepayB2cOnlineMerrefundRequestV1(); //根据测试环境和生产环境替换相应ip和端口 request.setServiceUrl("https://gw.open.icbc.com.cn/api/cardbusiness/aggregatepay/b2c/online/merrefund/V1"); //请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值 CardbusinessAggregatepayB2cOnlineMerrefundRequestV1.CardbusinessAggregatepayB2cOnlineMerrefundRequestV1Biz bizContent = new CardbusinessAggregatepayB2cOnlineMerrefundRequestV1.CardbusinessAggregatepayB2cOnlineMerrefundRequestV1Biz(); request.setBizContent(bizContent); bizContent.setMer_id(MER_ID);//商户编号‐必输项 //商户订单号 //bizContent.setOut_trade_no("TJ202108061635073884"); //工行订单号 bizContent.setOrder_id("060551080009000512108060014521"); bizContent.setOuttrx_serial_no(VeDate.getNo(4));//外部退货流水号‐必输项 bizContent.setRet_total_amt("1");//退货总金额‐必输项 bizContent.setTrnsc_ccy("001");//交易币种‐必输项 bizContent.setOrder_apd_inf(""); bizContent.setIcbc_appid(GH_APP_ID); bizContent.setMer_acct(""); CardbusinessAggregatepayB2cOnlineMerrefundResponseV1 response; try { //msgId消息通讯唯一编号,要求每次调用独立生成,APP级唯一 response = client.execute(request); if (response.isSuccess()) { // 业务成功处理,请根据接口文档用response.getxxx()获取同步返回的业务数据 System.out.println("ReturnCode:"+response.getReturnCode()); System.out.println("response:" + response); } else { // 失败 System.out.println("ReturnCode:"+response.getReturnCode()); System.out.println("ReturnMsg:"+response.getReturnMsg()); } } catch (IcbcApiException e) { e.printStackTrace(); } }*/ /*public static void main(String[] args) { //需传入appid,私钥,字符集 UiIcbcClient client = new UiIcbcClient(GH_APP_ID, IcbcConstants.SIGN_TYPE_RSA2, MY_PRIVATE_KEY, IcbcConstants.CHARSET_UTF8); CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1 request = new CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1(); //根据测试环境和生产环境替换相应ip和端口 request.setServiceUrl("https://gw.open.icbc.com.cn/ui/cardbusiness/aggregatepay/b2c/online/ui/consumepurchaseshowpay/V1"); CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1.CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1Biz bizContent = new CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1.CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1Biz(); request.setBizContent(bizContent); //请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值 bizContent.setExpireTime("120"); bizContent.setIcbc_appid(GH_APP_ID); bizContent.setMer_id(MER_ID); bizContent.setMer_prtcl_no(MER_PRTCL_NO); bizContent.setNotify_type("HS"); bizContent.setNotify_url("http://http://122.51.116.79:9081//inspect/subscribe/callback"); bizContent.setResult_type("0"); bizContent.setReturn_url("http://http://122.51.116.79:9081//dist/index.html#/Yygh?type=1"); //订单金额 bizContent.setOrder_amt("1"); String out="TJ"+VeDate.getNo(4); System.out.println("-----------------"+out); bizContent.setOut_trade_no(out); bizContent.setSaledepname("赤峰市元宝山区妇幼保健计划生育服务中心"); String str="就医缴费"; bizContent.setBody(str); try { String ret=client.buildPostForm(request); System.out.println(ret); } catch (IcbcApiException e) { e.printStackTrace(); } }*/ /** * PC支付 * @param args *//* public static void main(String[] args) { // 4、需传入appid,私钥,字符集 UiIcbcClient client = new UiIcbcClient(GH_APP_ID, IcbcConstants.SIGN_TYPE_RSA2,MY_PRIVATE_KEY,IcbcConstants.CHARSET_UTF8); CardbusinessEpaypcConsumptionRequestV1 request = new CardbusinessEpaypcConsumptionRequestV1(); // 5、根据测试环境和生产环境替换相应ip和端口 request.setServiceUrl("https://gw.open.icbc.com.cn/ui/cardbusiness/epaypc/consumption/V1"); CardbusinessEpaypcConsumptionRequestV1.CardbusinessEpaypcConsumptionRequestV1Biz bizContent = new CardbusinessEpaypcConsumptionRequestV1.CardbusinessEpaypcConsumptionRequestV1Biz(); request.setBizContent(bizContent); // 6、请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值 //埋名或非埋名标志,字典:1-埋名,2-非埋名,默认非埋名 bizContent.setIcbc_flag("1"); //工行API平台的APPID bizContent.setIcbc_appid(GH_APP_ID); SimpleDateFormat sf=new SimpleDateFormat("yyyyMMddHHmmss"); Date date=new Date(); //交易日期时间,格式为:yyyyMMddHHmmss,要求在银行系统当前时间的前1小时和后12小时范围内,否则判定交易时间非法 bizContent.setOrder_date(sf.format(date)); //订单有效日期,对订单的有效日期进 //行限定,输入类 //似”20110802152230”的时间串代表8 //月2日15:22:30之前支付订单有效。 bizContent.setExpire_time(sf.format(new Date(date.getTime()+300000))); //商户订单号,若该笔订单为招投标订单(icbc_flag送2,且order_flag_ztb上送1,则该字段上送约定的招投标缴纳编号(长度MAX(20))) bizContent.setOut_trade_no(VeDate.getNo(4)); //订单金额,单位分 bizContent.setAmount("1"); //分期付款期数,1、3、6、9、12、 //18、24;1代表全额付款,必须为以上 //述值,否则订单校验不通过 bizContent.setInstallment_times("1"); //交易币种,目前工行只支持使用人民 //币(001)支付 bizContent.setCur_type("001"); //商户编号 bizContent.setMer_id(MER_ID); //收单协议编号 bizContent.setMer_prtcl_no(MER_PRTCL_NO); //商户账号,商户入账账号,只能交易时指定。 bizContent.setMer_acct("0605024309200001696"); //商品名称 bizContent.setGoods_name("挂号"); //商户reference,上送商户网站域名 //(支持通配符,例如“*.某B2C商 //城.com”),如果上送,工行会在客户 //支付订单时,校验商户上送域名与客 //户跳转工行支付页面之前网站域名的 //一致性 //bizContent.setMer_reference("xxx"); //商户获取用户的请求ip上送。当商户 //reference项送空时,该项必输 bizContent.setMer_custom_ip("192.168.0.119"); //返回商户变量, 工行给商户发送商户通 //知时会原样返回,可参考响应报文中 //attach字段 bizContent.setMer_var(bizContent.getOut_trade_no()); //通知商户URL,必须合法的URL,交易 //结束,银行使用HTTP协议POST方式 //向此地址发送通知信息;目前只支持 //80端口 bizContent.setMer_url("http://guahao.hzyqtkj.com/pay/callback"); //支付成功回显页面,支付成功后,跳 //转至该页面显示 bizContent.setReturn_url("xxx"); //当商户返回的商城取货地址为正常可 //达时,如该参数非空,则倒计时结束 //后自动跳转回商城取货地址对应链 //接,如不上送则默认不自动跳转。 单 //位(秒) //bizContent.setAuto_refer_sec("xxx"); //联名校验标志。取值“1”:客户支付 //时,网银判断该客户是否与商户联 //名,是则按上送金额扣帐,否则展现 //未联名错误;我行联名商户可送“1”; //取值“0”:不检验客户是否与商户联 //名,按上送金额扣帐。非联名商户请 //送“0”; bizContent.setVerify_join_flag("0"); //通知类型,表示在交易处理完成后把交易结果通知商户的处理模式。 取值“HS”:在交易完成后将通知信息,主动发送给商户,发送地址为mer_url指定地址; 取值“AG”:在交易完成后不通知商户 bizContent.setNotify_type("HS"); //指定支付卡标志,仅icbc_flag送1时使 //用。0-否,1-是,不送或上送其他值按 //0-否处理,如上送1,则快捷支付及工 //行卡网银支付方式下,限定仅可使用 //指定卡完成交易。其他支付方式不作 //限制。 //bizContent.setE_fixedACFlag("xxx"); //默认“2”。有效取值:0-仅借记卡,1-仅信用卡,2-All bizContent.setCredit_type("2"); //订单有效间隔,单位为秒,若不输或 //输入值大于86400,则按系统默认间隔 //处理 bizContent.setOrder_interval("600"); //订单附加信息 bizContent.setOrder_apd_inf(""); try { boolean testFlag = true; System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"========================================"); System.out.println(client.buildPostForm(request)); } catch (IcbcApiException e) { e.printStackTrace(); } }*/ /** * H5支付 * @param args *//* public static void main(String[] args) { // 4、需传入appid,私钥,字符集 UiIcbcClient client = new UiIcbcClient(GH_APP_ID, IcbcConstants.SIGN_TYPE_RSA2,MY_PRIVATE_KEY,IcbcConstants.CHARSET_UTF8); CardbusinessEpayh5UiConsumptionRequestV1 request = new CardbusinessEpayh5UiConsumptionRequestV1(); // 5、根据测试环境和生产环境替换相应ip和端口 request.setServiceUrl("https://gw.open.icbc.com.cn/ui/cardbusiness/aggregatepay/b2c/online/ui/consumepurchaseshowpay/V1"); CardbusinessEpayh5UiConsumptionRequestV1.CardbusinessEpayh5UiConsumptionRequestV1Biz bizContent = new CardbusinessEpayh5UiConsumptionRequestV1.CardbusinessEpayh5UiConsumptionRequestV1Biz(); request.setBizContent(bizContent); // 6、请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值 //工行API平台的APPID bizContent.setIcbc_appid(GH_APP_ID); SimpleDateFormat sf=new SimpleDateFormat("yyyyMMddHHmmss"); Date date=new Date(); //交易日期时间,格式为:YYYYMMDDHHmmss,要求在银行系统当前时间的前1小时和后12小时范围内,否则判定交易时间非法 bizContent.setOrder_date(sf.format(date)); //商户订单号 bizContent.setOrder_id(VeDate.getNo(4)); //订单金额,单位分 bizContent.setAmount("1"); //分期付款期数,1、3、6、9、12、18、24;1代表全额付款,必须为以上述值,否则订单校验不通过 bizContent.setInstallment_times("1"); //交易币种,目前工行只支持使用人民币(001)支付 bizContent.setCur_type("001"); //商户编号 bizContent.setMer_id(MER_ID); //收单协议编号 bizContent.setMer_prtcl_no(MER_PRTCL_NO); //商户账号,商户入账账号,只能交易时指定。(商户付给银行手续费的账户,可以在开户的时候指定,也可以用交易指定方式;用交易指定方式则使用此商户账号) //bizContent.setMer_acct("xxx"); //通知商户URL,必须合法的URL,交易结束,银行使用HTTP协议POST方式向此地址发送通知信息;目前只支持80端口 bizContent.setMerURL("http://guahao.hzyqtkj.com/pay/callback"); //支付成功回显页面,支付成功后,跳转至该页面显示 bizContent.setReturn_url("http://www.baidu.com"); bizContent.setNotify_type("HS"); //选输,收单接入方式,4-H5,5-APP,7-微信公众号,8-支付宝生活号,默认4 bizContent.setAccess_type("7"); //订单有效间隔,单位为秒,若不输或输入值大于86400,则按系统默认间隔处理 bizContent.setOrder_interval("300"); try { System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"========================================"); System.out.println(client.buildPostForm(request)); } catch (IcbcApiException e) { e.printStackTrace(); } }*/ /** * 聚合支付 埋名 * @param args */ /*public static void main(String[] args) { //签名类型为RSA时,需传入appid,私钥和网关公钥,签名类型使用定值IcbcConstants.SIGN_TYPE_RSA,其他参数使用缺省值 DefaultIcbcClient client = new DefaultIcbcClient(GH_APP_ID, IcbcConstants.SIGN_TYPE_RSA2,MY_PRIVATE_KEY, APIGW_PUBLIC_KEY); CardbusinessAggregatepayB2cOnlineConsumepurchaseRequestV1 request = new CardbusinessAggregatepayB2cOnlineConsumepurchaseRequestV1(); //根据测试环境和生产环境替换相应ip和端口 request.setServiceUrl("https://gw.open.icbc.com.cn/api/cardbusiness/aggregatepay/b2c/online/consumepurchase/V1"); CardbusinessAggregatepayB2cOnlineConsumepurchaseRequestV1.CardbusinessAggregatepayB2cOnlineConsumepurchaseRequestV1Biz bizContent = new CardbusinessAggregatepayB2cOnlineConsumepurchaseRequestV1.CardbusinessAggregatepayB2cOnlineConsumepurchaseRequestV1Biz(); //请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值 //商户编号 bizContent.setMer_id(MER_ID); //商户订单号,只能是数字、大小写字母,且在同一个商户号下唯一 bizContent.setOut_trade_no(VeDate.getNo(4)); //支付方式,9-微信,10-支付宝 bizContent.setPay_mode("9"); //收单接入方式,5-APP,7-微信公众号,8-支付宝生活号,9-微信小程序 bizContent.setAccess_type("7"); //收单产品协议编号 bizContent.setMer_prtcl_no(MER_PRTCL_NO); //交易日期时间,格式为yyyyMM-dd'T'HH:mm:ss bizContent.setOrig_date_time(new SimpleDateFormat("yyyy-MM-dd").format(new Date())+"T"+new SimpleDateFormat("HH:mm:ss").format(new Date())); //设备号 bizContent.setDecive_info("013467007042135"); *//*商品描述,商品描述交易字段格式根据不同的应用场景按照以下格式: 1)PC网站:传入浏览器打开的网站主页title名-实际商品名称 ; 2)公众号:传入公众号名称-实际商品名称; 3)H5:传入浏览器打开的移动网页的主页title名-实际商品名称; 4)线下门店:门店品牌名-城市分店名实际商品名称; 5)APP:传入应用市场上的APP名字-实际商品名称*//* bizContent.setBody("赤峰市元宝山区妇幼保健计划生育服务中心-挂号收费"); //交易币种,目前工行只支持使用人民币(001)支付 bizContent.setFee_type("001"); //用户端IP bizContent.setSpbill_create_ip("192.168.0.119"); //订单金额,单位为分 bizContent.setTotal_fee("1"); //异步通知商户URL,端口必须为443或80 bizContent.setMer_url("http://guahao.hzyqtkj.com/pay/callback"); //商户在微信开放平台注册的APPID,支付方式为微信时不能为空 bizContent.setShop_appid(WX_APP_ID); //商户在工行API平台的APPID bizContent.setIcbc_appid(GH_APP_ID); //第三方用户标识,商户在微信公众号内或微信小程序内接入时必送,即access_type为7或9时,上送用户在商户APPID下的唯一标识;商户通过支付宝生活号接入时不送 bizContent.setOpen_id("o2RHm57mWjZDEINy1l0zAcpqC5fw"); //订单失效时间,单位为秒,建议大于60秒 bizContent.setExpire_time("120"); //通知类型,表示在交易处理完成后把交易结果通知商户的处理模式。 取值“HS”:在交易完成后将通知信息,主动发送给商户,发送地址为mer_url指定地址; 取值“AG”:在交易完成后不通知商户 bizContent.setNotify_type("HS"); request.setBizContent(bizContent); CardbusinessAggregatepayB2cOnlineConsumepurchaseResponseV1 response; try { response = client.execute(request, System.currentTimeMillis()+""); //msgId消息通讯唯一编号,要求每次调用独立生成,APP级唯一 if (response.getReturnCode() == 0) { // 6、业务成功处理,请根据接口文档用response.getxxx()获取同步返回的业务数据 System.out.println("ReturnCode:"+response.getReturnCode()); System.out.println("response:" + JSON.toJSONString(response)); } else { // 失败 System.out.println("response:" + JSON.toJSONString(response)); System.out.println("ReturnCode:"+response.getReturnCode()); System.out.println("ReturnMsg:"+response.getReturnMsg()); } } catch (IcbcApiException e) { e.printStackTrace(); } }*/ /*public static void main(String[] args) { //需传入appid,私钥,字符集 UiIcbcClient client = new UiIcbcClient(GH_APP_ID, IcbcConstants.SIGN_TYPE_RSA2, MY_PRIVATE_KEY, IcbcConstants.CHARSET_UTF8); CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1 request = new CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1(); //根据测试环境和生产环境替换相应ip和端口 request.setServiceUrl("https://gw.open.icbc.com.cn/ui/cardbusiness/aggregatepay/b2c/online/ui/consumepurchaseshowpay/V1"); CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1.CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1Biz bizContent = new CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1.CardbusinessAggregatepayB2cOnlineUiConsumepurchaseshowpayRequestV1Biz(); request.setBizContent(bizContent); //请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值 bizContent.setExpireTime("120"); bizContent.setIcbc_appid(GH_APP_ID); bizContent.setMer_id(MER_ID); bizContent.setMer_prtcl_no(MER_PRTCL_NO); bizContent.setNotify_type("HS"); bizContent.setNotify_url("http://guahao.hzyqtkj.com/pay/callback"); bizContent.setOrder_amt("1"); bizContent.setOut_trade_no(VeDate.getNo(4)); bizContent.setSaledepname("赤峰市元宝山区妇幼保健计划生育服务中心"); bizContent.setBody("挂号缴费"); bizContent.setSubject(""); try { System.out.println(client.buildPostForm(request)); } catch (IcbcApiException e) { e.printStackTrace(); } }*/ }