翼支付分账交易

翼支付分账账户,带子商户交易需要填写 子商户号,其他参数带父商户的,并填写分账字段    格式 :     子商户号:金额


构建请求参数

        OnlinePayConfig config = getShopOnlinePayConfig();//获取配置信息
	int orderid = orderDTO.getAsInteger("id");//获取订单ID
	String merchantId = config.getMerchantId();
	String subMerchantId = config.getSubMerchantId();
        String orderNo = String.valueOf(orderid);
        String orderReqNo = String.valueOf(orderid);
        String orderDate = DateUtils.currentTime();
        BigDecimal priceoffinal = orderDTO.getAsBigDecimal("priceoffinal");
        
        String orderAmt = String.valueOf(new Float(priceoffinal.floatValue() * 100).intValue());
        
        String keyString=config.getBusikey();//获取交易KEY

        StringBuilder sb = new StringBuilder();//组装MAC明文串
        sb.append("MERCHANTID=").append(merchantId);
        sb.append("&ORDERNO=").append(orderNo);
        sb.append("&ORDERREQNO=").append(orderReqNo);
        sb.append("&ORDERDATE=").append(orderDate);
        sb.append("&BARCODE=").append(barcode);
        sb.append("&ORDERAMT=").append(orderAmt);
        sb.append("&KEY=").append(keyString);

        String mac = CryptTool.md5Digest(sb.toString());

        Map<String,String> paramMap = new HashMap<String, String>();//组装请求参数

        paramMap.put("merchantId", merchantId);
        if(subMerchantId==null||subMerchantId.equals("")){//如果存在子商户就用分账模式,如果不存在就直接用父商户的账号交易
        	paramMap.put("subMerchantId", "");
        }else{
        	paramMap.put("subMerchantId", subMerchantId);
        }
        paramMap.put("barcode", barcode);
        paramMap.put("orderNo", orderNo);
        paramMap.put("orderReqNo", orderReqNo);
        paramMap.put("orderDate", orderDate);
        paramMap.put("channel", config.getChannel());
        paramMap.put("busiType", config.getBusikey());
        paramMap.put("TransType", "B");
        paramMap.put("orderAmt", orderAmt);
        paramMap.put("productAmt", orderAmt);
        paramMap.put("attachAmt", "0");
        paramMap.put("goodsName", "条码支付");
        paramMap.put("storeId", config.getStoreId());
        paramMap.put("backUrl", config.getBackUrl());
        if(subMerchantId==null||subMerchantId.equals("")){//如果存在子商户就用分账模式,如果不存在就直接用父商户的账号交易
        	paramMap.put("ledgerDetail", "");
        }else{
        	paramMap.put("ledgerDetail", subMerchantId+":"+orderAmt);
        }
        paramMap.put("attach", shopid+","+userid);
        paramMap.put("mac", mac);
        
        return paramMap;

发起请求,并检验返会参数。

            httpClient = createSSLClientDefault();
	    httpPost = new HttpPost("https://webpaywg.bestpay.com.cn/barcode/placeOrder");
            List<NameValuePair> paramList = new ArrayList<NameValuePair>();
            for (String key : epayMap.keySet()) {
                paramList.add(new BasicNameValuePair(key, epayMap.get(key)));
            }
            urlEntity=new UrlEncodedFormEntity(paramList, Consts.UTF_8);

            httpPost.setEntity(urlEntity);
            httpPost.setConfig(RequestConfig.custom().setConnectTimeout(30000).setSocketTimeout(30000).build());
            response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();

            int statusCode = response.getStatusLine().getStatusCode();
            if(HttpStatus.SC_OK == statusCode) {
            	//如果响应码是200
            	String eResult = EntityUtils.toString(entity);
            	EpayEntity epayEntity = JSONObject.parseObject(eResult, EpayEntity.class);
            	if(epayEntity.isSuccess() && BocUtils.isNotEmpty(epayEntity.getResult())
            			&& "B".equals(epayEntity.getResult().getTransStatus())) {
            		//先做签名校验
            		OnlinePayConfig config = userFacade.getShopOnlinePayConfig(shopid, PayWayEnum.EPAY);
            		String sign = epayEntity.getResult().getSign();
            		StringBuilder sb = new StringBuilder();//组装mac加密明文串
                    sb.append("MERCHANTID=").append(config.getMerchantId());
                    sb.append("&ORDERNO=").append(epayEntity.getResult().getOrderNo());
                    sb.append("&ORDERREQNO=").append(epayEntity.getResult().getOrderReqNo());
                    sb.append("&ORDERDATE=").append(epayEntity.getResult().getOrderDate());
                    sb.append("&OURTRANSNO=").append(epayEntity.getResult().getOurTransNo());
                    sb.append("&TRANSAMT=").append(epayEntity.getResult().getTransAmt());
                    sb.append("&TRANSSTATUS=").append(epayEntity.getResult().getTransStatus());
                    sb.append("&ENCODETYPE=").append(epayEntity.getResult().getEncodeType());
                    sb.append("&KEY=").append(config.getBusikey());
                    
                    if(sign.equals(CryptTool.md5Digest(sb.toString()))) {//签名认证成功
                    	tradeFacade.execShopOrderByOnlineSuccess(Integer.parseInt(epayEntity.getResult().getOrderNo()), epayEntity.getResult().getTransAmt(),
                    			OrderPayTypeEnum.YIPAYTO, epayEntity.getResult().getOurTransNo());
                		res.setAppCode(Constants.SUCCESS);
                    }else{
            			res.setAppCode(Constants.FAIL, "翼支付支付响应签名认证失败!");
                    }
            	}else{
        			res.setAppCode(Constants.FAIL, "翼支付失败!ErrCode【"+epayEntity.getErrorCode()+"】,ErrorMsg【"+epayEntity.getErrorMsg()+"】");
            	}
            }else{
    			res.setAppCode(Constants.FAIL, "翼支付支付响应失败!状态码【"+statusCode+"】");
            }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值