81,123
社区成员




public static String getAppPrepay(Map<String, String> maps) {
String form="";
// 实例化客户端
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.alipay_url,
AlipayConfig.APP_ID, AlipayConfig.APP_PRIVATE_KEY, AlipayConfig.FORMAT,AlipayConfig.CHARSET,
AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE);
// 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
// SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
//订单描述(可不填)
model.setBody(maps.get("payDesc"));
//订单标题
model.setSubject(maps.get("payDesc"));
//商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复
model.setOutTradeNo(maps.get("orderId"));
/*该笔订单允许的最晚付款时间,逾期将关闭交易。
* 取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。
* 该参数数值不接受小数点, 如 1.5h,可转换为 90m*/
model.setTimeoutExpress("3000m");
//订单总金额,单位为元,精确到小数点后两位
model.setTotalAmount(maps.get("amount"));
//销售产品码 (可不填)
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model);
//支付宝服务器主动通知商户服务器里指定的页面http/https路径。
request.setNotifyUrl(AlipayConfig.notify_url);
try {
// 这里和普通的接口调用不同,使用的是sdkExecute
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
System.out.println(response.getBody());// 就是orderString 可以直接给客户端请求,无需再做处理。
form=response.getBody();
} catch (AlipayApiException e) {
e.printStackTrace();
}
return form;
}
public String execute() throws Exception{
//支付宝支付结束回调接口
String result="failure";
try {
//获取支付宝POST过来反馈信息
Map<String, String> maps = new HashMap<String, String>();
Map requestParams = request.getParameterMap();
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] + ",";
}
// 乱码解决,这段代码在出现乱码时使用。
// valueStr = new String(valueStr.getBytes("ISO-8859-1"),"utf-8");
maps.put(name, valueStr);
}
//调用SDK验证签名
boolean signVerified = AlipaySignature.rsaCheckV1(maps, AlipayConfig.ALIPAY_PUBLIC_KEY, "UTF-8", "RSA2");
if (signVerified) {
// TODO 验签成功后
System.out.println("=============================验签成功==============================");
orderService.alipayNotify(maps);
//处理结束之后,返回success,支付宝系统将不再发送异步回调请求
result="success";
} else {
// TODO 验签失败则记录异常日志,并在response中返回failure.
System.out.println("=============================验证失败,不去更新状态==============================");
}
} catch (Exception e1) {
e1.printStackTrace();
System.out.println("=============================回调异常==============================");
} finally {
logger.info("=============================回调结束==============================");
}
return result;
}