前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >特殊格式的 汇潮支付接口对接

特殊格式的 汇潮支付接口对接

作者头像
allsmallpig
发布2021-02-25 11:23:03
4330
发布2021-02-25 11:23:03
举报
文章被收录于专栏:allsmallpi博客

    在公司业务中,对接汇潮支付,--------该需求是调用汇潮的支付接口,他们作为中台,由他们调用支付宝接口

    在异步回调的时候,遇到了“参数通过 post 方式提交, Content-Type: application/x-www-form-urlencoded ”,回调参数接收不到,无法转化,的问题。

      解决思路如下,以往都是用json的方式,所以在controller里面写了@RequestBody,实际是,直接用一个对象接收,不用写@RequestBody,然后下面在serviceImpl里面,代码转换。

       贴出代码

代码语言:javascript
复制
  /**
     *  支付方式异步通知接口
     * @param getHcPayRequest 异步通知获得json字符串
     * @return  异步通知结果 success/fail
     */
    /*汇潮支付--支付方式异步通知接口*/
    public String notifyInfos(HcPayRequest getHcPayRequest) {
        logger.info("汇潮异步回调参数" + JSON.toJSONString(getHcPayRequest));
        ParserConfig.getGlobalInstance().setAutoTypeSupport(true);//针对fastjson解析 mq里面的redis获取值的解析,不然会出错

        String merchantOutOrderNo =getHcPayRequest.getMerchantOutOrderNo();;//商户订单号
        String merid = getHcPayRequest.getMerid();//商户号
        String msg =getHcPayRequest.getMsg();//订单的详细信息  msg->pay Money

        String res = null;
        try {
            res = URLDecoder.decode(msg,"UTF-8");
        } catch (UnsupportedEncodingException e) {
            logger.error("汇潮异步回调参数解码失败-" + JSON.toJSONString(msg));
            e.printStackTrace();
        }

        JSONObject jsonObject = JSON.parseObject(res);
        System.out.println(getHcPayRequest.toString());

        String orderNo =getHcPayRequest.getOrderNo();//平台订单号
        String orderMoney = (String)jsonObject.get( "payMoney" );// 支付金额

        /**
         * 通知参数样例:
         * 在汇潮的接口文档里面有这个
         * merchantOutOrderNo=2017091316410597&merid=
         * yft2017082500005&msg={"payMoney":"1.00"}&noncestr=adfasdfqwer&orderNo=20170913164
         * 1128501&payResult=1&sign= 078c2637c96d714880fdb3364d440b51
         */

            String trasactionId = orderNo;//平台订单编号 比如支付宝平台
            try {
                if (redisTemplate.hasKey(Constants.HC_PREFIX + trasactionId)) { //放进Redis
                    logger.info("hcpay有重复通知" + trasactionId);
                    return "success";
                } else {
                    redisTemplate.opsForValue().set(Constants.HC_PREFIX + trasactionId, "1", 2880, TimeUnit.MINUTES);
                }
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("hcpay写redis出错" + e.getMessage());
            }

        HcPayRequest hcPayRequestnew = new HcPayRequest();
        hcPayRequestnew.setMerchantOutOrderNo(merchantOutOrderNo);
        hcPayRequestnew.setOrderNo(orderNo);
        hcPayRequestnew.setAmount(orderMoney);

        EvaFeeInfo evaFeeInfoNew =(EvaFeeInfo)redisTemplate.opsForValue().get(Constants.HC_PREFIX +Constants.PAY_PG+ merchantOutOrderNo);
        if(evaFeeInfoNew!=null){
            logger.info("hc汇潮支付redis获取的param" + JSON.toJSONString(evaFeeInfoNew));
            if (Constants.PAY_PG.equals(evaFeeInfoNew.getFlag())) {//评估费
                EvaFeeInfo evaFeeInfo = new EvaFeeInfo();
                evaFeeInfo.setEvaAmount(evaFeeInfoNew.getEvaAmount());//
                evaFeeInfo.setUserId(evaFeeInfoNew.getUserId());//
                evaFeeInfo.setMobile(evaFeeInfoNew.getMobile());//
                evaFeeInfo.setCouponId(evaFeeInfoNew.getCouponId());//
                evaFeeInfo.setRepayNo(orderNo);
                evaFeeInfo.setTradeNo(evaFeeInfoNew.getTradeNo());//商家唯一标示 订单号
                evaFeeInfo.setCurrentCash(evaFeeInfoNew.getCurrentCash());//
                evaFeeInfo.setIsUseCash(evaFeeInfoNew.getIsUseCash());//
                hcPayRequestnew.setFlag(Constants.PAY_PG);
                try {
                    logger.info("评估费发送rabbitmq");
                    rabbitmqProducerProxy.convertAndSend("evaFee.ibank", evaFeeInfo);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

        RecFeeInfo recFeeInfoNew =(RecFeeInfo)redisTemplate.opsForValue().get(Constants.HC_PREFIX +Constants.PAY_TJ+merchantOutOrderNo);
        if(recFeeInfoNew!=null){
            logger.info("hc汇潮支付redis获取的param" + JSON.toJSONString(recFeeInfoNew));
            if (Constants.PAY_TJ.equals(recFeeInfoNew.getFlag())) {//推荐费
                RecFeeInfo recFeeInfo = new RecFeeInfo();
                recFeeInfo.setRecAmount(recFeeInfoNew.getRecAmount());//
                recFeeInfo.setUserId(recFeeInfoNew.getUserId());//
                recFeeInfo.setMobile(recFeeInfoNew.getMobile());//
                recFeeInfo.setBorrowPeriods(recFeeInfoNew.getBorrowPeriods());//借款周期//
                recFeeInfo.setLoanAmount(recFeeInfoNew.getLoanAmount());//
//                recFeeInfo.setType(hcPayRequest.getType());--------------------------------------------
                recFeeInfo.setRepayNo(orderNo);//
                recFeeInfo.setTradeNo(recFeeInfoNew.getTradeNo());//商家唯一标示 订单号
                recFeeInfo.setCouponId(recFeeInfoNew.getCouponId());//
                recFeeInfo.setAppCodeList(recFeeInfoNew.getAppCodeList());//
                recFeeInfo.setCurrentCash(recFeeInfoNew.getCurrentCash());//
                recFeeInfo.setIsUseCash(recFeeInfoNew.getIsUseCash());//
                hcPayRequestnew.setFlag(Constants.PAY_TJ);
                try {
                    logger.info("推荐费发送rabbitmq order");
                    rabbitmqProducerProxy.convertAndSend("recFee.ibank", recFeeInfo);
                    //去掉 发给 user的推荐费
//                        logger.info("推荐费发送rabbitmq user");
//                        rabbitmqProducerProxy.convertAndSend("recUser.ibank", recFeeInfo);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        RechargeFeeInfo rechargeFeeInfoNew =(RechargeFeeInfo)redisTemplate.opsForValue().get(Constants.HC_PREFIX + Constants.PAY_XJ +merchantOutOrderNo);
        if(rechargeFeeInfoNew!=null){
            if(Constants.PAY_XJ.equals(rechargeFeeInfoNew.getFlag())){//充值现金券
                RechargeFeeInfo rechargeFeeInfo = new RechargeFeeInfo();
                rechargeFeeInfo.setAccountNumber(rechargeFeeInfoNew.getAccountNumber());//手机号//
                rechargeFeeInfo.setAmount(rechargeFeeInfoNew.getAmount());//
                rechargeFeeInfo.setCashId(rechargeFeeInfoNew.getCashId());//
                rechargeFeeInfo.setOperStatus(1);//     /**充值是否成功 0:失败  1:成功*/
                rechargeFeeInfo.setRechargeFlowNo(orderNo);
                rechargeFeeInfo.setTradeNo(rechargeFeeInfoNew.getTradeNo());//商家唯一标示 订单号
                rechargeFeeInfo.setStatusMsg("1");//汇潮支付 1 为成功(目前只有成功才通知)
                hcPayRequestnew.setFlag(Constants.PAY_XJ);
                try {
                    logger.info("hc汇潮支付充值现金券发送rabbitmq order");
                    rabbitmqProducerProxy.convertAndSend("rechargeFee.ibank", rechargeFeeInfo);
                } catch (Exception e) {
                    e.printStackTrace();
                    logger.error("hc汇潮支付现金券充值 异常", e);
                }
            }
        }

        payLogService.saveHcPay(hcPayRequestnew,Constants.REPAY_STATUS_ZERO );
        logger.info("汇潮支付支付成功" + orderNo);
            return "success";
    }
代码语言:javascript
复制
代码语言:javascript
复制
代码语言:javascript
复制
/**
 *  支付方式异步通知接口
 * @param getHcPayRequest 异步通知获得json字符串
 * @return  异步通知结果 success/fail
 */
/*汇潮支付--支付方式异步通知接口*/
@RequestMapping(value = "/notifyInfos",method = RequestMethod.POST)
public String notifyInfos( HcPayRequest getHcPayRequest){
   String toSuccessOrFail =  hcPayService.notifyInfos(getHcPayRequest);
   return toSuccessOrFail;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/06/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis®
腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档