服务端SDK
pom
<!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.4.27.ALL</version>
</dependency>
JAVA服务端SDK生成APP支付订单信息示例
public String sendAppPayRequest() {
// 实例化客户端
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
// 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
// SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setBody("一个月会员"); // 交易描述 例如:Iphone6 16G,如一笔交易多种商品以拼接形式
model.setSubject("一个月会员"); // 商品的标题/交易标题/订单标题/订单关键字等。
model.setOutTradeNo(paymentOrder.getPkId() + ""); // 商户网站唯一订单号
model.setTimeoutExpress("30m"); // 绝对超时时间,格式为yyyy-MM-dd HH:mm。
model.setGoodsType("1"); // 商品主类型 :0-虚拟类商品,1-实物类商品
model.setTotalAmount(centTransformYuan(paymentOrder.getMoney()));
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model);
request.setNotifyUrl(AppPayConfig.app_notify_url);// 回调地址 支付宝服务器主动通知商户服务器里指定的页面http/https路径。
String orderInfo = null;
//这里和普通的接口调用不同,使用的是sdkExecute
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
//response.getBody()就是orderString 可以直接给客户端请求,无需再做处理。
orderInfo = response.getBody();
logger.info("生成支付宝支付订单信息完成 orderInfo:{}", orderInfo);
return orderInfo;
}
JAVA服务端验证异步通知信息参数示例
//获取支付宝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);
}
//切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
//boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
boolean flag = AlipaySignature.rsaCheckV1(params, alipaypublicKey, charset,"RSA2")
JAVA服务端验证同步通知信息参数示例
/**
* 支付宝同步请求通知
* @param body
* @param request
* @param httpServletResponse
* @throws IOException
* @throws AlipayApiException
*/
@NotLoginRestrict
@ResponseBody
@RequestMapping(value = "syncNotify", method = {RequestMethod.POST,RequestMethod.GET })
public void syncNotify(HttpServletRequest request, HttpServletResponse httpServletResponse) throws AlipayApiException {
// -----------------1.请求参数 支付状态、订单编号--------------------------------------
// 取得支付状态
String payStatus = new String(request.getParameter("payStatus"));
// 订单编号
String outTradeNo = new String(request.getParameter("outTradeNo"));
// 2.支付状态判断是否成功
if (payStatus == "1") {
// 3.成功则根据交易订单编号查询是否成功处理
// 4.如已成功处理则返回交易成功、未做处理则进行更新交易订单信息
}
}
请求配置
public class AppPayConfig {
// 默认网关
public static final String GATWAY = "https://openapi.alipay.com/gateway.do";
// 支付宝分配给开发者的应用ID
public static final String APP_ID = "";
// 应用私钥(私钥加密请求参数第三方公钥解密)
public static final String PRIVATE_KEY = "";
// 仅支持JSON
public static final String FORMAT = "json";
// 编码格式
public static final String CHARSET = "utf-8";
// 支付宝公钥
public static final String ALIPAY_PUBLIC_KEY = "";
// 签名类型
public static final String SIGN_TYPE = "RSA2";
}