做好準備 直接上代碼
支付前準備
我選用的是證書 也可以用秘鑰 自己把證書轉換成秘鑰就可以了
jar
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.10.97.ALL</version>
</dependency>
配置類
package com.tm.forum.common.config.alipay;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
/**
* @author fei
*/
@Configuration
public class AlipayConfig {
/**
* 請求*****的位址
*/
@Value("${b2b3.b2b3_url}")
public String B2B3_URL;
/**
* 應用公鑰證書路徑
*/
@Value("${zfb.app_cert_path}")
public String APP_CERT_PATH;
/**
* 支付寶公鑰證書路徑
*/
@Value("${zfb.alipay_cert_path}")
public String ALIPAY_CERT_PATH;
/**
* 支付寶根證書路徑
*/
@Value("${zfb.alipay_root_cert_path}")
public String ALIPAY_ROOT_CERT_PATH;
/**
* 應用ID,您的APPID,收款賬号既是您的APPID對應支付寶賬号,開發時使用沙箱提供的APPID,生産環境改成自己的APPID 正式 2021003157678066 沙箱 2021000121679063
*/
public String app_id = "2021003157678066";
/**
* 私鑰,您的PKCS8格式RSA2私鑰(應用私鑰) 正式
*/
public String merchant_private_key = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDnb750aXOpnYmfHKm187xPrMtsiItqZrayCWRkshepCDHdd8V/WAnIXYrdrP8s4mrIZac8QxyhFymEEJfSPK0s2od7Idgl4A7h/uYAAT95px2Y857xN7gGvnRLKZKBb2ZNJ5jefGrFhm9Br2bxcLaWuvhF4LSHQ1IDufH7lM9tAkUYUPPUQb5Zacj7hjog1hQgy4hYqnyMAoRMY6nHj7WHb3Hv7HIDqDCFMFJYAQgvCBU+Q414sXx8ko3ZAIAnT1Cgogpq5DYG/K78pJxH/Id1km5PoI545+icG4FrHDQIPFIwMi68zxJYs0wmx76Gx/GWFGeXi20focM5dTNjPetRAgMBAAECggEAEw8Tuxh4Cu7LR4wfubkxt8n+EpkICiIdR3oYh2ZXJndjS96yJ/ODEroJVooJlZOrwYcFh6PrNqTmqVaIeiq/BCOW5p/54dyavSe1nyh7JrSJbnAZlbnF8OA8SXhJ9VjMLuxk3WWXkV6pyNn9+0IR90W8bly74Su9FEt6zwIJNuvB11ZRAizU8upJN7bzpz6evqsL8HWdRfPdRv9/eB51AiVnjQNGzjgu7A7rVIibS+kFb7jv3TvSh8P1MsPEBZqnI8C7zGBS+RELX2JA8C8doFQbB/HpmTcQqBpAF1N8C8I83zKXs7FCRW9ePlEbbyzvNmbzOzjWeVGSTOonUM7wxQKBgQD1wcZt/Qkudu9rL5kIqXzTA6arJr071EC9dIVFJS7o9ckYRyBgZVUY6yXgWCbSeljkuK0Q6d0r1hlgYfIzMT6o6WrkpI1RY1S8gluJiFsKgfoEtTQLJQ1rRdaJmEKTLrkUavtc2KyfjY7dPTvBlNfMIwqWQ5efkFmAV9YnnsXK8wKBgQDxFSt/IRU3z+uVoEeJfnNkDxDpvbATcGj4Rpb7rnorjNbjq/u/lPsMZVlzlzds2MQvriBA+RiJNfwYs8XU+9HplPlo+7JUL1j/H0cc+TZ8jQ5pIGEmioNcIBq+Kg2xZHrpFJiiEHyrTTkI5bAk9zuwmqNIhVPe6bx99fLl3qP5qwKBgGK2VtHPFWUIeNqA3+NO0MihaszMXq4tb2Op7e38JX+FWiTaTPLrQOclbK1UOyPH6PTWCQ4GIcR91uuT7AkL+rM2Lq1wOyM51stxQPtZPdhWpOpHLoRbeaxg/O9/rR4ZYlYFMrn0fkIIRh4vflUfSB7C5Hm+5KQ/AvQ+U9LOP3xpAoGBAK/+d2F4Ykf7Ro1Vk8PBBzX9dahdbMPUJR1SUvhq+A8A4wMT01WZyefTuQiUVMbmO9pe8HbeIdZRDbduzbZdG3G86pKEZDvm0L52M/Dn0an9Q47lL2b2aU0AtuUqSBK/Oqca/Q4aoRhg6IkhPITP48haK2dOxdqOoacGvIqpDOW/AoGAdQO+wMKg0tv9aRScEzwIKyAoQTAk5tcKAl8vcXHxAd2eq/240NRVNP6WexiRULlrTFHywWqCMEZn+T0l/xnpu8AlC1HPE5BEYPCXcmgMyB1ColMRDtFVIjD6QChemIkoPgqz00jBp4EbYRnX+feBnqxEkCh1icYESU4pkTk7RFE=";
// public String merchant_private_key = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQChqhAJoPs8Ulrl0hCvzSC1NRwv9jnlSR6bqDRHoalqPLHapT4+zH2Xsm7fo1J1Qbcmy+cronoPIzrkm8qHarMqcPWczNzL3CAoXR8CwXmVJfhXvDIkbKAyfLbiyGFjJGJjGjYeCFJX381Loi9m3Fv15+xgFyjlve4w3kS31aNCRR0PRQmbScVBb16pj/v8kgg0DxncNR4wQddTZyqyjlksbjb7sOSrIBuTxwWW+mk3qHyjbIKh/Gki0urWq3thPbj02OsxSkFC8ChUky9sYAO8Y/11AwHwQQc6+Ba8dEu8JNcdxL8JoxjFtHeYsMUQauAwtuN0DQLHP42piE4JnCHXAgMBAAECggEAfpO6BN//dgaBVyo3mH5Cmr7fuAnQ4N50UanMbT19eUnWc3woFWFlAI5b00x8NoTik0TZVkfby9hoty/nzklTyOoy1LduNUu//fqTWkQEHyxgmskmdXB7qawOQdhksAx/4FpYfwFC/7yicBKnjKECe7JAWCgqBF/GjIqrQUjLkAluTE5GGklqlA6fsS8jTBU5rZjXIcM0B8sTqoODPcI9cNYjsIJvmEy8XUpflr0ze6APVL90YDW159HKWGTJNziSeTad1MCCArrH1iAactk3osXJRNhfQpGGCqz9gBY3TF6slX42rBUUwo3WxwzIMcA2IKwjR350n6Lxn8ikAeoymQKBgQDlbRfvMhdfwXPnzy9648PxVCYeVveQSWn9FsELFysvA+0pW9rPNPiocbaEX2/stS5juL8a7L3R29TVDbpfi/tq+S1Px9V406qyAQQIRtlJ28TNZY2wAi3mA8ub9AEB8u4izjZfdjY0SE/pUcCluoamAyb+kjYXrWbIwLhen7qYrQKBgQC0Y7TJYw7M+/Ka5kGwnGWhjzh36vv1yZeaHEjSE6UA3S1uHj8kNdbiXMlDOSS61oYTfBKSOxayyfhP4DRv5Hn6cER+kuDJKCjJpJsJ77EXFO8rxtSTBEHA+NDzZDU/i7CKaZMhy7ZdvTGpU/TZypT6TzyHPuU9vPV8CBjM6XahEwKBgQDGXio4pi3xnFm0D7702WR9EA4ZY4aQGfnrW7Yz+adb8mAnx4UMbbemJRPzpnUmzI08qeuKwzFo91Mxl7oSjP0oxCP6fEVGQHWxjRFIesG7i6rBEVKN4YSAAb4VrMcGQV7Hd1cp+RLq5684hHg2k22Csu0PZaohlMtvPrrrDd6PzQKBgQCs5xjlIzaPkjsS7/ss7muXtLCaeLiy+Vx/kfbWrY+tyVJ/RyycZ6Kla+xZq88h6veue3FNiqeSDXceELgSO/wS6UMt01j0VrLpvAYDOyUSC7XHzxf4Js9jyNp3QKitVRaNRO6LKTiOlwaf1+JMUxoC5qoMtGOEjrb6AMTMvEZB0wKBgQDOIW/ibztg+LMX4g+ft0gbUDtUq/Ekm/X2kp/uyVGrGaSGeMrN2qP+j1tkwE7WU5jPB1SH+K4I3PfyMTxtwe6wBTAyplczE0t6kbswWrd/TK4+BEWkblMJ8l/u69UAxybVtPQdVQzdXrHeh2lUPOAqs9M/+9fYiP49e71sHBueqw==";
/**
* 支付寶公鑰 正式
*/
public String ZFB_pubile_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm3UA9QGg1aS0f9KKettHMuB8NSHCD/NWQ75wdENvL8WuKeUAdyHj7oGRmli3lCK1SW6jfYvipdhKvuC4ZaYwxToXHf1h0dNaPbUamAM6DBJdd4bKYbe5pQK1urmp8G2pNFSMj8b5nLMwvZ7S3ea89uBaTC669nwLUujXMcgWHjRUc3RcLFiCap3+WJkORjnbp3A7Z3uHPqZil+s696eev1mk2UqWNFWRb0lD5y5EpsIIv9e41Zh+x0duKKg8Md004b/Kj+dbYP2kBui0oW3Sdcx1K3tR60INvUZxrRNUqV1PRIfNQZI4lDnmccRtQf+wfHuZ29x+hPLsuWkRm20p7QIDAQAB";
/**
* 伺服器異步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常通路(可以使用natapp内容穿透完成外網設定)
*/
@Value("${zfb.notify_url}")
public String notify_url;
/**
* 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常通路
*/
@Value("${zfb.return_url}")
public String return_url;
/**
* 簽名方式 固定
*/
public String sign_type = "RSA2";
/**
* 字元編碼格式 固定
*/
public String charset = "utf-8";
/**
* 支付寶網關 開發環境 正式 https://openapi.alipay.com/gateway.do 沙箱 https://openapi.alipaydev.com/gateway.do
*/
public String gatewayUrl = "https://openapi.alipay.com/gateway.do";
}
網頁支付寶支付
package com.tm.forum.system.service.payment;
import com.alipay.api.AlipayApiException;
import com.tm.forum.system.domain.order.Order;
import javax.servlet.http.HttpServletRequest;
import java.io.FileNotFoundException;
import java.rmi.ServerException;
import java.util.Map;
/**
* @program: translation-api
* @description 支付寶支付
* @author: fei
* @create: 2022-10-22 23:07
**/
public interface AliPayService {
/**
* 獲得支付頁面
*
* @param order @return
* @param request
* @return
*/
String aliPayLine(Order order, HttpServletRequest request) throws Exception;
/**
* 擷取異步傳回的參數
*
* @param requestParams
* @return
*/
Map<String, String> getAliParams(Map requestParams);
// /**
// * 異步通知
// * @param request
// * @param response
// * @return
// */
// Object notify(HttpServletRequest request, HttpServletResponse response) throws AlipayApiException;
/**
* 檢視訂單
*
* @return
*/
String query(String orderNo) throws AlipayApiException, ServerException, FileNotFoundException;
/**
* 獲得支付頁面-手機端
*
* @param order @return
* @param request
* @return
*/
String mAliPayLine(Order order, HttpServletRequest request) throws Exception;
}
package com.tm.forum.system.service.payment;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSON;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradePagePayModel;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.request.AlipayTradeWapPayRequest;
import com.alipay.api.response.AlipayTradePrecreateResponse;
import com.alipay.api.response.AlipayTradeWapPayResponse;
import com.tm.forum.common.config.alipay.AlipayConfig;
import com.tm.forum.common.core.redis.RedisCache;
import com.tm.forum.common.utils.QRCodeUtil;
import com.tm.forum.common.utils.StringUtils;
import com.tm.forum.common.utils.ip.IpUtils;
import com.tm.forum.system.domain.AlipayBean;
import com.tm.forum.system.domain.order.Order;
import com.tm.forum.system.mapper.order.OrderMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ClassUtils;
import org.springframework.util.ResourceUtils;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.math.BigDecimal;
import java.rmi.ServerException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* @program: translation-api
* @description 網頁支付寶支付
* @author: ddz
* @create: 2021-05-12 23:07
**/
@Slf4j
@Service
public class AliPayServiceImpl implements AliPayService {
@Resource
private OrderMapper payOrderMapper;
@Resource
private RedisCache redisUtil;
@Resource
private AlipayConfig alipayConfig;
/**
* 證書模式 擷取檔案路徑
*
* @return
* @throws FileNotFoundException
* @throws ServerException
*/
public String queryPath() throws FileNotFoundException, ServerException {
String basePath = ResourceUtils.getURL("classpath:").getPath();
basePath = this.initCart(basePath);
return basePath;
}
/**
* 證書模式 初始化證書檔案
*
* @param basePath
* @return
* @throws ServerException
*/
private String initCart(String basePath) throws ServerException {
if (basePath.contains("jar!")) {
if (basePath.startsWith("file:")) {
basePath = basePath.replace("file:", "");
}
String appCertPath = alipayConfig.APP_CERT_PATH;
this.checkAndcopyCart(basePath, appCertPath);
String alipayCertPath = alipayConfig.ALIPAY_CERT_PATH;
this.checkAndcopyCart(basePath, alipayCertPath);
String alipayRootCertPath = alipayConfig.ALIPAY_ROOT_CERT_PATH;
this.checkAndcopyCart(basePath, alipayRootCertPath);
}
return basePath;
}
/**
* 證書模式下需要
*
* @param basePath
* @param path
* @throws ServerException
* @description 查找在該檔案路徑下是否已經存在這個檔案,如果不存在,則拷貝檔案
*/
private void checkAndcopyCart(String basePath, String path) throws ServerException {
InputStream cartInputStream = null;
OutputStream cartOutputStream = null;
String cartPath = basePath + path;
File cartFile = new File(cartPath);
File parentFile = cartFile.getParentFile();
parentFile.mkdirs();
try {
if (!cartFile.exists()) {
cartInputStream = ClassUtils.getDefaultClassLoader().getResourceAsStream(path);
cartOutputStream = new FileOutputStream(cartFile);
byte[] buf = new byte[1024];
int bytesRead;
while ((bytesRead = cartInputStream.read(buf)) != -1) {
cartOutputStream.write(buf, 0, bytesRead);
}
cartInputStream.close();
cartOutputStream.close();
}
} catch (IOException e) {
throw new ServerException(e.getMessage());
}
}
/**
* 建構client
*
* @return
* @throws AlipayApiException
* @throws ServerException
* @throws FileNotFoundException
*/
public AlipayClient initAlipayClient() throws AlipayApiException, ServerException, FileNotFoundException {
// String basePath = this.queryPath();
// 構造client
CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
// 設定網關位址
certAlipayRequest.setServerUrl(alipayConfig.gatewayUrl);
// 設定應用Id
certAlipayRequest.setAppId(alipayConfig.app_id);
// 設定應用私鑰
certAlipayRequest.setPrivateKey(alipayConfig.merchant_private_key);
// 設定請求格式,固定值json
certAlipayRequest.setFormat("json");
// 設定字元集
certAlipayRequest.setCharset(alipayConfig.charset);
// 設定簽名類型
certAlipayRequest.setSignType(alipayConfig.sign_type);
// 設定應用公鑰證書路徑
certAlipayRequest.setCertPath(alipayConfig.APP_CERT_PATH);
// 設定支付寶公鑰證書路徑
certAlipayRequest.setAlipayPublicCertPath(alipayConfig.ALIPAY_CERT_PATH);
// 設定支付寶根證書路徑
certAlipayRequest.setRootCertPath(alipayConfig.ALIPAY_ROOT_CERT_PATH);
// 構造client
AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
return alipayClient;
}
/**
* 獲得支付頁面
*
* @param order @return
* @param request
* @return
*/
@Override
public String aliPayLine(Order order, HttpServletRequest request) throws Exception {
AlipayClient alipayClient = this.initAlipayClient();
// 根據訂單交易号查詢訂單
order = payOrderMapper.findOutTradeNoOrder(order.getOutTradeNo());
if (null == order) {
return "沒有該訂單";
}
String out_trade_no = order.getOutTradeNo();
String total_amount = String.valueOf(order.getRmbPrice());
String subject = "使用者" + order.getUsername() + "支付訂單";
String body = subject;
// 設定請求參數
AlipayTradePagePayRequest aliRequest = new AlipayTradePagePayRequest();
// 設定回調位址
//alipayConfig.return_url
aliRequest.setReturnUrl(alipayConfig.return_url);
// alipayConfig.notify_url
aliRequest.setNotifyUrl(alipayConfig.notify_url);
// 封裝參數,以及自己需要的參數 如果請求時傳遞了該參數,則傳回給商戶時會回傳該參數。支付寶會在異步通知時将該參數原樣傳回
AlipayTradePagePayModel model = new AlipayTradePagePayModel();
model.setOutTradeNo(out_trade_no);
// 擷取本地Ip 判斷是否是測試ip
String ip = IpUtils.getHostIp();
if (StringUtils.isNotBlank(ip)) {
// ip.contains("192.168.1")||ip.contains("192.168.3.") || ip.contains("127.0.0.1") || order.getUserId() == 223695
if (ip.contains("192.168.1")||ip.contains("192.168.3.") || ip.contains("127.0.0.1")) {
model.setTotalAmount("0.01");
} else {
model.setTotalAmount(total_amount);
}
} else {
model.setTotalAmount(total_amount);
}
model.setSubject(subject);
model.setBody(body);
model.setTimeoutExpress("5m");
model.setProductCode("FAST_INSTANT_TRADE_PAY");
String json = JSONObject.toJSONString(order);
// 附加參數
model.setPassbackParams(json);
aliRequest.setBizModel(model);
//請求,傳回的資料由前端進行解析
String result = alipayClient.pageExecute(aliRequest).getBody();
return result;
}
/**
* 擷取阿裡支付回調的資料拼裝 驗簽,該方法在同步回調,異步回調時,必須要用到的
*/
@Override
public Map<String, String> getAliParams(Map requestParams) {
Map<String, String> params = new HashMap<String, String>();
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] + ",";
}
params.put(name, valueStr);
}
return params;
}
/**
* 檢視訂單
*
* @param orderNo
* @return
*/
@Override
public String query(String orderNo) throws AlipayApiException, ServerException, FileNotFoundException {
//獲得初始化的AlipayClient
AlipayClient alipayClient = this.initAlipayClient();
AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();
/**請求接口*/
AlipayTradePagePayModel model = new AlipayTradePagePayModel();
model.setOutTradeNo(orderNo);
alipayRequest.setBizModel(model);
/**轉換格式*/
String result = alipayClient.certificateExecute(alipayRequest).getBody().replace('\"', '\'').replace('\n', ' ');
log.info(result);
JSONObject jsonObject = JSONObject.parseObject(result, JSONObject.class);
JSONObject resp = (JSONObject) jsonObject.get("alipay_trade_query_response");
String code = (String) resp.get("code");
String status = "1";
if ("40004".equals(code)) {
status = "3";
}
String trade_status = (String) resp.get("trade_status");
//支付成功||交易結束,不可退款
if ("TRADE_SUCCESS".equals(trade_status) || "TRADE_FINISHED".equals(trade_status)) {
status = "2";
//交易建立,等待買家付款
} else if ("WAIT_BUYER_PAY".equals(trade_status)) {
status = "1";
//未付款交易逾時關閉,或支付完成後全額退款
} else if ("TRADE_CLOSED".equals(trade_status)) {
status = "3";
}
return status;
}
/**
* 手機端吊起支付
*
* @param order @return
* @param request1
* @return
* @throws Exception
*/
@Override
public String mAliPayLine(Order order, HttpServletRequest request1) throws Exception {
AlipayClient alipayClient = this.initAlipayClient();
// 根據訂單交易号查詢訂單
order = payOrderMapper.findOutTradeNoOrder(order.getOutTradeNo());
if (null == order) {
return "沒有該訂單";
}
String out_trade_no = order.getOutTradeNo();
String total_amount = String.valueOf(order.getRmbPrice());
String subject = "使用者" + order.getUsername() + "支付訂單";
AlipayTradeWapPayRequest aliRequest = new AlipayTradeWapPayRequest();
// 設定回調位址
//alipayConfig.return_url
aliRequest.setReturnUrl(alipayConfig.return_url);
// alipayConfig.notify_url
aliRequest.setNotifyUrl(alipayConfig.notify_url);
JSONObject bizContent = new JSONObject();
bizContent.put("out_trade_no", out_trade_no);
bizContent.put("subject", order.getName());
// 擷取本地Ip 判斷是否是測試ip
String ip = IpUtils.getHostIp();
if (StringUtils.isNotBlank(ip)) {
// ip.contains("192.168.1")||ip.contains("192.168.3.") || ip.contains("127.0.0.1") || order.getUserId() == 223695
if (ip.contains("192.168.1")||ip.contains("192.168.3.") || ip.contains("127.0.0.1")) {
bizContent.put("total_amount", "0.01");
} else {
bizContent.put("total_amount", total_amount);
}
} else {
bizContent.put("total_amount", total_amount);
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
bizContent.put("product_code", "QUICK_WAP_WAY");
Calendar nowTime = Calendar.getInstance();
nowTime.add(Calendar.MINUTE, 5);
bizContent.put("time_expire", sdf.format(nowTime.getTime()));
商品明細資訊,按需傳入
//JSONArray goodsDetail = new JSONArray();
//JSONObject goods1 = new JSONObject();
//goods1.put("goods_id", "goodsNo1");
//goods1.put("goods_name", "子商品1");
//goods1.put("quantity", 1);
//goods1.put("price", 0.01);
//goodsDetail.add(goods1);
//bizContent.put("goods_detail", goodsDetail);
擴充資訊,按需傳入
//JSONObject extendParams = new JSONObject();
//extendParams.put("sys_service_provider_id", "2088511833207846");
//bizContent.put("extend_params", extendParams);
aliRequest.setBizContent(bizContent.toString());
AlipayTradeWapPayResponse response = alipayClient.pageExecute(aliRequest);
if (response.isSuccess()) {
System.out.println("調用成功");
} else {
System.out.println("調用失敗");
}
String result = response.getBody();
return result;
}
}
**回調:**
/**
* 異步通知支付結果
*
* @param request
* @return String
* @throws AlipayApiException
* @throws ParseException
*/
@Transactional
@PostMapping("/asynch")
public String alipayNotify(HttpServletRequest request) throws Exception {
logger.info("支付寶異步回調:" + request.getParameterMap().toString());
// 擷取支付寶的請求資訊
Map<String, String> map = new HashMap<>();
Map<String, String[]> requestParams = request.getParameterMap();
if (requestParams.isEmpty()) {
return "failure";
}
// 将 Map<String,String[]> 轉為 Map<String,String>
for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
String name = iter.next();
String[] values = requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
}
map.put(name, valueStr);
}
// 驗簽
boolean signVerified = AlipaySignature.rsaCheckV1(map, alipayConfig.ZFB_pubile_key, alipayConfig.charset,
alipayConfig.sign_type);
// 驗簽通過
if (signVerified) {
//支付成功後進行操作
String outTradeNo = map.get("out_trade_no");
if (StringUtils.isNotBlank(outTradeNo)) {
Order order = payOrderService.findOutTradeNoOrder(outTradeNo);
if (null != order && 1 == order.getStatus()) {
// 業務代碼
}
}
}
}
return "failure";
}