자바:알 리 페 이 대면 데모(공개 키 인증서 방식)-샌 드 박스 환경 테스트 버 전

1.알 리 페 이 오픈 플랫폼 에서 직접 지불 데 모 를 다운로드 한 후 Alipay SDK 버 전 을 4.11.21.ALL 또는 최신 버 전(demo 의 3.3.0 버 전 은 인증서 방식 을 지원 하지 않 음)으로 수정 합 니 다.
    com.alipay.sdk     alipay-sdk-java     4.11.21.ALL  
2.bcprov-jdk*.jar 패 키 지 를 가 져 옵 니 다.그렇지 않 으 면 오류 가 발생 합 니 다. java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider
            org.bouncycastle             bcprov-jdk16             1.46         
3.zfbinfo.properties 를 수정 합 니 다.(정식 환경 에서 이 세 인증 서 는 다른 폴 더 에 따로 저장 해 야 합 니 다.jar 에 포장 하지 마 십시오)

#       、partnerId appId
open_api_domain = https://openapi.alipaydev.com/gateway.do
mcloud_api_domain = http://mcloudmonitor.com/gateway.do
#  UID
pid = 20***913  
appid = 2***565 
#     
private_key = MII****SkAgE
#            
certPath = E:/****/CSR/appCertPublicKey_2021000117600565.crt

#            
rootCertPath = E:/****/CSR/alipayRootCert.crt

#SHA256withRsa                
alipayPublicCertPath = E:/****/CSR/alipayCertPublicKey_RSA2.crt
#     : RSA->SHA1withRsa,RSA2->SHA256withRsa
sign_type = RSA2

4.인 코딩
package com.alipay.demo.trade;

import com.alipay.api.*;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.domain.TradeFundBill;
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.alipay.api.response.MonitorHeartbeatSynResponse;
import com.alipay.demo.trade.config.Configs;
import com.alipay.demo.trade.model.ExtendParams;
import com.alipay.demo.trade.model.GoodsDetail;
import com.alipay.demo.trade.model.builder.*;
import com.alipay.demo.trade.model.hb.*;
import com.alipay.demo.trade.model.result.AlipayF2FPayResult;
import com.alipay.demo.trade.model.result.AlipayF2FPrecreateResult;
import com.alipay.demo.trade.model.result.AlipayF2FQueryResult;
import com.alipay.demo.trade.model.result.AlipayF2FRefundResult;
import com.alipay.demo.trade.service.AlipayMonitorService;
import com.alipay.demo.trade.service.AlipayTradeService;
import com.alipay.demo.trade.service.impl.AlipayMonitorServiceImpl;
import com.alipay.demo.trade.service.impl.AlipayTradeServiceImpl;
import com.alipay.demo.trade.service.impl.AlipayTradeWithHBServiceImpl;
import com.alipay.demo.trade.utils.Utils;
import com.alipay.demo.trade.utils.ZxingUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.*;

/**
 * Created by liuyangkly on 15/8/9.
 *   main  ,       api
 * sdk demo           :[email protected]
 */
public class Main {
    private static Log                  log = LogFactory.getLog(Main.class);

    //       2.0  
    private static AlipayTradeService   tradeService;

    //       2.0  (           )
    private static AlipayTradeService   tradeWithHBService;

    //            ,     api  ,    readme.txt
    private static AlipayMonitorService monitorService;

    private static final String certPath;
    private static final String rootCertPath;
    private static final String alipayPublicCertPath;

    static {
        /**       AlipayTradeService    Configs.init()      
         *  Configs   classpath  zfbinfo.properties      ,                 classpath  
         */
        Configs.init("zfbinfo.properties");
        ResourceBundle rb = ResourceBundle.getBundle("zfbinfo"); //  .properties  
        certPath = rb.getString("certPath");
        rootCertPath = rb.getString("rootCertPath");
        alipayPublicCertPath = rb.getString("alipayPublicCertPath");
    }

    //       
    private void dumpResponse(AlipayResponse response) {
        if (response != null) {
            log.info(String.format("code:%s, msg:%s", response.getCode(), response.getMsg()));
            if (StringUtils.isNotEmpty(response.getSubCode())) {
                log.info(String.format("subCode:%s, subMsg:%s", response.getSubCode(),
                    response.getSubMsg()));
            }
            log.info("body:" + response.getBody());
        }
    }

    public static void main(String[] args) throws AlipayApiException {
        Main main = new Main();
        
        //      2.0       
        main.test_trade_precreate();
    }

    //      2.0       
    public void test_trade_precreate() throws AlipayApiException {
        // (  )               ,64     ,      、  、   ,
        //             ,       sequence  ,
        String outTradeNo = "tradeprecreate" + System.currentTimeMillis()
                            + (long) (Math.random() * 10000000L);

        // (  )     ,           。 “xxx  xxx         ”
        String subject = "xxx  xxx         ";

        // (  )      ,    ,    1  
        //        【    】,【      】,【     】  ,         :【     】=【    】+【      】
        String totalAmount = "100";

        // (  )         ,              ,         ,            
        //        ,    【     】,【    】,      【     】-【    】
        String undiscountableAmount = "0";

        //        ID,                       ,(   sellerId        )
        //        ,              PID,   appid   PID
        String sellerId = "208***913";

        //     ,                 ,    "    2  15.00 "
        String body = "    3  20.00 ";

        //        ,                  
        String operatorId = "test_operator_id";

        // (  )       ,                        ,         
        String storeId = "test_store_id";

        //       ,                 (  setSysServiceProviderId  ),            
        ExtendParams extendParams = new ExtendParams();
        extendParams.setSysServiceProviderId("208***3913");

        //     ,   30  
        String timeoutExpress = "30m";

        //       ,           ,
        List goodsDetailList = new ArrayList();
        //         ,         id(    )、  、  (    )、  ,          ,  GoodsDetail
        GoodsDetail goods1 = GoodsDetail.newInstance("goods_id001", "xxx   ", 1000, 1);
        //                  
        goodsDetailList.add(goods1);

        //               ,        “    ”,   5.00 ,     
        GoodsDetail goods2 = GoodsDetail.newInstance("goods_id002", "xxx  ", 500, 2);
        goodsDetailList.add(goods2);

        //         builder,      
        AlipayTradePrecreateRequestBuilder builder = new AlipayTradePrecreateRequestBuilder()
            .setSubject(subject).setTotalAmount(totalAmount).setOutTradeNo(outTradeNo)
            .setUndiscountableAmount(undiscountableAmount).setSellerId(sellerId).setBody(body)
            .setOperatorId(operatorId).setStoreId(storeId).setExtendParams(extendParams)
            .setTimeoutExpress(timeoutExpress)
//                            .setNotifyUrl("http://www.baidu.com")//                     http  ,      
            .setGoodsDetailList(goodsDetailList);
//        AlipayF2FPrecreateResult result = tradeService.tradePrecreate(builder);

        CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
        certAlipayRequest.setServerUrl(Configs.getOpenApiDomain());
        certAlipayRequest.setAppId(Configs.getAppid());
        certAlipayRequest.setPrivateKey(Configs.getPrivateKey());
        certAlipayRequest.setFormat("json");
        certAlipayRequest.setCharset("utf-8");
        certAlipayRequest.setSignType(Configs.getSignType());
        certAlipayRequest.setCertPath(certPath);
        certAlipayRequest.setAlipayPublicCertPath(alipayPublicCertPath);
        certAlipayRequest.setRootCertPath(rootCertPath);

        AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
        //  API  
        AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
//        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
        System.out.println(builder.toJsonString());
        System.out.println(builder.toString());
        request.setBizContent(builder.toJsonString()+"product_code:FACE_TO_FACE_PAYMENT");

        //    
        AlipayTradePrecreateResponse response = alipayClient.certificateExecute(request);
        dumpResponse(response);

        //              
        String filePath = String.format("C:/Users/***/Desktop/qr-%s.png",
                response.getOutTradeNo());
        log.info("filePath:" + filePath);
//                  
        ZxingUtils.getQRCodeImge(response.getQrCode(), 256, filePath);
    }
}

결제 방식 에 따라 API 요청 과 요청 을 구성 할 때 서로 다른 방법 을 사용 해 야 합 니 다. 
직접 지불 하 다.
AlipayTradePayRequest & AlipayTradePayResponse
직접 지불 하 다.
AlipayTradePrecreateRequest&AlipayTradePrecreateResponse
직접 지불 하 다
AlipayTradeCreateRequest&AlipayTradeCreateResponse
앱 결제
AlipayTradeAppPayRequest & AlipayTradeAppPayResponse
모 바 일 홈 페이지 결제 
AlipayTradeWapPayRequest& AlipayTradeWapPayResponse
컴퓨터 홈 페이지 결제
AlipayTradePagePayRequest& AlipayTradePagePayResponse
 

좋은 웹페이지 즐겨찾기