java后台支付宝支付接口开发

需要阿里的jar包,可以自行去支付宝开发平台下载,下面分享仅作参考,欢迎各位大佬指教

1.工具类

 

 

import org.springframework.core.io.ClassPathResource;

import org.springframework.core.io.Resource;

import com.alipay.api.AlipayApiException;

import com.alipay.api.AlipayClient;

import com.alipay.api.DefaultAlipayClient;

import com.alipay.api.request.AlipayFundTransOrderQueryRequest;

import com.alipay.api.response.AlipayFundTransOrderQueryResponse;

import com.ssm.pojo.MessageBean;//自定义返回对象

import java.util.Map;

import java.util.HashMap;

import com.alibaba.fastjson.JSON;

/**

* alipay支付

*/

public class AlipayUtil {

public static String URL = "https://openapi.alipay.com/gateway.do";// 支付宝网关

public static String ALIPAY_APPID = ConfigUtil.getProperty("alipay.appid"); // appId

public static String notify_url = ConfigUtil.getProperty("notify_url");// 回调地址

public static String APP_PRIVATE_KEY = "";

public static String ALIPAY_PUBLIC_KEY = "";

public static String FORMAT = "JSON";

public static String CHARSET = "utf-8";

public static String SIGN_TYPE = "RSA2";

static {

try {

Resource resource = (Resource) new ClassPathResource("alipay_private_key_pkcs8.pem");

APP_PRIVATE_KEY = FileUtil.readInputStream2String(((ClassPathResource) resource).getInputStream());

resource = (Resource) new ClassPathResource("alipay_public_key.pem");

ALIPAY_PUBLIC_KEY = FileUtil.readInputStream2String(((ClassPathResource) resource).getInputStream());

} catch (Exception e) {

e.printStackTrace();

}

}

private static AlipayClient alipayClient = null;

public static AlipayClient getAlipayClient() {

if (alipayClient == null) {

synchronized (AlipayUtil.class) {

if (null == alipayClient) {

alipayClient = new DefaultAlipayClient(URL, ALIPAY_APPID, APP_PRIVATE_KEY, FORMAT, CHARSET,

ALIPAY_PUBLIC_KEY, SIGN_TYPE);

}

}

}

return alipayClient;

}

/**

* 提现查询

*

* @throws AlipayApiException

*/

public static boolean queryTransfer(String out_biz_no) throws AlipayApiException {

AlipayFundTransOrderQueryRequest request = new AlipayFundTransOrderQueryRequest();

Map<String, Object> param = new HashMap<>();

param.put("out_biz_no", out_biz_no);

request.setBizContent(JSON.toJSONString(param));

AlipayFundTransOrderQueryResponse response;

response = AlipayUtil.getAlipayClient().execute(request);

if (response.isSuccess()) {

return true;

}

return false;

}

/**

* 提现的返回提示

*/

public static MessageBean alipaySubCode(String subCode) {

MessageBean returnMessage = new MessageBean();

returnMessage.setCode("000");

switch (subCode) {

default:

returnMessage.setMessage("系统繁忙,请稍后再试");

break;

case "PAYEE_ACC_OCUPIED":

returnMessage.setMessage("该手机号对应多个支付宝账户,请传入收款方姓名确定正确的收款账号");

break;

case "PERMIT_NON_BANK_LIMIT_PAYEE":

returnMessage.setMessage("请您登录支付宝站内或手机客户端完善身份信息后,重试。");

break;

case "EXCEED_LIMIT_PERSONAL_SM_AMOUNT":

returnMessage.setMessage("超出限额,单笔提现最多5万元。");

break;

case "EXCEED_LIMIT_ENT_SM_AMOUNT":

returnMessage.setMessage("超出限额,单笔提现最多10万元。");

break;

case "EXCEED_LIMIT_UNRN_DM_AMOUNT":

returnMessage.setMessage("您的账户未实名,单日最多可提现1000元。");

break;

case "PAYEE_USER_INFO_ERROR":

returnMessage.setMessage("支付宝账号和姓名不匹配,请确认姓名是否正确");

break;

}

return returnMessage;

}

}

2.service层

import java.util.Map;

import com.ssm.pojo.OrderInfoBean;

import com.ssm.pojo.RefundApplyBean;

/**

* @Title: AlipayService.java

* @Package com.ssm.service

* @Description:

* @author du

* @date 2018/1/13 15:08

*/

public interface AlipayService {

/**

* 支付下订单

* @param order

* @throws Exception

*/

public String orderPay(OrderInfoBean order) throws Exception;

/**

*

* @param map

* @throws Exception

* 商家交易编号

*/

public Map<String, Object> orderPayQuery(Map<String,Object> map) throws Exception;

/**

* 订单退款

*

* @param bean

* @throws Exception

*/

public String orderPayRefund(RefundApplyBean bean) throws Exception;

}

实现类

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

import com.alipay.api.response.AlipayTradeRefundResponse;

import com.ssm.dao.CarInfoDao;

import com.ssm.dao.UserDao;

import com.ssm.service.JpushService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSON;

import com.alipay.api.request.AlipayTradeAppPayRequest;

import com.alipay.api.request.AlipayTradeFastpayRefundQueryRequest;

import com.alipay.api.request.AlipayTradeQueryRequest;

import com.alipay.api.request.AlipayTradeRefundRequest;

import com.alipay.api.response.AlipayTradeAppPayResponse;

import com.alipay.api.response.AlipayTradeFastpayRefundQueryResponse;

import com.alipay.api.response.AlipayTradeQueryResponse;

import com.ssm.mobile.dao.OrderDao;

import com.ssm.mobile.dao.ProductDao;

import com.ssm.mobile.mapper.RefundApplyBeanMapper;

import com.ssm.mobile.service.AlipayService;

import com.ssm.pojo.OrderInfoBean;

import com.ssm.pojo.ProductInfoBean;

import com.ssm.pojo.RefundApplyBean;

import com.ssm.util.AlipayUtil;

import com.ssm.util.DatetimeUtil;

import com.ssm.util.PayUtil;

import com.ssm.util.TransUtil;

import javax.annotation.Resource;

@Service(value = "alipayService")

public class AlipayServiceImpl implements AlipayService {

@Autowired

private ProductDao productDao;

@Autowired

private OrderDao orderDao;

@Autowired

private RefundApplyBeanMapper refundApplyBeanMapper;

@Autowired

private UserDao userDao;

@Autowired

private JpushService jpushService;

@Autowired

private CarInfoDao carInfoDao;

/**

* 支付下订单

*/

@Override

public String orderPay(OrderInfoBean order) throws Exception {

AlipayTradeAppPayRequest requests = new AlipayTradeAppPayRequest();

Map<String, Object> param = new HashMap<>();

param.put("body", "xxx");

param.put("notify_url", AlipayUtil.notify_url);

param.put("out_trade_no", order.getOrderCode());

param.put("payment_type", 1);

param.put("product_code", "QUICK_MSECURITY_PAY");

param.put("subject", "xxx");

param.put("total_amount", order.getPrice());

param.put("timestamp", DatetimeUtil.formatDateTime(new Date()));

param.put("version", "1.0");

requests.setBizContent(JSON.toJSONString(param));

String orderStr = null;

AlipayTradeAppPayResponse response = AlipayUtil.getAlipayClient().sdkExecute(requests);

orderStr = response.getBody();

if (response.isSuccess()) {

order.setChargeChannel("alipay");

orderDao.updateOrder(TransUtil.transBean2Map(order));

}

//修改支付状态

param.clear();

param.put("orderId",order.getOrderId());

orderPayQuery(param);

return orderStr;

}

/**

* 退款

*/

@Override

public String orderPayRefund(RefundApplyBean bean) throws Exception {

String refundStr = null;

OrderInfoBean orderBean = new OrderInfoBean();

orderBean.setOrderId(bean.getOrderId());

Map<String, Object> orderMap = orderDao.getOrderById(TransUtil.transBean2Map(orderBean));

String orderId = orderMap.get("orderId").toString();

// 退款

AlipayTradeRefundRequest alipayRequest = new AlipayTradeRefundRequest();

Map<String, Object> param = new HashMap<>();

param.put("out_trade_no", orderMap.get("orderCode"));

param.put("refund_amount", bean.getApplyAmount());

param.put("refund_reason", bean.getApplyReason());

param.put("out_request_no", PayUtil.getRefundNo());

alipayRequest.setBizContent(JSON.toJSONString(param));

AlipayTradeRefundResponse refundResponse= AlipayUtil.getAlipayClient().execute(alipayRequest);

//用户ID

String userId = orderMap.get("receiverId").toString();

//查詢退款

AlipayTradeFastpayRefundQueryRequest alipayRequests = new AlipayTradeFastpayRefundQueryRequest();

String out_request_no = param.get("out_request_no").toString();

param.clear();

param.put("out_trade_no", orderMap.get("orderCode"));

param.put("out_request_no", out_request_no);

alipayRequests.setBizContent(JSON.toJSONString(param));

AlipayTradeFastpayRefundQueryResponse response = AlipayUtil.getAlipayClient().execute(alipayRequests);

if (refundResponse.isSuccess() && response.isSuccess()) {

param.clear();

param.put("refundState", "2");

param.put("orderId", orderId);

orderDao.updateOrder(param);

// 退款交易账户表

RefundApplyBean rfb = new RefundApplyBean();

rfb.setApplyId(Integer.valueOf(bean.getApplyId()));

rfb.setApplyCreatTime(DatetimeUtil.formatDateTime(new Date()));

rfb.setApplyStatus("2");

refundApplyBeanMapper.updateByPrimaryKey(rfb);

// TODO ali退款,推送,新消息类型

String text="尊敬的用户,您于"+rfb.getApplyCreatTime()+"申请的退款,申请单号为"+bean.getApplyId()+"退款成功,请查看您的个人账户";

String exId =2+"_"+ userId;

Map mapUser=userDao.getUserByPrimaryKey(userId);

String driverName= mapUser.get("loginName").toString();

String driverTel= mapUser.get("tel").toString();

jpushService.pushMessage(userId, "", "新消息", "退款成功", "退款成功", text, exId, "", "");

// TODO 给货主推送,新消息类型

//用户ID

String productId=orderMap.get("productId").toString();

ProductInfoBean productInfoBean=new ProductInfoBean();

productInfoBean.setProductId(productId);

Map<String,Object> productMap=productDao.getProductById(TransUtil.transBean2Map(productInfoBean));

String productUserId=productMap.get("userId").toString();

String exIdP =2+"_"+ productUserId;

String textP="尊敬的用户,您发布的订单号为"+productMap.get("productId").toString()+"的订单,于"+rfb.getApplyCreatTime()+",用户:"+driverName+",电话("+driverTel+")已经退款,请悉知.";

jpushService.pushMessage(productUserId, "", "新消息", "已退款","已退款成功", textP, exIdP, "", "");

} else {

if("ACQ.TRADE_STATUS_ERROR".equals(refundResponse.getSubCode())){

refundStr="您的订单已全额退款";

}else{

refundStr = "系统繁忙,请稍后再试";

}

}

return refundStr;

}

/**

* 支付订单查询

*/

@Override

public Map<String, Object> orderPayQuery(Map<String, Object> map) throws Exception {

AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();

// 只需要传入业务参数

Map<String, Object> param = new HashMap<String, Object>();

Map<String, Object> orderMap = orderDao.getOrderById(map);

param.put("out_trade_no", orderMap.get("orderCode").toString());

alipayRequest.setBizContent(JSON.toJSONString(param));

map.remove("orderId");

map.put("productId", orderMap.get("productId").toString());

Map<String, Object> productMap=productDao.getProductById(map);

String orderId = orderMap.get("orderId").toString();

String userId=productMap.get("userId").toString();

String receiverId=orderMap.get("receiverId").toString();

param.clear();

param.put("carId",orderMap.get("carId").toString());

Map<String,Object> carInfoBean=carInfoDao.getCarById(param);

String carPan=carInfoBean.get("licensePlate").toString();

String carModel=carInfoBean.get("carModel").toString();

Map<String, Object> userBean=userDao.getUserByPrimaryKey(receiverId);

String driveTel=userBean.get("tel").toString();

String driveName=userBean.get("loginName").toString();

String text="尊敬的用户,您于"+productMap.get("createTime")+"发布的订单为"+orderMap.get("productId")+"的订单交易成功,请联系"+driveName+"("+driveTel+"车牌:"+carPan+"车型:"+carModel+")"+"确认装车";

// 返回提交支付宝订单交易查询信息

Map<String, String> restmap = new HashMap<String, String>();

// 查询状态

boolean flag = false;

AlipayTradeQueryResponse alipayResponse = AlipayUtil.getAlipayClient().execute(alipayRequest);

if (alipayResponse.isSuccess()) {

// 调用成功,则处理业务逻辑

if ("10000".equals(alipayResponse.getCode())) {

// 订单创建成功

flag = true;

restmap.put("order_no", alipayResponse.getOutTradeNo());

restmap.put("trade_no", alipayResponse.getTradeNo());

restmap.put("buyer_logon_id", alipayResponse.getBuyerLogonId());

restmap.put("trade_status", alipayResponse.getTradeStatus());

}

if ("TRADE_SUCCESS".equals(alipayResponse.getTradeStatus())){

param.clear();

param.put("paidState", "1");

param.put("orderId", orderId);

orderDao.updateOrder(param);

// TODO 推送,通知类型,跳转消息页面

String exId =2+"_"+ userId;

jpushService.pushMessage(userId, "", "通知", "用户已付款", "交易成功", text, exId, "", "");

}

}

if (flag) {

// 订单查询成功

param.clear();

param.put("data", restmap);

param.put("msg", "订单查询成功");

} else {

// 订单查询失败

param.clear();

param.put("msg", alipayResponse.getSubMsg());

}

return param;

}

}


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值