大吉支付的下单,回调和查询状态

@Repository(value = ConstantsPay.DaJi_PAY + "Processor")
@Log4j2
public class DajiPayProcessor extends AbstractPay {
    @Override
    public String orderPay(PayChannelNew payChannelNew, PayPlatformNew payPlatformNew, ReqPayRechargeNew reqPayRecharge) {
        Map<String, String> params = new HashMap<>();
        params.put("return_type", "json");
        params.put("api_code", payPlatformNew.getMerId());
        params.put("is_type", payChannelNew.getPayMethod());
        params.put("price", reqPayRecharge.getMoney().setScale(2, BigDecimal.ROUND_HALF_UP).toString());
        params.put("order_id", reqPayRecharge.getOrderNo());
        params.put("mark", "buy");
        params.put("return_url", payReturnUrl);
        params.put("notify_url", payCallbackUrl + ConstantsPay.DaJi_PAY);
        params.put("time", System.currentTimeMillis() + "");

        //对参数名按照ASCII升序排序
        Object[] key = params.keySet().toArray();
        Arrays.sort(key);
        //生成加密原串
        StringBuffer res = new StringBuffer();
        for (int i = 0; i < key.length; i++) {
            res.append(key[i] + "=" + params.get(key[i]) + "&");
        }
        //再拼接秘钥
        String src = res.append("key=" + payPlatformNew.getSignMd5()).toString();
        //MD5加密并转为大写
        String sign = DigestUtils.md5Hex(src).toUpperCase();

        log.warn(sign);
        params.put("sign", sign);
        log.warn(JsonUtil.object2Json(params));

        MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
        params.forEach((k, v) -> map.add(k, v));

        //发送请求
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(map, httpHeaders);

        Map<String, Object> resultMap = null;
        try {
            resultMap = restTemplate.postForObject(payPlatformNew.getPlatPayUrl(), httpEntity, Map.class);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
        System.err.println(JsonUtil.object2Json(resultMap));
        if (!CollectionUtils.isEmpty(resultMap) && resultMap.containsKey("payurl")) {
            System.out.println(resultMap.get("payurl").toString());
            return resultMap.get("payurl").toString();
        }
        return null;
    }

    @Override
    public boolean queryPay(MemberPayJour payJour, PayPlatformNew payPlatformNew, PayChannelNew payChannelNew) {
        SortedMap<String, String> reqMap = new TreeMap<>();
        reqMap.put("api_code", payPlatformNew.getMerId());
        reqMap.put("is_type", payChannelNew.getPayMethod());
        reqMap.put("order_id", payJour.getOrder_no());
        reqMap.put("price", payJour.getMoney().setScale(2, BigDecimal.ROUND_HALF_UP).toString());

        //对参数名按照ASCII升序排序
        Object[] key = reqMap.keySet().toArray();
        Arrays.sort(key);
        //生成加密原串
        StringBuffer res = new StringBuffer();
        for (int i = 0; i < key.length; i++) {
            res.append(key[i] + "=" + reqMap.get(key[i]) + "&");
        }
        //再拼接秘钥
        String src = res.append("key=" + payPlatformNew.getSignMd5()).toString();
        //MD5加密并转为大写
        String sign = DigestUtils.md5Hex(src).toUpperCase();
        reqMap.put("sign",sign);

        MultiValueMap<String, String> requestMap = new LinkedMultiValueMap<>();
        requestMap.setAll( reqMap );

        log.warn( JsonUtil.object2Json( requestMap ) );

        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType( MediaType.APPLICATION_FORM_URLENCODED );
        HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>( requestMap, httpHeaders );

        Map<String,Object> resultMap=null;
        try {
            resultMap = restTemplate.postForObject( payPlatformNew.getPlatPayUrl(), httpEntity, Map.class );
        } catch ( Exception e ) {
            log.error( e.getMessage(), e );
        }
        log.warn( JsonUtil.object2Json( resultMap ) );
        if ( !CollectionUtils.isEmpty( resultMap ) ) {
            int status = Integer.parseInt( resultMap.getOrDefault( "status", 0 ).toString() );
            if ( status == 1 ) {
                BigDecimal real_price   = new BigDecimal( resultMap.getOrDefault( "real_price", 0 ).toString() );
                String     paysapi_id = resultMap.getOrDefault( "paysapi_id", "" ).toString();
                payJour.setSub_money(real_price);
                payJour.setTrade_sn(paysapi_id);
                return true;
            }
        }
        return false;
    }

    @Override
    public String callbackPay(Map<String, Object> requestMap, String realIp) {
        // 订单id
        String order_id = requestMap.getOrDefault("order_id", "").toString();
        // 上游订单ID
        String paysapi_id = requestMap.getOrDefault("paysapi_id", "").toString();

        MemberPayJour payJour = payJourMapper.findByOrderNo(order_id);

        if ("1".equals(payJour.getStatus())) {
            log.warn("订单已成功,无需继续回调");
            return "success";
        }

        PayPlatformNew payPlatformNew = payPlatformNewMapper.selectByPrimaryKey(Integer.valueOf(payJour.getPlatform_id()));
        PayChannelNew payChannelNew = payChannelNewMapper.selectByPrimaryKey(Integer.valueOf(payJour.getChannel_id()));

        BigDecimal price = new BigDecimal(requestMap.getOrDefault("price", 0).toString());
        BigDecimal real_price = new BigDecimal(requestMap.getOrDefault("real_price", 0).toString());
        String is_type = requestMap.getOrDefault("is_type", "").toString();
        String mark = requestMap.getOrDefault("mark", "").toString();
        String code = requestMap.getOrDefault("code", "").toString();
        String api_code = requestMap.getOrDefault("api_code", "").toString();
        String sign = requestMap.getOrDefault("sign", "").toString();

        SortedMap<String, Object> bodyMap = new TreeMap<>();
        bodyMap.put("order_id", order_id);
        bodyMap.put("paysapi_id", paysapi_id);
        bodyMap.put("price", price);
        bodyMap.put("real_price", real_price);
        bodyMap.put("mark", mark);
        bodyMap.put("code", code);
        bodyMap.put("is_type", is_type);
        bodyMap.put("api_code", api_code);

        String signStr = this.assemblyUrl(bodyMap) + "&key=" + payPlatformNew.getSignMd5();
        log.warn(signStr);
        String rel = DigestUtils.md5Hex(signStr);
        log.warn(rel + ":" + sign);

        //判断是否匹配
        if (rel.equalsIgnoreCase(sign)) {
            if ("1".equals(code)) {
                payJour.setSub_money(real_price);
                payJour.setTrade_sn(paysapi_id);
                return payService.updatePayJourStatus(payJour, payChannelNew.getDiscountBill(), new String[]{"success",
                        "fail"}, payChannelNew.getName());
            }
        }
        return "fail";
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
大吉T2000车载电台是一款功能强大的车载音频播放设备。它采用了先进的技术和设计,提供了丰富的功能和良好的音质体验。 首先,大吉T2000车载电台具备多种播放功能。它支持收听AM/FM频道,用户可以通过调整频道来收听各种广播节目。此外,它还配备了USB接口和SD卡插槽,可以直接播放存储在U盘或SD卡中的音乐文件。这为用户提供了更多的音乐选择,使得车辆行驶过程中更加愉悦。 其次,大吉T2000车载电台还具备蓝牙功能,可以与手机或其他蓝牙设备进行连接。这样,用户可以通过车载电台播放手机中的音乐,还可以进行蓝牙电话通话。这种便捷的设计使得用户能够更加方便地操作车载音频设备,提供了更好的使用体验。 此外,大吉T2000车载电台还拥有用户友好的操作界面。它采用了大屏液晶显示屏,显示清晰,色彩鲜艳。操作界面简洁明了,用户可以通过触摸屏幕或旋钮进行功能选择和设置。这一设计使得用户能够更加方便地使用车载电台,减少了操作的复杂性。 总之,大吉T2000车载电台是一款功能强大、方便实用的车载音频设备。它拥有多种播放功能,配备了蓝牙功能,并具有用户友好的操作界面。无论是收听广播、播放手机音乐还是进行蓝牙电话通话,大吉T2000车载电台都能为用户提供优质的音质和便捷的使用体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值