| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- package com.java110.acct.smo.impl;
- import com.icbc.api.IcbcApiException;
- import com.icbc.api.DefaultIcbcClient;
- import com.icbc.api.IcbcConstants;
- import com.icbc.api.request.MybankPayQrcodeScannedPayRequestV5;
- import com.icbc.api.request.MybankPayQrcodeScannedPayRequestV5.MybankPayQrcodeScannedPayRequestV5Biz;
- import com.icbc.api.request.MybankPayQrcodeScannedPaystatusRequestV4;
- import com.icbc.api.response.MybankPayQrcodeScannedPaystatusResponseV4;
- import com.icbc.api.response.MybankQrcodeScannedPayResponseV5;
- import com.java110.acct.smo.IQrCodePaymentSMO;
- import com.java110.core.client.RestTemplate;
- import com.java110.core.factory.CommunitySettingFactory;
- import com.java110.core.log.LoggerFactory;
- import com.java110.dto.smallWeChat.SmallWeChatDto;
- import com.java110.intf.store.ISmallWeChatInnerServiceSMO;
- import com.java110.utils.cache.MappingCache;
- import com.java110.utils.constant.WechatConstant;
- import com.java110.utils.util.DateUtil;
- import com.java110.utils.util.PayUtil;
- import com.java110.vo.ResultVo;
- import org.slf4j.Logger;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.*;
- /**
- * 工商银行支付
- */
- @Service
- public class QrCodeIcbcPaymentAdapt implements IQrCodePaymentSMO {
- private static Logger logger = LoggerFactory.getLogger(QrCodeIcbcPaymentAdapt.class);
- //微信支付
- public static final String DOMAIN_WECHAT_PAY = "WECHAT_PAY";
- // 微信服务商支付开关
- public static final String WECHAT_SERVICE_PAY_SWITCH = "WECHAT_SERVICE_PAY_SWITCH";
- //开关ON打开
- public static final String WECHAT_SERVICE_PAY_SWITCH_ON = "ON";
- private static final String WECHAT_SERVICE_APP_ID = "SERVICE_APP_ID";
- private static final String WECHAT_SERVICE_MCH_ID = "SERVICE_MCH_ID";
- public static final String PAY_UNIFIED_ORDER_URL = "https://api.plutuspay.com/open/v2/pay";
- @Autowired
- private ISmallWeChatInnerServiceSMO smallWeChatInnerServiceSMOImpl;
- @Autowired
- private RestTemplate outRestTemplate;
- @Override
- public ResultVo pay(String communityId, String orderNum, double money, String authCode, String feeName) throws Exception {
- logger.info("【工商银行支付】 统一下单开始, 订单编号=" + orderNum);
- SortedMap<String, String> resultMap = new TreeMap<String, String>();
- //生成支付金额,开发环境处理支付金额数到0.01、0.02、0.03元
- double payAmount = PayUtil.getPayAmountByEnv(MappingCache.getValue("HC_ENV"), money);
- //添加或更新支付记录(参数跟进自己业务需求添加)
- String systemName = MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.PAY_GOOD_NAME);
- String privateKey = CommunitySettingFactory.getRemark(communityId, "ICBC_PRIVATE_KEY");
- String apiPublicKey = CommunitySettingFactory.getRemark(communityId, "ICBC_PUBLIC_KEY");
- String merId = CommunitySettingFactory.getValue(communityId, "ICBC_MER_ID");
- String merPrtclNo = CommunitySettingFactory.getValue(communityId, "ICBC_MER_PRTCL_NO");
- String deciveInfo = CommunitySettingFactory.getValue(communityId, "ICBC_DECIVE_INFO");
- String appName = CommunitySettingFactory.getValue(communityId, "ICBC_APP_NAME");
- String icbcAppId = CommunitySettingFactory.getValue(communityId, "ICBC_APP_ID");
- //签名类型为RSA2时,需传入appid,私钥和网关公钥,签名类型使用定值IcbcConstants.SIGN_TYPE_RSA2,其他参数使用缺省值
- DefaultIcbcClient client = new DefaultIcbcClient(icbcAppId, IcbcConstants.SIGN_TYPE_RSA, privateKey, apiPublicKey);
- MybankPayQrcodeScannedPayRequestV5 request = new MybankPayQrcodeScannedPayRequestV5();
- //4、根据测试环境和生产环境替换相应ip和端口
- request.setServiceUrl("https://gw.open.icbc.com.cn/api/mybank/pay/qrcode/scanned/pay/V5");
- //5、请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值
- MybankPayQrcodeScannedPayRequestV5Biz bizContent = new MybankPayQrcodeScannedPayRequestV5Biz();
- bizContent.setMerId(merId); //商户编号
- bizContent.setQrCode(authCode); //付款码
- bizContent.setOutTradeNo(orderNum); //外部订单号
- bizContent.setTradeDate(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_H)); //交易日期 格式:YYYYMMDD
- bizContent.setTradeTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_N)); //交易时间hhmmss
- //bizContent.setAttach("1231"); //商户附加信息
- bizContent.setOrderAmt(payAmount + ""); //交易金额
- //bizContent.setSubAppId("wxfb72f1a7d061d631"); //子商户应用号
- //bizContent.setGoodsTag("DP"); //优惠标志
- // JSONArray goodsDetailArray = new JSONArray();
- // JSONObject gd1 = new JSONObject();
- // gd1.put("goods_id", "123456");
- // gd1.put("goods_name", "FOOD");
- // gd1.put("quantity", 1);
- // gd1.put("price", 100);
- // goodsDetailArray.add(gd1);
- // bizContent.setGoodsDetail(goodsDetailArray);
- // bizContent.setSubject("订单标题,128字节长度"); //订单标题,128字节长度
- HashMap<String, Object> terminalInfo = new HashMap<>();
- terminalInfo.put("device_type", "10");
- terminalInfo.put("device_id", deciveInfo);//| device_id | str | true | 15 | 终端设备号: 收单机构为商户终端分配的唯一编号。 | Sxxxxxx |
- bizContent.setTerminalInfo(terminalInfo);
- request.setBizContent(bizContent);
- MybankQrcodeScannedPayResponseV5 response;
- try {
- response = client.execute(request, System.currentTimeMillis() + "");//msgId消息通讯唯一编号,要求每次调用独立生成,APP级唯一
- if (response.getReturnCode() == 0) {
- // 6、业务成功处理,请根据接口文档用response.getxxx()获取同步返回的业务数据
- return new ResultVo(ResultVo.CODE_OK, "成功");
- } else {
- // 失败
- //System.out.println("ReturnCode:"+response.getReturnCode());
- //System.out.println("ReturnMsg:"+response.getReturnMsg());
- return new ResultVo(ResultVo.CODE_ERROR, response.getReturnMsg());
- }
- } catch (IcbcApiException e) {
- e.printStackTrace();
- }
- return new ResultVo(ResultVo.CODE_ERROR, "未知异常");
- }
- public ResultVo checkPayFinish(String communityId, String orderNum) {
- SmallWeChatDto shopSmallWeChatDto = null;
- Map<String, String> result = null;
- String privateKey = CommunitySettingFactory.getRemark(communityId, "ICBC_PRIVATE_KEY");
- String apiPublicKey = CommunitySettingFactory.getRemark(communityId, "ICBC_PUBLIC_KEY");
- String merId = CommunitySettingFactory.getValue(communityId, "ICBC_MER_ID");
- String merPrtclNo = CommunitySettingFactory.getValue(communityId, "ICBC_MER_PRTCL_NO");
- String deciveInfo = CommunitySettingFactory.getValue(communityId, "ICBC_DECIVE_INFO");
- String appName = CommunitySettingFactory.getValue(communityId, "ICBC_APP_NAME");
- String icbcAppId = CommunitySettingFactory.getValue(communityId, "ICBC_APP_ID");
- //签名类型为RSA2时,需传入appid,私钥和网关公钥,签名类型使用定值IcbcConstants.SIGN_TYPE_RSA2,其他参数使用缺省值
- DefaultIcbcClient client = new DefaultIcbcClient(icbcAppId, IcbcConstants.SIGN_TYPE_RSA, privateKey, apiPublicKey);
- MybankPayQrcodeScannedPaystatusRequestV4 request = new MybankPayQrcodeScannedPaystatusRequestV4();
- //4、根据测试环境和生产环境替换相应ip和端口
- request.setServiceUrl("https://gw.open.icbc.com.cn/api/mybank/pay/qrcode/scanned/paystatus/V4");
- //5、请对照接口文档用bizContent.setxxx()方法对业务上送数据进行赋值
- MybankPayQrcodeScannedPaystatusRequestV4.MybankPayQrcodeScannedPaystatusRequestV4Biz
- bizContent = new MybankPayQrcodeScannedPaystatusRequestV4.MybankPayQrcodeScannedPaystatusRequestV4Biz();
- bizContent.setMerId(merId); //商户编号
- bizContent.setOutTradeNo(orderNum); //外部订单号
- bizContent.setTradeDate(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_H)); //交易日期 格式:YYYYMMDD
- //bizContent.setOrderId("");
- bizContent.setDealFlag("0");
- request.setBizContent(bizContent);
- MybankPayQrcodeScannedPaystatusResponseV4 response;
- try {
- response = client.execute(request, System.currentTimeMillis() + "");//msgId消息通讯唯一编号,要求每次调用独立生成,APP级唯一
- if (response.getReturnCode() == 0) {
- // 6、业务成功处理,请根据接口文档用response.getxxx()获取同步返回的业务数据
- //System.out.println("response:" + JSON.toJSONString(response));
- //System.out.println("ReturnCode:"+response.getReturnCode());
- if ("1".equals(response.getPayStatus())) {
- return new ResultVo(ResultVo.CODE_OK, "成功");
- } else if ("0".equals(response.getPayStatus())) {
- return new ResultVo(ResultVo.CODE_WAIT_PAY, "等待支付完成");
- } else {
- return new ResultVo(ResultVo.CODE_ERROR, "支付已经被取消,银行 状态码:" + response.getPayStatus());
- }
- } else {
- // 失败
- //System.out.println("response:" + JSON.toJSONString(response));
- //System.out.println("ReturnCode:"+response.getReturnCode());
- //System.out.println("ReturnMsg:"+response.getReturnMsg());
- return new ResultVo(ResultVo.CODE_ERROR, response.getReturnMsg());
- }
- } catch (IcbcApiException e) {
- e.printStackTrace();
- }
- return new ResultVo(ResultVo.CODE_ERROR, "未知异常");
- }
- }
|