记录一下使用支付宝电脑网站支付接口遇到的一些坑 废话不多说,总结一下

记录一下使用支付宝电脑网站支付接口遇到的一些坑 废话不多说,总结一下:


废话不多说,总结一下:
1、因为同步和异步url添加自定义参数(处理后续操作数据库),弄了一两天,问了支付宝小哥哥,我听着也是模棱两可,最后,自己慢慢测试找到一个方法:如下

//设置同步url ,get请求,在后面直接添加参数(官方说不能添加,因为添加后验签可能会失败),然后在后台把你添加的参数获取后再从map集合中删除,这样验签就不会出现因为添加自定义参数而失败。
alipayRequest.setReturnUrl((String)request.getAttribute(“ReturnUrl”)
+"?tokenId="+(String)request.getParameter(“tokenId”)+"&docUserId="+(String)request.getAttribute(“docUserId”)
+"&typeCode="+(String)request.getAttribute(“typeCode”)+"&subPrice="+request.getAttribute(“subPrice”)
+"&patientId="+(String)request.getAttribute(“patientId”)+"&patientUserId="+(String)request.getAttribute(“patientUserId”));

//设置异步url,post请求,这个不能在后面直接添加参数,因为你添加和不添加是一样的,毫无作用,后台不会获取到,那应该怎么加呢?看下面:
alipayRequest.setNotifyUrl((String)request.getAttribute(“NotifyUrl”));

可以通过setBizContent,添加,代码如下,有一点要注意,必须要encode,然后后台decode回来,异步后台是原样带回参数,我是在后台将字符串转化json,然后再获取想要的参数。

//设置自定义参数
String passback_params = “{‘tokenId’:”+"’"+(String)request.getParameter(“tokenId”)+"’"+
“,”+"‘docUserId’:"+"’"+(String)request.getAttribute(“docUserId”)+"’"+
“,”+"‘typeCode’:"+"’"+(String)request.getAttribute(“typeCode”)+"’"+
“,”+"‘orderId’:"+"’"+(String)request.getAttribute(“orderId”)+"’"+
“,”+"‘subPrice’:"+"’"+(String)request.getAttribute(“subPrice”)+"’"+
“,”+"‘patientId’:"+"’"+(String)request.getAttribute(“patientId”)+"’"+
“,”+"‘orderPrice’:"+"’"+(String)request.getAttribute(“orderPrice”)+"’"+
“,”+"‘patientUserId’:"+"’"+(String)request.getAttribute(“patientUserId”)+"’"+"}";
System.err.println(“自定义参数”+passback_params);
//将参数encode
String passback_params2 =java.net.URLEncoder.encode(passback_params,“UTF-8”);
//若想给BizContent增加其他可选请求参数,以增加自定义超时时间参数timeout_express来举例说明
alipayRequest.setBizContent("{“out_trade_no”:""+ out_trade_no +"","
+ ““total_amount”:”"+ total_amount +"","
+ ““subject”:”"+ subject +"","
+ ““body”:”"+ body +"","
+ ““passback_params”:”"+ passback_params2 +"","
+ ““timeout_express”:”" + timeout_express + “”,"
+ ““product_code”:”" + product_code + “”}");

后台处理代码:

String passback_params2 = “”;//接受自定义参数
String passback_params = getRequest().getParameter(“passback_params”);
if(!"".equals(passback_params) && passback_params !=null){
passback_params2 =java.net.URLDecoder.decode(passback_params,“UTF-8”);
}
logger.error(“异步passback_params2”+passback_params2);
JSONObject obj = JSON.parseObject(passback_params2);
logger.error(“异步 JSON”+obj);

2、异步需要接受到‘success’,这七个字符才会停止触发,要不然会一直请求服务器。我在测试时,因为下面方法返回值返回json,或者String,虽然都返回success,但是还是会一直回调,返回方法需要改为void,这样就行了

public void postNotifyUrl() throws Exception{
getResponse().getWriter().write(“success”);
getResponse().getWriter().flush();
}

3、支付宝的沙箱测试还是很实用的,暂时先写这么些个吧。

你可能感兴趣的:(支付宝,支付宝接口,支付宝添加自定义参数)