对接支付宝支付通道接口

最近公司接的项目到了后期,我负责结算这块对接了支付宝和微信的支付通道,支付宝接口比微信调起来舒服的多

首先商户在蚂蚁金服开发平台申请开发权限,配好密钥下载支付宝工具jar包,然后对接相应的接口

这几个都是固定的

//请求地址
private static String URL = "https://openapi.alipay.com/gateway.do";

//支付宝分配给开发者的应用ID
private static String APP_ID = ""; 

//编码格式
private static String CHARSET = "utf-8"; 

//私钥
private static String APP_PRIVATE_KEY =""; 

//支付宝公钥
private static String ALIPAY_PUBLIC_KEY =""; 

static AlipayClient alipayClient = new DefaultAlipayClient(URL,APP_ID,APP_PRIVATE_KEY,"json",CHARSET,ALIPAY_PUBLIC_KEY,"RSA2");

电脑网站支付接口 传入订单号和金额就行

public void transferpay(HttpServletRequest httpRequest,
HttpServletResponse httpResponse) throws ServletException, IOException {
String out_trade_no = httpRequest.getParameter(“out_trade_no”);//订单编号
String total_amount = httpRequest.getParameter(“total_amount”);//订单金额
String return_url = “”;//成功页面
return_url = “http://testwww”;
Map<String, String> map1 = new LinkedHashMap<String, String>();
//商户订单号,64个字符以内、可包含字母、数字、下划线
map1.put(“out_trade_no”, out_trade_no);
//销售产品码,与支付宝签约的产品码名称。 注:目前仅支持FAST_INSTANT_TRADE_PAY
map1.put(“product_code”, “FAST_INSTANT_TRADE_PAY”);
// 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]
map1.put(“total_amount”, total_amount);
// 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]
map1.put(“subject”, “商品订单”);
//该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。
map1.put(“timeout_express”, “5m”);
//编码格式gbk,RSA2签名算法
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();//创建API对应的request
String json = JsonUtil.map2Json(map1);
alipayRequest.setReturnUrl(return_url);
//回调地址 支付宝服务器主动通知商户服务器里指定的页面http/https路径。建议商户使用https
alipayRequest.setNotifyUrl(“http://testwww”);//在公共参数中设置回跳和通知地址
alipayRequest.setBizContent(json);
String form="";
try {
form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单
httpRequest.setAttribute(“result”,form);
httpRequest.setAttribute(“retCode”,0000);
httpRequest.setAttribute(“msg”,“订单生成成功”);
} catch (AlipayApiException e) {
httpRequest.setAttribute(“retCcode”,0001);
httpRequest.setAttribute(“retMsg”,“订单生成失败”);
e.printStackTrace();
}
System.out.println(“form:”+form);
httpResponse.setContentType(“text/html;charset=” + CHARSET);
httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面
httpResponse.getWriter().flush();
httpResponse.getWriter().close();
}
APP支付接口

public @ResponseBody String apppay(HttpServletRequest httpRequest,
HttpServletResponse httpResponse) throws ServletException, IOException {
Map<String, String> map = new HashMap<String, String>();
String out_trade_no = httpRequest.getParameter(“out_trade_no”);
String total_amount = httpRequest.getParameter(“total_amount”);

	if(StringUtils.isEmpty(out_trade_no)) {
		return "请选择订单号";
	}
	if(StringUtils.isEmpty(total_amount)) {
		return "请选择订单金额";
	}else{
		total_amount = StringUtil.parseAmountLong2Str(Long.parseLong(total_amount));
	}
	//编码格式gbk,RSA2签名算法
	AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();//创建API对应的request
	//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式
    AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
    // 订单标题
    model.setSubject("app订单");
	//商户订单号,64个字符以内、可包含字母、数字、下划线
    model.setOutTradeNo(out_trade_no);
	//该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
    //model.setTimeoutExpress("5m");
	// 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]
    model.setTotalAmount(total_amount);
	//销售产品码,与支付宝签约的产品码名称。 注:目前仅支持FAST_INSTANT_TRADE_PAY
    model.setProductCode("QUICK_MSECURITY_PAY");
	request.setBizModel(model);
	request.setNotifyUrl("http://testwww");
	String orderString="";
	
	try {
		 // 这里和普通的接口调用不同,使用的是sdkExecute
		AlipayTradeAppPayResponse response  = alipayClient.sdkExecute(request); //返回支付宝订单信息(预处理)
		orderString = response.getBody();//就是orderString 可以直接给APP请求,无需再做处理。
		map.put("retCode","0000");
		map.put("retMsg","订单生成成功");
		map.put("state",orderString);
		
	} catch (AlipayApiException e) {
		map.put("retCode","0001");
		map.put("retMsg","订单生成失败");
		e.printStackTrace();
	}
	String json = JsonUtil.map2Json(map);
	logger.info("orderString:"+orderString);	
	return json;
}

支付异步回调接口

public Map<String, String> paymentNotify(HttpServletRequest httpRequest) throws ServletException, IOException {
logger.info(“支付宝订单支付异步回调”);
Map<String, String> map = new LinkedHashMap<String, String>();
Map<String, String> params = convertRequestParamsToMap(httpRequest); // 将异步通知中收到的待验证所有参数都存放到map中
logger.info(“订单信息:”+params.toString());
String out_trade_no = httpRequest.getParameter(“out_trade_no”);//商户订单号
String trade_no = httpRequest.getParameter(“trade_no”);//支付宝流水号
String seller_id = httpRequest.getParameter(“seller_id”);//支付宝唯一用户号
String timestamp = httpRequest.getParameter(“timestamp”);//时间
String code = httpRequest.getParameter(“code”);//返回码
String msg = httpRequest.getParameter(“msg”);//处理结果的描述,信息来自于code返回结果的描述
String trade_status = httpRequest.getParameter(“trade_status”);//TRADE_SUCCESS成功支付
map.put(“out_trade_no”, out_trade_no);
map.put(“trade_no”, trade_no);
map.put(“seller_id”, seller_id);
map.put(“timestamp”, timestamp);
map.put(“code”, code);
map.put(“msg”, msg);
if(trade_status.equals(“TRADE_SUCCESS”)){//支付成功
//修改支付记录支付状态
}
logger.info(“订单信息:”+map.toString());
return map;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值