Files
gzh-server/src/main/java/com/guahao/api/walkinto/service/PayService.java

810 lines
42 KiB
Java
Raw Normal View History

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<String, String> params=new HashMap<String, String>();
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<String, Object> respMap = (Map<String, Object>) 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、241代表全额付款必须为以上
//述值,否则订单校验不通过
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、241代表全额付款必须为以上述值否则订单校验不通过
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-H55-APP7-微信公众号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-APP7-微信公众号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");
*//*商品描述,商品描述交易字段格式根据不同的应用场景按照以下格式:
1PC网站传入浏览器打开的网站主页title名-实际商品名称
2公众号传入公众号名称-实际商品名称
3H5传入浏览器打开的移动网页的主页title名-实际商品名称
4线下门店门店品牌名-城市分店名实际商品名称
5APP传入应用市场上的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();
}
}*/
}