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(" ", "+");