Files
gzh-server/src/main/java/com/guahao/api/walkinto/service/PayService.java
2026-01-07 10:36:02 +08:00

810 lines
42 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
}*/
}