项目中的2个支付回调接口

@RequestMapping(value = "callbackAlipay", method = RequestMethod.POST)
    @ResponseBody
    public ResponseEntity<?> callbackAlipay(
            @RequestParam(value = "discount", required = false) String discount,
            @RequestParam(value = "payment_type", required = false) String payment_type,
            @RequestParam(value = "subject", required = false) String subject,
            @RequestParam(value = "trade_no", required = false) String trade_no,
            @RequestParam(value = "buyer_email", required = false) String buyer_email,
            @RequestParam(value = "gmt_create", required = false) String gmt_create,
            @RequestParam(value = "notify_type", required = false) String notify_type,
            @RequestParam(value = "quantity", required = false) String quantity,
            @RequestParam(value = "out_trade_no", required = false) String out_trade_no,
            @RequestParam(value = "seller_id", required = false) String seller_id,
            @RequestParam(value = "notify_time", required = false) String notify_time,
            @RequestParam(value = "body", required = false) String body,
            @RequestParam(value = "trade_status", required = false) String trade_status,
            @RequestParam(value = "is_total_fee_adjust", required = false) String is_total_fee_adjust,
            @RequestParam(value = "total_fee", required = false) String total_fee,
            @RequestParam(value = "gmt_payment", required = false) String gmt_payment,
            @RequestParam(value = "seller_email", required = false) String seller_email,
            @RequestParam(value = "price", required = false) String price,
            @RequestParam(value = "buyer_id", required = false) String buyer_id,
            @RequestParam(value = "notify_id", required = false) String notify_id,
            @RequestParam(value = "use_coupon", required = false) String use_coupon,
            @RequestParam(value = "sign_type", required = false) String sign_type,
            @RequestParam(value = "sign", required = false) String sign) {

logger.warn("trade_no:"+trade_no);
        logger.warn("out_trade_no:"+out_trade_no);
        logger.warn("trade_status:"+trade_status);
        
        
        
        String result = "fail";
        
        if ("TRADE_FINISHED".equals(trade_status) || "TRADE_SUCCESS".equals(trade_status)) {

//  业务逻辑

}

/**
     * Callback WeChatPay one Order
     *
     * @param OrderDTO
     * @return HTTP 200
     */
     @RequestMapping(value = "callbackWeChatPay", method = RequestMethod.POST, produces = "text/xml; charset=utf-8")
     @ResponseBody
     public ResponseEntity<?> callbackWeChatPay(
       @RequestBody WeChatCallbackDTO weChatCallbackDTO) {
        
        logger.info("*******************Result_code:*************"+weChatCallbackDTO.getResult_code());
        logger.info("*******************Out_trade_no*************:"+weChatCallbackDTO.getOut_trade_no());
        logger.info("*******************Total_fee***************:"+weChatCallbackDTO.getTotal_fee());
        String result= "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[FAIL]]></return_msg></xml> ";
        try {
            if("SUCCESS".equals(weChatCallbackDTO.getResult_code())){
                OrderDTO order = new OrderDTO();
                order.setOrderNum(weChatCallbackDTO.getOut_trade_no());
                order.setPaymentAmount((int)Double.parseDouble(weChatCallbackDTO.getTotal_fee())/100);
                //微信支付方式
                order.setPaymentTypeCD(Constants.PaymentTypeDC_D05B02);
                // 业务逻辑
                if (!orderService.callback(order)) {

return new ResponseEntity<String>(result, HttpStatus.OK);

}
                //保存支付记录    
                WeChatPaymentHistoryDTO    weChatPaymentHistoryDTO=new WeChatPaymentHistoryDTO();
                weChatPaymentHistoryDTO.setAppid(weChatCallbackDTO.getAppid());
                weChatPaymentHistoryDTO.setBank_type(weChatCallbackDTO.getBank_type());
                weChatPaymentHistoryDTO.setCash_fee(weChatCallbackDTO.getBank_type());
                weChatPaymentHistoryDTO.setFee_type(weChatCallbackDTO.getFee_type());
                weChatPaymentHistoryDTO.setIs_subscribe(weChatCallbackDTO.getIs_subscribe());
                weChatPaymentHistoryDTO.setMch_id(weChatCallbackDTO.getMch_id());
                weChatPaymentHistoryDTO.setNonce_str(weChatCallbackDTO.getNonce_str());
                weChatPaymentHistoryDTO.setOpenid(weChatCallbackDTO.getOpenid());
                weChatPaymentHistoryDTO.setOut_trade_no(weChatCallbackDTO.getOut_trade_no());
                weChatPaymentHistoryDTO.setResult_code(weChatCallbackDTO.getResult_code());
                weChatPaymentHistoryDTO.setReturn_code(weChatCallbackDTO.getReturn_code());
                weChatPaymentHistoryDTO.setSign(weChatCallbackDTO.getSign());
                weChatPaymentHistoryDTO.setTime_end(weChatCallbackDTO.getTime_end());
                weChatPaymentHistoryDTO.setTotal_fee(weChatCallbackDTO.getTotal_fee());
                weChatPaymentHistoryDTO.setTrade_type(weChatCallbackDTO.getTrade_type());
                weChatPaymentHistoryDTO.setTransaction_id(weChatCallbackDTO.getTransaction_id());
                weChatPaymentHistoryService.add(weChatPaymentHistoryDTO);
                
                result= "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml> ";
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    
        return new ResponseEntity<String>(result, HttpStatus.OK);
    }

时间: 2024-11-08 16:32:30

项目中的2个支付回调接口的相关文章

Autofac在项目中应用的体会,一个接口多个实现的情况

在本人接触的项目中Autofac应用的比较多一些,我理解的他的工作原理就是  注册类并映射到接口,通过注入后返回相应实例化的类! 下面说说我在项目中的实际应用 先来简单介绍下Autofac的使用 1.通过Nuget或代码安装autofac 安装autofac :install-package autofac 安装对mvc4的支持:install -package autofac.mvc4(本人项目为mvc4) 2.新建相应的类及接口,并在autofac中进行映射 2.1.新建接口 INewsHe

iOS支付宝支付(Alipay)详细接入流程以及项目中遇到的问题分析

iOS支付宝支付(Alipay)详细接入流程以及项目中遇到的问题分析 浏览: 149 发布日期: 2016-10-19  分类: ios 最近在项目中接入了微信支付和支付宝支付,总的来说没有那么坑,很多人都说文档不全什么的,确实没有面面 俱到,但是认真一步一步测试下还是妥妥的,再配合懂得后台,效率也是很高的,看了这篇文章,你也只要几分钟, 就能轻松接入支付宝,在别人投来崇拜的眼光的同时,你就能潇洒的回一句,略懂略懂......   先给大家我写的微信支付,很详细哦,喜欢的点个赞点击打开微信支付链

浅析微信支付:申请退款、退款回调接口、查询退款

本文是[浅析微信支付]系列文章的第八篇,主要讲解商户如何处理微信申请退款.退款回调.查询退款接口,其中有一些坑的地方,会着重强调. 浅析微信支付系列已经更新七篇了哟-,没有看过的朋友们可以看一下哦. 浅析微信支付:查询订单和关闭订单 浅析微信支付:支付结果通知 浅析微信支付:统一下单接口 在实际场景中,申请退款和退款回调接口是比较常用到的微信支付接口,这里我们会讲原路返回方式的退款,还有的是使用直接为用户付款到零钱.现金红包等方式来退款,此种情况主要会出现在客服退款时,不是全部退款的情况,也有的

android 项目中使用到的网络请求框架以及如何配置好接口URL

我们在做项目中一定少不了网络请求,现在很多公司的网络请求这块好多都是使用一些比较好的开源框架,我项目中使用的是volley,现在讲讲一些volley基本的使用,如果想要详细的了解就要去看它的源码了,现在贴代码讲一些它的使用了, 首先用一个类去封装下它的基本配置信息,以后需要变动的话,就直接在这里做修改,android最好能把每个功能都独立出来,这样做修改的话 不会导致出现其他的bug,特别在有新员工进入到项目组中,分配任务沟通起来也省事, ProtocolManager.java  它是一个单例

在vue-cli搭建的项目中在后台mock接口中支持req.body和req.cookies

在<vue-cli搭建的项目中增加后台mock接口>中实现了后台mock,但是前端post的t数据都要在mock的后台接口中使用req的接收数据事件获取http协议body中的数据. req.on('data', function(chunk){ //接收字节数据 }); req.end('data', function(){ //转换||处理 }); req.error('error', function(e){ //处理错误 }); 如果前端需要使用cookie,后端要读取,那么在后台mo

软件开发工程师(JAVA)中级考试大纲-----四(四)Log4J的原理及配置;Log4J常用的API;在项目中应用日志框架Log4J关键类和接口介绍;Java properties配置文件log

log4j Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程.最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码. 1定义 log4j--log for java(java的日志) 在强调可重用组件开发的今天,除了

java web项目(spring项目)中集成webservice ,实现对外开放接口

什么是WebService?webService小示例 点此了解 下面进入正题: Javaweb项目(spring项目)中集成webservice ,实现对外开放接口步骤: 准备: 采用与spring兼容性较好的cxf来实现 cxf 的  jar下载地址: http://cxf.apache.org/download.html 选择zip格式下载,解压后的lib目录下的jar 需要最少的jar如下: cxf-2.3.3.jargeronimo-annotation_1.0_spec-1.1.1.

面试常问问题:银行网上支付项目中怎么控制多线程高并发访问?

面试常问问题:银行网上支付项目中怎么控制多线程高并发访问? synchronized关键字主要解决多线程共享数据同步问题. ThreadLocal使用场合主要解决多线程中数据因并发产生不一致问题. ThreadLocal和Synchonized都用于解决多线程并发访问.但是ThreadLocal与synchronized有本质的区别: synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问.而ThreadLocal为每一个线程都提供了变量的副本,使 得每个线程在某一时

项目中调用天气预报接口

项目中使用的是心知天气的API,下面我就简单总结一下使用的过程: 1. 在心知天气官网注册一个个人账号,这样就会产生一个API秘钥和一个用户ID,用户ID用于签名验证方式.签名指的是通过HMAC-SHA1,对请求参数加密后得到的签名字串进行身份验证,避免了将API密钥明文包含在请求中而造成泄露. 2. 关于签名生成方式如下: (1)构造验证参数字符串 将请求参数按照参数名字典升序排列后,把所有参数param=value用&连接起来,类似URI中Query string的构造方式.目前支持的参数有