支付宝APP支付

支付宝APP支付

package cn.xizhi.until.pay;

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.request.AlipayTradeQueryRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.alipay.api.response.AlipayTradeQueryResponse;

import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * @author lulu
 * @version 1.0.0
 * @ClassName ALiPay.java
 * @Description TODO
 * @createTime 2021年05月18日 15:39:00
 */
public class ALiPay {
    /*支付网关*/
    private static final String URL = "https://openapi.alipay.com/gateway.do";
    /*应用id*/
    private static final String APP_ID = "填写自己的";
    /*应用私钥*/
    private static final String APP_PRIVATE_KEY = "填写自己的";
    /*支付宝公钥*/
    private static final String ALIPAY_PUBLIC_KEY = "填写自己的";
    /*类型*/
    private static final String CHARSET = "UTF-8";


    public static AlipayTradeAppPayResponse pay(BigDecimal price, String description, String out_trade_no) {
        /** 支付宝网关 **/
        String URL = "https://openapi.alipay.com/gateway.do";

        /** 应用id,如何获取请参考:https://opensupport.alipay.com/support/helpcenter/190/201602493024 **/
        String APP_ID = "填写自己的";

        /** 应用私钥,如何获取请参考:https://opensupport.alipay.com/support/helpcenter/207/201602469554 **/
        String APP_PRIVATE_KEY = "填写自己的";

        /** 支付宝公钥,如何获取请参考:https://opensupport.alipay.com/support/helpcenter/207/201602487431 **/
        String ALIPAY_PUBLIC_KEY = "填写自己的";

        /** 初始化 **/
        AlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, "json", "UTF-8", ALIPAY_PUBLIC_KEY, "RSA2");

        /** 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称: alipay.trade.app.pay(app 支付接口) **/
        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();

        /** 设置业务参数 **/
        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();

        /** 商户订单号,商户自定义,需保证在商户端不重复,如:20200612000001 **/
        model.setOutTradeNo(out_trade_no);

        /** 订单标题 **/
        model.setSubject(description);

        /** 销售产品码,固定值:QUICK_MSECURITY_PAY **/
        model.setProductCode("QUICK_MSECURITY_PAY");

        /** 订单金额,精确到小数点后两位 **/
        model.setTotalAmount(String.valueOf(price));

        /** 订单描述 **/
        model.setBody(description);

        /** 业务扩展参数 **/
        //ExtendParams extendParams = new ExtendParams();

        /** 花呗分期参数传值前提:必须有该接口花呗收款准入条件,且需签约花呗分期 **/
        /** 指定可选期数,只支持3/6/12期,还款期数越长手续费越高 **/
        // extendParams.setHbFqNum("3");

        /** 指定花呗分期手续费承担方式,手续费可以由用户全承担(该值为0),也可以商户全承担(该值为100),但不可以共同承担,即不可取0和100外的其他值。 **/
        //extendParams.setHbFqSellerPercent("0");

        //model.setExtendParams(extendParams);

        /** 将业务参数传至request中 **/
        request.setBizModel(model);

        /** 异步通知地址,以http或者https开头的,商户外网可以post访问的异步地址,用于接收支付宝返回的支付结果,如果未收到该通知可参考该文档进行确认:https://opensupport.alipay.com/support/helpcenter/193/201602475759 **/
        request.setNotifyUrl("");

        /**第三方调用(服务商模式),传值app_auth_token后,会收款至授权token对应商家账号,如何获传值app_auth_token请参考文档:https://opensupport.alipay.com/support/helpcenter/79/201602494631 **/
        //request.putOtherTextParam("app_auth_token", "传入获取到的app_auth_token值");

        AlipayTradeAppPayResponse response = null;
        try {

            /** 通过alipayClient调用API,获得对应的response类  **/
            response = alipayClient.sdkExecute(request);

        } catch (AlipayApiException e) {

            e.printStackTrace();
        }

        /** response.getBody()打印结果就是orderString,可以直接给客户端请求,无需再做处理。 如果传值客户端失败,可根据返回错误信息到该文档寻找排查方案:https://opensupport.alipay.com/support/helpcenter/89 **/
        System.out.println(response.getBody());
        return response;
    }

    public static boolean main(HttpServletRequest request) throws AlipayApiException {
        //获取支付宝POST过来反馈信息
        Map<String, String> params = new HashMap<String, String>();
        Map requestParams = request.getParameterMap();
        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对应应用下查看。
        //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
        boolean flag = AlipaySignature.rsaCheckV1(params, "填写自己的", "UTF-8", "RSA2");
        return flag;
    }

    /**
     * 验证是否完成支付
     * @param orderNumber
     * @return
     */
    public static String selectOrder(String orderNumber){
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");  //获得初始化的AlipayClient
        AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); //创建API对应的request类
        request.setBizContent("{" +
                "   \"out_trade_no\":\"" + orderNumber + "\"" +
                "  }"); //设置业务参数
        AlipayTradeQueryResponse response = null; //通过alipayClient调用API,获得对应的response类
        try {
            response = alipayClient.execute(request);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        boolean contains = response.getBody().contains("10000");
        if (contains){
            return "1";
        }else {
            return "2";
        }
    }

    public static void main(String[] args) throws AlipayApiException {
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");  //获得初始化的AlipayClient
        AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); //创建API对应的request类
        request.setBizContent("{" +
                "   \"out_trade_no\":\"" + "210902123199792" + "\"" +
                "  }"); //设置业务参数
        AlipayTradeQueryResponse response = alipayClient.execute(request); //通过alipayClient调用API,获得对应的response类
        Object alipay_trade_query_response = JSON.parseObject(response.getBody()).get("alipay_trade_query_response");
        boolean contains = response.getBody().contains("10000");
        if (contains){
            System.out.println(1);
        }else {
            System.out.println(2);
        }
        //根据response中的结果继续业务逻辑处理
    }

}


亲测可用,复制粘贴即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴脾气_lulu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值