1. 新版的支付宝支付简化了代码,省去了自己去签名配置参数,拼接参数的烦恼,简单明了。
public static String buildAlipayRequest(AlipayVo alipayVo) {
String alipayInfo = null;
//实例化客户端
AlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_URL, alipayVo.getAppId(), alipayVo.getAppPrivateKey(),
FORMAT, CHARSET_UTF8, alipayVo.getAlipayPublicKey(), SIGN_TYPE);
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setBody("AlipayTrade");
model.setSubject(alipayVo.getSubject());
model.setOutTradeNo(alipayVo.getOutTradeNo());
model.setTimeoutExpress("30m");
model.setTotalAmount(alipayVo.getTotalAmount());
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model);
request.setNotifyUrl(alipayVo.getNotifyUrl());
try {
//这里和普通的接口调用不同,使用的是sdkExecute
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
log.info(response.getBody());//就是orderString 可以直接给客户端请求,无需再做处理。
alipayInfo = response.getBody();
} catch (AlipayApiException e) {
e.printStackTrace();
}
return alipayInfo;
}
2. 因为项目使用到了过滤器,导致签名的sign数据中“+”被替换成了“ ”,无法获取原本的sign
java.security.SignatureException: Signature length not correct: got 253 but was expecting 256
简单处理,就是替换,将空格替换成加号
sign = sign.replace(" ", "+");