应用场景:支付宝H5支付,支付成功之后,特殊订单需要进行特殊展示。
alipay.trade.wap.pay(手机网站支付接口2.0)
https://opendocs.alipay.com/apis/api_1/alipay.trade.wap.pay
1、请求参数,增加参数:passback_params。
官方说明:
2、鉴于新版本支付宝H5支付,支付完成之后页面无响应问题,我们依然要使用同步通知。
但是passback_params参数只存在异步返回信息中。
解决方案:我们可以把这个参数拼接到同步通知URL上。
3、自定义参数:myParams来接收passback_params。
4、最终构造之后的return_url路径如下:
https://www.xx.com/return/aliWap?myParams=yy
5、同步通知参考源码:
@RequestMapping(value = "/aliH5", method = RequestMethod.GET)
public void returnUrl(HttpServletRequest request, HttpServletResponse response)
throws IOException, AlipayApiException {
request.setCharacterEncoding("utf-8");//乱码解决,这段代码在出现乱码时使用
//获取支付宝GET过来反馈信息
Map<String, String> params = new HashMap<>();
Map<String, String[]> requestParams = request.getParameterMap();
for (String str : requestParams.keySet()) {
String name = str;
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] + ",";
}
//自定义参数不参与验签
if (!"myParams".equals(name)) {
params.put(name, valueStr);
}
}
//获取自定义参数
String myParams = request.getParameter("myParams");
//调用SDK验证签名
boolean signVerified = AlipaySignature.rsaCheckV1(params, aliPayConfig.getPublicKey(), "utf-8", "RSA2");
String redirectUrl;
if (signVerified) {
//重定向 跳转至支付成功后的页面
redirectUrl = aliPayConfig.getReturnSuccessUrl();
if (!"".equals(myParams)) redirectUrl = redirectUrl + "/" + myParams;
} else {
//重定向 跳转到支付失败后的页面
redirectUrl = aliPayConfig.getReturnFailUrl();
}
response.sendRedirect(redirectUrl);
}
注意:自定义参数,排除后再进行签名验证,否则签名验证不通过。