Java簡單調用支付寶當面付生成支付二維碼


package com.tony.alipaycollection.service.impl;
 
 
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradePrecreateModel;
import com.alipay.api.domain.AlipayTradeQueryModel;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.response.AlipayTradePrecreateResponse;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.tony.alipaycollection.config.ApiException;
import com.tony.alipaycollection.config.RetEnum;
import com.tony.alipaycollection.consts.AlipayConsts;
import com.tony.alipaycollection.service.AlipayService;
import com.tony.alipaycollection.vo.AlipayBean;
import com.tony.alipaycollection.vo.AlipayJsonRootBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
 
import java.util.Map;
 
/**
 * @author tony
 * @date 2020/8/19 13:42
 */
@Slf4j
@Service
public class AlipayServiceImpl implements AlipayService {
 
    /**支付寶請求地址*/
    private static String aliUrl = "https://openapi.alipay.com/gateway.do";
    /**支付寶應用ID*/
    private static String aliAppId = "11223344";
    /**本地通過"支付寶開放平台開發助手"生成的私鑰*/
    private static String aliAppPrivateKey = "ABCD123";
    /**支付寶應用設置本地公鑰后生成對應的支付寶公鑰(非本地生成的公鑰)*/
    private static String alipayPublicKey = "ABCD123";;
    /**支付寶回調的接口地址*/
    private static String aliNotifyUrl = "http://localhost:8080/alinotify";
 
    @Override
    public String newAliOrder() throws Exception {
        log.info("開始調用支付寶生成支付二維碼...");
        //實例化客戶端
        AlipayClient alipayClient = new DefaultAlipayClient(aliUrl, aliAppId, aliAppPrivateKey, "json", "utf-8", alipayPublicKey, "RSA2");
        //設置請求參數
        AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
        AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
        model.setOutTradeNo("20200826888888888888888");
        model.setTotalAmount("1");
        model.setSubject("充值");
        //如果沒有店鋪號可不設置
        model.setStoreId("9527");
        model.setQrCodeTimeoutExpress("10m");
        request.setBizModel(model);
        //支付寶異步通知地址
        request.setNotifyUrl(aliNotifyUrl);
        log.info("創建支付寶訂單,請求參數:{} ", JSONObject.toJSONString(request));
        //調用接口
        AlipayTradePrecreateResponse response = alipayClient.execute(request);
 
        log.info("創建支付寶訂單,返回值:{} ", JSONObject.toJSONString(response));
        if (!response.isSuccess()) {
            throw new ApiException(RetEnum.MachineOrderAlipayException);
        }
        AlipayJsonRootBean alipayJsonRootBean = JSONObject.parseObject(response.getBody(), AlipayJsonRootBean.class);
        if(!AlipayConsts.SuccessCode.equals(alipayJsonRootBean.getAlipay_trade_precreate_response().getCode())){
            throw new ApiException(RetEnum.MachineOrderAlipayException);
        }
        log.info("交易訂單號outTradeNo:{} ", response.getOutTradeNo());
        log.info("支付二維碼qrCode:{} ", response.getQrCode());
        return response.getQrCode();
    }
 
    @Override
    public void aliNotify(Map<String, String> param) throws Exception {
        log.info("支付寶異步回調接口數據處理");
        //只有支付成功后,支付寶才會回調應用接口,可直接獲取支付寶響應的參數
        String order_id = param.get(AlipayConsts.AliOutTradeNo);
        //出於安全考慮,通過支付寶回傳的訂單號查詢支付寶交易信息
        AlipayTradeQueryResponse aliResp = queryOrder(order_id);
        if (!AlipayConsts.SuccessCode.equals(aliResp.getCode())) {
            //返回值非10000
            throw new ApiException(RetEnum.MachineOrderAlipayException, aliResp.getSubMsg());
        }
        if (!AlipayConsts.AliTradeSuccess.equals(aliResp.getTradeStatus()) && !AlipayConsts.AliTradeFinished.equals(aliResp.getTradeStatus())) {
            //支付寶訂單狀態不是支付成功
            throw new ApiException(RetEnum.MachineOrderAliUnPay);
        }
        //可對支付寶響應參數AlipayTradeQueryResponse進行處理
 
    }
 
    @Override
    public AlipayTradeQueryResponse queryOrder(String orderId) throws Exception {
        log.info("查詢支付寶訂單,訂單編號為:{}", orderId);
        AlipayClient alipayClient = new DefaultAlipayClient(aliUrl, aliAppId, aliAppPrivateKey, "json", "utf-8", alipayPublicKey, "RSA2");
        AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
        AlipayTradeQueryModel model = new AlipayTradeQueryModel();
        model.setOutTradeNo(orderId);
        request.setBizModel(model);
        AlipayTradeQueryResponse response = alipayClient.execute(request);
        log.info("查詢支付寶訂單,返回數據:{}", response);
        return response;
    }
 
 
}

 

maven依賴:

<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>4.10.97.ALL</version>
</dependency>

 

 

完整代碼: https://github.com/zhongzhihao1995/alipaycollection.git


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM