| | |
| | | package com.yeshi.fanli.util.alipay;
|
| | |
|
| | | import java.net.URLEncoder;
|
| | | import java.util.HashMap;
|
| | | import java.util.Map;
|
| | |
|
| | | import com.alibaba.fastjson.JSON;
|
| | | import com.alipay.api.AlipayClient;
|
| | | import com.alipay.api.AlipayApiException;
|
| | | import com.alipay.api.CertAlipayRequest;
|
| | | import com.alipay.api.DefaultAlipayClient;
|
| | | import com.alipay.api.request.AlipayTradeQueryRequest;
|
| | | import com.alipay.api.request.AlipayTradeWapPayRequest;
|
| | | import com.alipay.api.response.AlipayTradeQueryResponse;
|
| | | import com.yeshi.fanli.dto.AlipayTradeWapPayDTO;
|
| | | import com.yeshi.fanli.entity.config.AlipayWapConfig;
|
| | | import com.yeshi.fanli.util.AlipayUtil;
|
| | | import com.yeshi.fanli.util.Constant;
|
| | | import com.yeshi.fanli.util.StringUtil;
|
| | |
|
| | | import net.sf.json.JSONObject;
|
| | |
|
| | | public class AlipayApi {
|
| | |
|
| | | private static DefaultAlipayClient alipayClient = null;
|
| | |
|
| | | static {
|
| | | AlipayWapConfig alipayWapConfig = Constant.alipayWapConfig;
|
| | | |
| | | CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
|
| | | certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
|
| | | certAlipayRequest.setAppId(alipayWapConfig.getAppId());
|
| | | certAlipayRequest.setPrivateKey(alipayWapConfig.getPrivateKey());
|
| | | certAlipayRequest.setFormat("json");
|
| | | certAlipayRequest.setCharset("UTF-8");
|
| | | certAlipayRequest.setSignType("RSA2");
|
| | | certAlipayRequest.setCertPath(
|
| | | AlipayUtil.class.getClassLoader().getResource(alipayWapConfig.getAppCertPath()).getPath());
|
| | | certAlipayRequest.setAlipayPublicCertPath(
|
| | | AlipayUtil.class.getClassLoader().getResource(alipayWapConfig.getAlipayCertPath()).getPath());
|
| | | certAlipayRequest.setRootCertPath(
|
| | | AlipayUtil.class.getClassLoader().getResource(alipayWapConfig.getAlipayRootCertPath()).getPath());
|
| | | try {
|
| | | alipayClient = new DefaultAlipayClient(certAlipayRequest);
|
| | | } catch (AlipayApiException e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | }
|
| | | |
| | | |
| | | /**
|
| | | * 创建支付请求
|
| | | * @param map
|
| | | * @return
|
| | | * @throws Exception
|
| | | */
|
| | | public static String tradeWapPayRequest(Map<String, String> map, String payNotify, String backUrl) throws Exception{
|
| | | public static String tradeWapPayRequest(AlipayTradeWapPayDTO payDTO) throws Exception{
|
| | | // 待请求参数数组
|
| | | JSONObject json = new JSONObject();
|
| | | // 收款方账号
|
| | | json.put("seller_id", payDTO.getSellerId());
|
| | | // 订单号
|
| | | json.put("out_trade_no", payDTO.getOutTradeNo());
|
| | | // 订单金额:0.01元,精准到分
|
| | | json.put("total_amount",payDTO.getTotalAmount());
|
| | | // 订单标题
|
| | | json.put("subject", payDTO.getSubject());
|
| | | // 销售产品码,商家和支付宝签约的产品码
|
| | | json.put("product_code", payDTO.getProductCode());
|
| | | // 该笔订单允许的最晚付款时间,逾期将关闭交易 30分钟
|
| | | json.put("timeout_express", payDTO.getTimeoutExpress());
|
| | | |
| | | |
| | | AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();
|
| | | // 前台回调地址
|
| | | alipayRequest.setReturnUrl(backUrl);
|
| | | alipayRequest.setReturnUrl(payDTO.getReturnUrl());
|
| | | // 成功付款回调
|
| | | alipayRequest.setNotifyUrl(payNotify);
|
| | | alipayRequest.setNotifyUrl(payDTO.getNotifyUrl());
|
| | |
|
| | | alipayRequest.setBizContent(URLEncoder.encode(JSON.toJSONString(map), "UTF-8"));
|
| | | alipayRequest.setBizContent(URLEncoder.encode(json.toString(), "UTF-8"));
|
| | |
|
| | | return AlipayWapConfig.getInstance().pageExecute(alipayRequest).getBody();
|
| | | return alipayClient.pageExecute(alipayRequest).getBody();
|
| | | }
|
| | | |
| | | |
| | |
|
| | | /**
|
| | | * 查询是否交易完成
|
| | |
| | | * @return
|
| | | * @throws Exception
|
| | | */
|
| | | public static boolean tradeQuery (String outTradeNo, String tradeNo, String orgPid, String queryOptions) throws Exception {
|
| | | public static AlipayTradeQueryResponse tradeQuery(String outTradeNo, String tradeNo, String orgPid, String queryOptions) throws Exception {
|
| | | // 订单支付时传入的商户订单号,和支付宝交易号不能同时为空
|
| | | if (StringUtil.isNullOrEmpty(outTradeNo) || StringUtil.isNullOrEmpty(outTradeNo)) {
|
| | | return false;
|
| | | return null;
|
| | | }
|
| | |
|
| | | // 待请求参数数组
|
| | | Map<String, String> map = new HashMap<String, String>();
|
| | | JSONObject json = new JSONObject();
|
| | | if (!StringUtil.isNullOrEmpty(outTradeNo))
|
| | | map.put("out_trade_no", outTradeNo);
|
| | | json.put("out_trade_no", outTradeNo);
|
| | | if (!StringUtil.isNullOrEmpty(tradeNo))
|
| | | map.put("trade_no", tradeNo);
|
| | | json.put("trade_no", tradeNo);
|
| | | if (!StringUtil.isNullOrEmpty(orgPid))
|
| | | map.put("org_pid", orgPid);
|
| | | json.put("org_pid", orgPid);
|
| | | if (!StringUtil.isNullOrEmpty(queryOptions))
|
| | | map.put("query_options", queryOptions);
|
| | | |
| | | json.put("query_options", queryOptions);
|
| | |
|
| | | AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
|
| | | request.setBizContent(URLEncoder.encode(JSON.toJSONString(map), "UTF-8"));
|
| | | |
| | | // 支付宝查询
|
| | | AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", AlipayWapConfig.APP_ID,
|
| | | AlipayWapConfig.APP_PRIVATE_KEY, AlipayWapConfig.PARAM_TYPE, AlipayWapConfig.CHARSET,
|
| | | AlipayWapConfig.ALIPAY_PUBLIC_KEY, AlipayWapConfig.SIGNTYPE);
|
| | | request.setBizContent(json.toString());
|
| | |
|
| | | AlipayTradeQueryResponse response = alipayClient.execute(request);
|
| | | if(response.isSuccess()){
|
| | | // 相应成功
|
| | | if ("TRADE_SUCCESS".equals(response.getTradeStatus())) { |
| | | return true; // 交易支付成功
|
| | | } else if ("TRADE_FINISHED".equals(response.getTradeStatus())) {
|
| | | return true; // (交易结束,不可退款)
|
| | | } |
| | | } |
| | | return false;
|
| | | return alipayClient.certificateExecute(request);
|
| | | }
|
| | | |
| | | |
| | |
|
| | | }
|