比起微信支付支付宝简直可以说是不值一提,主要还是人家的demo和官方文档写的好。
支付宝的支付去官网去下载demo可以得到一个项目,我自己改动了一下,官方demo写的扫码支付,我要做的是app支付。首先将
jar导入自己的项目中
创建配置类官方的demo里面有
这里涉及基本参数,appid ,商户的私钥在阿里的支付平台用工具生成填入相应的商户的公钥支付宝会生成相应的支付宝的公钥。然后这里会用到,回调的地址,是生订单时加进去,这里要写成自己的线上的项目接口的完整路径。
前端获取订单的参数
//实例化客户端
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
//** 当前时间 yyyyMMddHHmmss *//*
String currTime = TenpayUtil.getCurrTime();
//** 8位日期 *//*
String strTime = currTime.substring(8, currTime.length());
//** 四位随机数 *//*
String strRandom = TenpayUtil.buildRandom(6) + "";
model.setBody("咨询费用");
model.setSubject("咨询");
model.setOutTradeNo(strTime+strRandom);
model.setTimeoutExpress("30m");
model.setTotalAmount(money);
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model);
request.setNotifyUrl(AlipayConfig.notify_url);
try {
//这里和普通的接口调用不同,使用的是sdkExecute
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
System.out.println(response.getBody());//就是orderString 可以直接给客户端请求,无需再做处理。
} catch (AlipayApiException e) {
e.printStackTrace();
}
以及回调的方法这里阿里的服务器会返回两个很重要的参数一个是商户我们自己生成的订单id一个是阿里生成的订单id
//获取支付宝POST过来反馈信息
Map<String,String> params = 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");
params.put(name, valueStr);
}
System.out.println(params);
//切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
//boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
boolean flag = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset,"RSA2");
System.out.println(flag);
if(flag){
//这里我们可以写自己的逻辑
//获取阿里回调的商户订单号
String out_trade_no=params.get("out_trade_no");
}
}
这样服务器端就做完了
这里使用的工具类和微信支付的工具类类似