支付宝第三方支付java服务器端代码

这几天公司做支付系统,以前在的公司是已经写好的,直接调用,这个要从头写,可把我愁的,暂时只完成了一部分,先记录了下来,因本人水平有限,以下代码可能存在错误,请多多指教.

先说流程,公司做的是app.就拿安卓来举例了.
⒈用户在客户机上点击购买XXX;
⒉安卓端拿着当前的商品信息,请求公司的服务器;
⒊后端收到购买请求,将订单存到数据库,并使用阿里的类库,将这些数据加密,生成一个字符串订单,返回给安卓;
⒋安卓拿到后端生成的加密信息,请求支付宝.等待用户付款;
⒌此时如果支付成功,支付宝会请求公司服务器的一个接口(这个接口在生成订单的时候写在加密的数据中);
⒍公司服务器收到支付宝的请求,将数据解密,验证,做各种判断,确定为真实信息之后,查询数据库里,和当前信息对应的订单,然后将其状态修改为已支付;
⒍安卓端接收到支付宝app交易成功的提示之后,去公司后端服务器查询;

此时不管是否付款成功,一次调用支付宝支付的流程就结束了,下面上代码;
//这里为了方便理解,不接收请求数据,数据全部写死在了方法里.
@RequestMapping("/aliPay.do")
public void aliPayInfo(HttpServletRequest request, HttpServletResponse response) {
// 这里先生成一个单号,我随便生成了;
String outTradeNo = TokenAndUUID.generateUUID();

	// 实例化客户端,里面的部分参数,在支付宝的开发者平台获取
	AlipayClient alipayClient = new DefaultAlipayClient(URL, APPID, RSA_PRIVATE_KEY, FORMAT, CHARSET,
			ALIPAY_PUBLIC_KEY, SIGN_TYPE);
	// 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口为alipay.trade.app.pay
	AlipayTradeAppPayRequest requestR = new AlipayTradeAppPayRequest();
	AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();

	model.setBody("购买0.01元服务");
	model.setSubject("充值0.011元到-XXXXXXXX公司");//这一行,用户是能看到的;
	model.setOutTradeNo(outTradeNo);// 单号
	model.setTimeoutExpress("30m");// 30分钟过期
	model.setTotalAmount("0.01"); //扣款的金额,支付宝会自动让用户付0.01元
	model.setProductCode("QUICK_MSECURITY_PAY");
	requestR.setBizModel(model);

	//如果支付成功了,支付宝会请求这个接口,这是我们公司的服务器外网地址,接口myPay.do
	requestR.setNotifyUrl("https://www.xxxxx.net/myPay.do");
	// 这个接口我还没写好,我暂时是使用阿里提供的一个查询接口.来确定订单是否支付成功;

	String orderStr = "";

	try {
		// 这里和普通的接口调用不同,使用的是sdkExecute
		AlipayTradeAppPayResponse response1 = alipayClient.sdkExecute(requestR);
		orderStr = response1.getBody();
		System.out.println(orderStr); //将这个字符串发送给安卓端,订单请求就结束了;
	} catch (AlipayApiException e) {
		e.printStackTrace();
	}
	System.out.println(orderStr);
	}

//--------------------------------以上就是订单的生成,下面是查询接口,可以知道这笔订单是否成功--------------------
//看网上说,我们应该是根据支付宝请求我们的接口里面携带的数据,来判断请求是否成功的,因为我还没完全写好,就先把通过阿里提供的查询接口,来确定付款是否成功了.

// 支付宝的查询接口,查询一个订单是否付款
@RequestMapping("/selectPay.do")
public void selectPay(HttpServletRequest req, HttpServletResponse resp) throws AlipayApiException {

	AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APPID,
			RSA_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); // 获得初始化的AlipayClient
	AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();// 创建API对应的request类
	request.setBizContent("{" + "   \"out_trade_no\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxx\","
			+ "   \"trade_no\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"" + "  }");// 这两个"xxx",一个是安卓端付款成功之后,支付宝返回的数据
																			//一个是你自己生成的订单,复制进来就可以查询了
	AlipayTradeQueryResponse response = alipayClient.execute(request);// 通过alipayClient调用API,获得对应的response类

	System.out.print(response.getTradeStatus());
	
	// 这里已经获取到是否成功付款了,,自己拿着数据解析,处理就是了
	try {
		resp.getWriter().print(response.getBody());
	} catch (IOException e) {
		e.printStackTrace();
	}
}

猜你喜欢

转载自blog.csdn.net/qq_43081517/article/details/86569204
今日推荐