java调支付宝

当时写的时候没注意,后来发现调的不是即时到账,也懒得改了,以后写注意,本次调的不是即时到账接口

 

1.配置文件配置相关配置

alipay:
  dev: true //true沙箱 //false正式
  sign-type: RSA2
  app-id: 2016093000635565
  private-key: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC0QgV8lV4KtNsUYUpxh094Byoa70MTjeXeO5UbVIqeLDd5cP1B4mP0/Og909sVciD9rTgI8UfJJyZhHdVfgBvdb68/oNBVeUOlDgiGnqBFAFxuBuTL5mZ5XEQxhKQr4CzW/wOAQp6c/mnN+mVNxljJZ3mGm8ok9fZkzArNM6cg7B8iOzYgaSnGdqea1CmNn6zpNBgNIkK4bAy75eo7X36r+90c4dwulufRRnZoJCoNIj/CRaowW5+mY4z9r1qTWQfRn43N5HEL00yvSl7lt7LdGF2N7oKegR1M/QuZOmuKSokV+64Bh4K82k1e2hNjAbRhDvtuhfTUmalDPSvSYYsxAgMBAAECggEBAITsyq78VsT+aS+2LvdZGLkiT2JdXdFlqkUfGu10gmPxp1beg2O6VouqlHhDaiN+beWjftbZVl53iE3FejtadTHt0gXRyM+/BKsKli7verBne8GHQ+E4ngiQiZkafxX70hUZKLPEbMLIua0zINEhmweqTmt9Jqvq1S+vZ6e6l1wmgo3+aBO4CBS7mmfUxOnXFo2PNZovAkCsnIcux2/dO+DFkqNimkEu513wnDMFLYPjopgb7dZ2vuVDCOJuRQLMAVdBbdflRo6eXd/KDXWqhvYShaGeUdbHmXPsLzZRUlfQ3i0PD+vsXyI5UOui+cMGN6rqiNheUJQU4iB1xhQ6FqECgYEA+suQ/ULEaR0zUefbGODISKa4KPYNk25PkF5H8VP4hCL4kqjFtqyWqZfEhSjr0BDiBfaOQsWyyBzUNMf/HOEaQcuqaQfRPjED8jhNdSD+gNn62kjew571vFPFuhvK5TkhEcFaXHuI5/EHViPiLiwr+dcarH2tsyXE3b2IWIW24ksCgYEAt/+zuY3DHehtgSjpqDkWnb2kz6OULIP2RsfsdkM1a4XpYV/eSdjpBHs8DRyiFFqpM6xzMA86ViOMTaD94Pg0U6wwMLeQxSmFQSIQjF7vCDmlkOSs0dQ6ObayUolBisK3L44F+uOKWR5/2P0/JSEjTo5Zkda+srt5GbjbJFszevMCgYEAyJlyy2BQQdN9bRILCYciLBpOS1Uj3rzpHwyKdtk3elmOgaBFJKw/hj9CjVAB7lbSsvpXJ8mCCtYkVmNyBuN2YRJKp9/82cXS5jdqnTla2C2CnH6Uz9uhqpVHHmmEjHx5mv4RDNAy3XLI73mcPFpQgnIvf7C28whOwx4KpOOvOKkCgYAszNigxFCOtqn6+dAygnvsOmGnoOeSEytivojnnqOiI3/YkrQX/PV3ft33P1KDbDOofkOpnvuQP6WIvTszjJuJB/LP2dIo/1wPqNCorPC8avTSG6ush2UJ6l7u07aep5xcutLf7Ikh+9gbKEY4ryHenbBXXxcdg6IPzj+lUYNuWwKBgQD4X5YY+T/OeQSuhiUY7zHAB+ptJsPiPklz4VZyIFBj5xcah8bv8Jdg9wWXAD4qrnmNTG9FIa6epm3BFiRzriB79Mvk1AWH/M7OeOP1q9oQaT9ljnV1FJuqn+HJBaZZsjms3YxSXfDncxoQF2INlWpsHp9KuZ0hH5wiXeQ24UaewQ==
  alipay-public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr4vzGWyx7GcG33zm5pz7v4QlNK7Gr/kmjLFritFl9TLxplxwF67b1SyEDZeSTBu3cAp+D9WmLsnaluRBe1N3vvLJUAPULxDvyVroMl5NOIZMhGt15P5HZavOrRzX/69adKNxnSz+d35Ab0k3jEHL9MTBsb4lbl+KRQPBHwv5DhOsLxg05oN8iAZpmfHIN5QGaqL5FqB4Th2ERvANu0eI1hxZ7jSa+b233riJNa9PHISz5NdI0p/TXWlMMeDa4Q4CeXK0wpGi6nq64uZg+zZza/+ocUQDwvtgXtX9LNjVU/m0E42lWWXdLyz+rrwREmq6SxHSVW/usg7lhuIX58VOVQIDAQAB
  notify-url: http://localhost:8085/alipay/notify
#  return-url: http://localhost:9520/#/pubOrder/pubOrderList
  return-url: http://localhost:8085/alipay/return
  gateway-url: https://openapi.alipaydev.com/gateway.do

2.建一个类读取配置文件

package com.mj.mall.config.alipay;

import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import lombok.Data;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 支付宝支付设置
 * @author jitwxs
 * @since 2018/6/4 19:04
 */
@Configuration
@Data
public class AliPayConfig {
    @Value("${alipay.gateway-url}")
    private String gatewayUrl;
    @Value("${alipay.app-id}")
    private String appId;
    @Value("${alipay.private-key}")
    private String privateKey;
    @Value("${alipay.alipay-public-key}")
    private String alipayPublicKey;
    @Value("${alipay.sign-type}")
    private String signType;
//    @Value("${alipay.uid}")
//    private String sellerId;
    @Value("${alipay.notify-url}")
    private String notifyUrl;
    @Value("${alipay.return-url}")
    private String returnUrl;

    @Bean
    AlipayClient alipayClient() {
        return new DefaultAlipayClient
                (gatewayUrl, appId, privateKey, "json", "utf-8", alipayPublicKey, signType);
    }

   
}

3.Controller

package com.mj.mall.controller;

import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.response.AlipayTradePagePayResponse;
import com.mj.mall.bean.AlipayVo;
import com.mj.mall.config.alipay.AliPayConfig;
import com.mj.mall.service.PubOrderService;
import com.mj.mall.util.CommonUtil;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;

/**
 * @author: hxy
 * @description: 用户/角色/权限相关controller
 * @date: 2017/11/2 10:19
 */
@RestController
@RequestMapping("/alipay")
public class AlipayController {

    @Autowired
    private AliPayConfig aliPayConfig;
    @Autowired
    private AlipayClient alipayClient;
    @Autowired
    private PubOrderService pubOrderService;

    @GetMapping("/pay")
    public JSONObject pay( HttpServletRequest request,HttpServletResponse response) throws AlipayApiException, IOException {
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        //异步通知地址
        alipayRequest.setReturnUrl(aliPayConfig.getReturnUrl());
        // 服务器异步通知页面路径
        alipayRequest.setNotifyUrl(aliPayConfig.getNotifyUrl());

        // 2、SDK已经封装掉了公共参数,这里只需要传入业务参数,请求参数查阅开头Wiki
        Map<String,String> map = new HashMap<>(16);
        map.put("out_trade_no", UUID.randomUUID().toString().replace("-", ""));
        map.put("total_amount", "100");
        map.put("subject", "测试");
        // 销售产品码
        map.put("product_code","FAST_INSTANT_TRADE_PAY");
        //map.put("timeout_express","");
        //公共校验参数
        //map.put("passback_params","");

        alipayRequest.setBizContent(JSONObject.toJSONString(CommonUtil.request2Json(request)));

        AlipayTradePagePayResponse alipayResponse=alipayClient.pageExecute(alipayRequest);


        return CommonUtil.successJson(alipayResponse.getBody());
    }

    @PostMapping("/notify")
    public void alipayNotify(HttpServletRequest request,  HttpServletResponse response){
        /*
         默认只有TRADE_SUCCESS会触发通知,如果需要开通其他通知,请联系客服申请
         触发条件名 	    触发条件描述 	触发条件默认值
        TRADE_FINISHED 	交易完成 	false(不触发通知)
        TRADE_SUCCESS 	支付成功 	true(触发通知)
        WAIT_BUYER_PAY 	交易创建 	false(不触发通知)
        TRADE_CLOSED 	交易关闭 	false(不触发通知)
        来源:https://docs.open.alipay.com/270/105902/#s2
         */
        // 获取参数
        Map<String,String> params = getPayParams(request);
        try{
            // 验证订单
            boolean flag = pubOrderService.validOrder(params);
            if(flag) {
                //商户订单号
                String orderId = params.get("out_trade_no");
                //支付宝交易号
                String tradeNo = params.get("trade_no");
                //交易状态
                String tradeStatus = params.get("trade_status");

                JSONObject jsonObject=new JSONObject();
                jsonObject.put("orderSn",orderId);
                jsonObject.put("tradeNo",tradeNo);
                switch (tradeStatus) {
                    case "WAIT_BUYER_PAY":
                        jsonObject.put("status",0);
                        break;
                    /*
                     * 关闭订单
                     * (1)订单已创建,但用户未付款,调用关闭交易接口
                     * (2)付款成功后,订单金额已全部退款【如果没有全部退完,仍是TRADE_SUCCESS状态】
                     */
                    case "TRADE_CLOSED":
                        jsonObject.put("status",4);
                        break;
                    /*
                     * 订单完成
                     * (1)退款日期超过可退款期限后
                     */
                    case "TRADE_FINISHED" :
                        jsonObject.put("status",3);
                        break;
                    /*
                     * 订单Success
                     * (1)用户付款成功
                     */
                    case "TRADE_SUCCESS" :
                        jsonObject.put("status",1);

                        break;
                    default:break;
                }
                pubOrderService.updateOrder(jsonObject);
                System.out.println("返回支付宝success");
                response.getWriter().write("success");
            }else {
//                log.error("【支付异步方法】验证失败,错误信息:{}", AlipaySignature.getSignCheckContentV1(params));
                response.getWriter().write("fail");
            }
        } catch (Exception e){
//            log.error("【支付异步方法】异常,异常信息:{}", e.getMessage());
            e.printStackTrace();
        }
    }


//    @GetMapping("/return")
//    public void alipayReturn(HttpServletRequest request,  HttpServletResponse response) {
//        // 获取参数
//        Map<String,String> params = getPayParams(request);
//        System.out.println("支付宝交易号"+params);
//    }
//
//
//    /**
//     * 获取支付参数
//     * @author jitwxs
//     * @since 2018/6/4 16:39
//     */
//    private Map<String,String> getPayParams(HttpServletRequest request) {
//        Map<String,String> params = new HashMap<>(16);
//        Map<String,String[]> requestParams = request.getParameterMap();
//
//        Iterator<String> iter = requestParams.keySet().iterator();
//        while (iter.hasNext()) {
//            String name = iter.next();
//            String[] values = requestParams.get(name);
//            String valueStr = "";
//            for (int i = 0; i < values.length; i++) {
//                valueStr = (i == values.length - 1) ? valueStr + values[i]
//                        : valueStr + values[i] + ",";
//            }
//            //乱码解决,这段代码在出现乱码时使用
            valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
//            params.put(name, valueStr);
//        }
//        return params;
//    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值