public class AlipayUtils {
private static final String APPID = "";// APPID
private static final String PRIVATE_KEY = "";// 私钥
private static final String PUBLIC_KEY = ""; //支付宝公钥
private static final String CHARSET = "utf-8";// 编码
private static final String SERVER_URI="https://openapi.alipay.com/gateway.do";
private static final String NOTIFY_URL="";//回调
private static final String SUBJECT = "充值";
private static final String BODY = "余额充值";
public static String getPayParams(String price, String out_trade_no) {
AlipayClient alipayClient = new DefaultAlipayClient(
SERVER_URI, APPID, PRIVATE_KEY, "json", CHARSET,
PUBLIC_KEY, "RSA2");
// 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
request.setNotifyUrl(NOTIFY_URL);
// SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setBody(BODY);
model.setSubject(SUBJECT);
model.setOutTradeNo(out_trade_no);
model.setTimeoutExpress("5m");
model.setTotalAmount(price);
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model);
try {
// 这里和普通的接口调用不同,使用的是sdkExecute
AlipayTradeAppPayResponse response = alipayClient
.sdkExecute(request);
// response.getBody()就是orderString 可以直接给客户端请求,无需再做处理,但别忘了URLEncode,否则会出现系统繁忙。
return URLEncoder.encode(response.getBody());
} catch (AlipayApiException e) {
e.printStackTrace();
}
return "";
}
private static final String APPID = "";// APPID
private static final String PRIVATE_KEY = "";// 私钥
private static final String PUBLIC_KEY = ""; //支付宝公钥
private static final String CHARSET = "utf-8";// 编码
private static final String SERVER_URI="https://openapi.alipay.com/gateway.do";
private static final String NOTIFY_URL="";//回调
private static final String SUBJECT = "充值";
private static final String BODY = "余额充值";
public static String getPayParams(String price, String out_trade_no) {
AlipayClient alipayClient = new DefaultAlipayClient(
SERVER_URI, APPID, PRIVATE_KEY, "json", CHARSET,
PUBLIC_KEY, "RSA2");
// 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
request.setNotifyUrl(NOTIFY_URL);
// SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setBody(BODY);
model.setSubject(SUBJECT);
model.setOutTradeNo(out_trade_no);
model.setTimeoutExpress("5m");
model.setTotalAmount(price);
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model);
try {
// 这里和普通的接口调用不同,使用的是sdkExecute
AlipayTradeAppPayResponse response = alipayClient
.sdkExecute(request);
// response.getBody()就是orderString 可以直接给客户端请求,无需再做处理,但别忘了URLEncode,否则会出现系统繁忙。
return URLEncoder.encode(response.getBody());
} catch (AlipayApiException e) {
e.printStackTrace();
}
return "";
}
}
notify_url.java
response.setHeader("Content-type", "text/html;charset="
+ AppConfig.DefaultEncoding);
response.setCharacterEncoding(AppConfig.DefaultEncoding);
request.setCharacterEncoding(AppConfig.DefaultEncoding);
String result=AlipayUtils.payNofityCallback(request.getParameterMap());
response.getOutputStream().write(result.getBytes(AppConfig.DefaultEncoding));
AlipayUtils
public static String payNofityCallback(Map requestParams){ System.out.println("支付宝支付结果通知"+requestParams.toString()); //获取支付宝POST过来反馈信息 Map<String,String> params = new HashMap<String,String>(); for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String[] values = (String[]) requestParams.get(name); params.put(name,values[0]);//这里千万不要加编码解码 } try { if(!APPID.equals(params.get("auth_app_id"))&&!APPID.equals(params.get("app_id"))){ return "fail"; } //验证签名 if( AlipaySignature.rsaCheckV1(params, PUBLIC_KEY, AppConfig.DefaultEncoding, "RSA2")){ if("TRADE_SUCCESS".equals(params.get("trade_status"))){ //付款金额 double amount =Double.parseDouble( "0"+params.get("total_amount")); //商户订单号 String out_trade_no = params.get("out_trade_no"); //支付宝交易号 String trade_no = params.get("trade_no");
} else if("TRADE_CLOSE".equals(params.get("trade_status"))){ //处理 return "success"; } } else{ } } catch (Exception e) { e.printStackTrace(); } return "fail"; }//处理 return "success";
//处理 return "success";