话不多说,直接上核心代码!!!
另附RSA密钥生成工具地址:
https://docs.open.alipay.com/291/105971/
/**
* 调用支付宝支付
*/
private PayResponse getAliPayOrderStr(String orderId,String cookie) throws AlipayApiException {
//实例化客户端(参数:网关地址、商户appid、商户私钥、格式、编码、支付宝公钥、加密类型),为了取得预付订单信息
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET,
AlipayConfig.ALIPAY_PUBLIC_KEY,AlipayConfig.SIGNTYPE);
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeAppPayRequest ali_request = new AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
//获取订单信息
MembershipLevel membershipInfo = membershipLevelMapper.selectByPrimaryKey(orderId);
//业务参数传入,可以传很多,参考API
//model.setPassbackParams(URLEncoder.encode(request.getBody().toString())); //公用参数(附加数据)
//model.setBody(orderTest.getBody());//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
model.setSubject(membershipInfo.getMembershipName());//商品名称
model.setOutTradeNo(new Date().getTime()+"");//商户订单号(自动生成)
model.setTimeoutExpress("30m");//交易超时时间
model.setTotalAmount(membershipInfo.getAdmissionFee()+"");
model.setProductCode("QUICK_MSECURITY_PAY"); //销售产品码(固定值)
ali_request.setBizModel(model);
// ali_request.setNotifyUrl(AlipayConfig.notify_url);//异步回调地址(后台)
// ali_request.setReturnUrl(AlipayConfig.return_url);//同步回调地址(APP)
// 这里和普通的接口调用不同,使用的是sdkExecute
AlipayTradeAppPayResponse alipayTradeAppPayResponse = alipayClient.sdkExecute(ali_request); //返回支付宝订单信息(预处理)
String orderString = null;
if(alipayTradeAppPayResponse != null ){
orderString = alipayTradeAppPayResponse.getBody();//就是orderString 可以直接给APP请求,无需再做处理。
}
//创建订单
String uuid = Identities.uuid();
createEntryOrder(cookie,membershipInfo,uuid);//创建新的商户支付宝订单
PayResponse payResponse = new PayResponse();
payResponse.setSign(orderString);
payResponse.setMoney(membershipInfo.getAdmissionFee()+"");
payResponse.setOrderId(uuid);
return payResponse;
}