java调用app支付宝支付

pom配置文件

 <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.1.0</version>
            <exclusions>
                <exclusion>
                    <groupId>com.sun.xml.bind</groupId>
                    <artifactId>jaxb-impl</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java -->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.5.0.ALL</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>2.8.3</version>
        </dependency>

AliPayUtil

package com.zj.ob.yyf.util;

import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.zj.ob.yyf.config.AliPayConfigProperties;

import java.util.HashMap;
import java.util.Map;

public class AliPayUtil {
    public static Map<String, Object> getOrderSign(String totalAmount, String orderId){
        AlipayClient alipayClient = new DefaultAlipayClient(AliPayConfigProperties.getUrl(),
                AliPayConfigProperties.getAppId(),
                AliPayConfigProperties.getAppPrivateKey(),
                AliPayConfigProperties.getFormat(),
                AliPayConfigProperties.getCharset(),
                AliPayConfigProperties.getAlipayPublicKey(),
                AliPayConfigProperties.getSignType());
        Map<String, Object> map = new HashMap<>();
        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
        model.setBody("*****");//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body
        model.setSubject("*****");//商品的标题/交易标题/订单标题/订单关键字等
        model.setTotalAmount(*****);//订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]
        model.setProductCode("*****");//销售产品码,商家和支付宝签约的产品码
        model.setOutTradeNo(****);//商户网站唯一订单号,请保证OutTradeNo值每次保证唯一
        model.setTimeoutExpress("30m");//该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
        request.setBizModel(model);
        request.setNotifyUrl("*****");//商户外网可以访问的异步地址
        AlipayTradeAppPayResponse response;
        try {
            response = alipayClient.sdkExecute(request);//这里和普通的接口调用不同,使用的是sdkExecute
            map.put("orderString",response.getBody());
            map.put("res",1);
            map.put("msg","请求sign成功");
        } catch (AlipayApiException e) {
            e.printStackTrace();
            String massage = "alipay.trade.app.pay接口:订单签名错误";
            map.put("res",-1);
            map.put("msg","失败订单号"+orderId);
        }
        return map;
    }
   
    
    public static Boolean checkParam(Map<String, String> params){
        try {
            return AlipaySignature.rsaCheckV1(params, AliPayConfigProperties.getAlipayPublicKey(), AliPayConfigProperties.getCharset(),
                    AliPayConfigProperties.getSignType());
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        return null;
    }

配置支付宝参数实体类

package com.zj.ob.yyf.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class AliPayConfigProperties {

    private static String url;
    private static String appId;
    /**
     * 商户私钥
     */
    private static String appPrivateKey;
    private static String format;
    private static String charset;
    /**
     * 支付宝公钥
     */
    private static String alipayPublicKey;
    private static String signType;

    @Value("${alipay.url}")
    private  String purl;

    @Value("${alipay.appId}")
    private  String pappId;

    @Value("${alipay.appPrivateKey}")
    private  String pappPrivateKey;

    @Value("${alipay.format}")
    private  String pformat;

    @Value("${alipay.charset}")
    private  String pcharset;

    @Value("${alipay.alipayPublicKey}")
    private  String palipayPublicKey;

    @Value("${alipay.signType}")
    private  String psignType;

    @PostConstruct
    public void transValues() {
        url = this.purl;
        appId = this.pappId;
        appPrivateKey = this.pappPrivateKey;
        format = this.pformat;
        charset = this.pcharset;
        alipayPublicKey = this.palipayPublicKey;
        signType = this.psignType;
    }

    public static String getUrl() {
        return url;
    }

    public static String getAppId() {
        return appId;
    }

    public static String getAppPrivateKey() {
        return appPrivateKey;
    }

    public static String getFormat() {
        return format;
    }

    public static String getCharset() {
        return charset;
    }

    public static String getAlipayPublicKey() {
        return alipayPublicKey;
    }

    public static String getSignType() {
        return signType;
    }
}

ylm配置

alipay:
  url: ****
  appId: ****
  appPrivateKey: ****
  format: JSON
  charset: utf-8
  alipayPublicKey: ***
  signType: RSA2

异步回调

 @RequestMapping(value = "/getAlipayNotify", method = RequestMethod.POST)
    public void getAlipayNotify(HttpServletRequest request, HttpServletResponse response) {
        Map<String, String> params = new HashMap<String, String>();
        Map requestParams = request.getParameterMap();
        LOG.error("异步支付宝回调数据" + JSON.toJSONString(requestParams));
        for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
            String name = (String) iter.next();
            String[] values = (String[]) 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);
        }
        // 切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
        try {
            boolean flag = AliPayUtil.checkParam(params);
            if (flag) {
                String trade_status = params.get("trade_status");
                String out_trade_no = params.get("out_trade_no");
                String trade_no = params.get("trade_no");
                if ("TRADE_SUCCESS".equals(trade_status)) { // 交易支付成功的执行相关业务逻辑
                    AliOrderPo aliOrderPo = new AliOrderPo();
                    if (StringUtils.isNotBlank(out_trade_no)) {
                        //out_trade_no = "16";
                        String notify_time = params.get("notify_time");///参数请查看支付宝文档
                        Date notifyDate = DateTimeUtil.parseDatetime(notify_time);
                        String app_id = params.get("app_id");
                        String notify_id = params.get("notify_id");
                        String out_biz_no = params.get("out_biz_no");
                        String buyer_id = params.get("buyer_id");
                        String buyer_logon_id = params.get("buyer_logon_id");
                        String seller_id = params.get("seller_id");
                        String seller_email = params.get("seller_email");
                        String total_amount = params.get("total_amount");
                        String receipt_amount = params.get("receipt_amount");
                        String buyer_pay_amount = params.get("buyer_pay_amount");

                       // 可以写业务
                       //
                       //
                        String result = "SUCCESS";
                        BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
                        out.write(result.getBytes());
                        out.flush();
                        out.close();
                    }

                } else if ("TRADE_CLOSED".equals(trade_status)) { // 未付款交易超时关闭,或支付完成后全额退款,执行相关业务逻辑
                    LOG.error("异步支付宝失败" + JSON.toJSONString(requestParams));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值