java支付宝支付开发(沙箱模拟)

记录一下第一次做支付宝开发!
环境:
PC端的支付已经有人做完了,我是参考PC支付做App支付的!

1,支付宝开放平台登录,进入"开发者中心",找到沙箱环境!为了方便将沙箱url贴下!
支付宝沙箱链接
2,下载"支付宝开发平台开发助手"用来生成公钥私钥!
在这里插入图片描述
在这里插入图片描述
点击生成对应的密钥
应用私钥: 用户签名的密钥
在这里插入图片描述
支付宝公钥:复制生成的应用公钥在沙箱应用中粘贴到应用公钥中,然后生成支付宝公钥,保存支付宝公钥!
也就是说 ,下图1(支付宝开发助手exe中)生成之后粘贴到图2(网页沙箱环境中)中,然后会生成图3((网页沙箱环境中生成需要保存的公钥)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结来说,通过exe支付宝应用助手,配置沙箱环境,获得其APPID、网关、应用私钥,支付宝公钥,以及应用公钥;
在这里插入图片描述
之后最好配置一个单独的类来记录保存这个数据,我这里是都存在了数据库中,启动获取;
在这里插入图片描述
在这里插入图片描述
3,配置好之后就可以进行支付宝开发了!是不是很快呀!
这里主要是为了初始化链接支付宝的客户端,注意你的APPID,公钥私钥等数据的正确性;
在这里插入图片描述

AlipayClient alipayClient =new  DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id,
					AlipayConfig.rsa_private_key, AlipayConfig.FORMAT,AlipayConfig.charset,
					AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
			AlipayTradeAppPayRequest alipayTradeAppPayRequest = new AlipayTradeAppPayRequest();
			AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();

添加支付宝支付成功之后回调你后台的方法,LZ这里当时还出现个小问题,就是支付成功之后支付宝无法回调定义的方法,记录为"支付宝付款成功后无法回调"下文做解释处理!

alipayTradeAppPayRequest.setNotifyUrl(AlipayConfig.notify_url_app);        //异步回调地址(后台)

在这里插入图片描述
这里是处理传递给支付宝的参数,订单号以及商品的一些信息,其中使用的order就是本项目中我的商品的信息,for循环是因为一个订单可以有多种商品;

String out_trade_no = new String(order.getOrderNo().getBytes("ISO-8859-1"),"UTF-8");
			//付款金额,必填
			String total_amount = new String(order.getDiscountOrderPrice().toString().getBytes("ISO-8859-1"),"UTF-8");
			//订单名称,必填 --此处设为订单id
			String subject = new String(order.getId().getBytes("ISO-8859-1"),"UTF-8");
			//销售产品码(固定值),必填
			String productCode = new String("FAST_INSTANT_TRADE_PAY".getBytes("ISO-8859-1"),"UTF-8");

			String body = order.getOrderNo() ;
			List<OrderDetail> orderDetailList= orderDetailService.queryByOrderNo(order.getOrderNo());
			for (OrderDetail orderDetail : orderDetailList) {
				body += ":" + orderDetail.getSku()
						+ "-" + orderDetail.getGoodsName()
						+ "-" + orderDetail.getNums()
						+ "-" + orderDetail.getDiscountPrice() + ";";
			}
			body = new String(body.getBytes("ISO-8859-1"),"UTF-8");

			model.setOutTradeNo(out_trade_no);           //商户订单号,必填
			model.setProductCode(productCode);        	  //销售产品码(固定值),必填
			model.setTotalAmount(total_amount);         //支付金额,必填
			model.setSubject(subject);                 //商户订单名称,必填
			model.setBody(body);                    //商品描述,可空,对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
			alipayTradeAppPayRequest.setBizModel(model);

上边的所有操作都是为了拼参数拼数据,现在拼好了,就可以发出请求了!

AlipayTradeAppPayResponse alipayTradePagePayResponse = alipayClient.sdkExecute(alipayTradeAppPayRequest);

这样就已经把请求发给支付宝了,他会返回给你一个字符串,app通过这个串的信息,调用支付宝进行支付!

if(alipayTradePagePayResponse.isSuccess()){
				String resultString = alipayTradePagePayResponse.getBody(); //就是orderString 可以直接给APP请求,无需再做处理。
				return resultString
			}

这样子,前台就可以调用支付宝进行支付了,这时候你肯定会想成功了,我怎么改变订单支付状态呀!还记得之前配置的noticeUrl就是支付宝回调你的方法,现在知道了吧!
你可以在这个回调方法中进行判断是否订单成功支付,或者说余额是不是不够支付失败,都可以获取到,然后进行对应的修改订单状态操作!

4,支付宝回调方法:
1,从request中获取参数;

//1.从支付宝回调的request域中取值,并将请求中的参数转换为Map
		Map<String, String> paramsMap = AliXMLUtil.convertRequestParamsToMap(request);

2,进行验签;

boolean isSignVerified = alipayService.isSignVerified(paramsMap);
			if (isSignVerified) {
				//验签成功,进行业务处理
				//从paramsMap中获取支付宝传递过来的参数,如"app_id","gmt_create(交易创建时间)","out_trade_no(传递给支付宝订单号)"等参数
				//然后根据trade_status判断交易状态,根据交易状态来进行你对应的操作(WAIT_BUYER_PAY >> 交易创建并等待买家付款  ||  TRADE_SUCCESS  >> 交易成功)
				
			}
public boolean isSignVerified(Map<String, String> conversionParams) throws Exception{
		//logger.info("==================支付宝异步请求验签");
		//签名验证(对支付宝返回的数据验证,确定是支付宝返回的)
	    boolean signVerified = false;  	 
	    try {  
	        //调用SDK验证签名
	        signVerified = AlipaySignature.rsaCheckV1(conversionParams, AlipayConfig.alipay_public_key, AlipayConfig.charset, AlipayConfig.sign_type); 
	    } catch (AlipayApiException e) {  
	    	//logger.info("==================验签失败 !");	
	        e.printStackTrace(); 
	    }  
	    return signVerified;
	}

结束语:
这样子,支付宝的简单交易就结束了,不得不佩服支付宝交易竟然给开发节省了太多的东西,只需要管理自己的业务处理就好,剩下的包括回调通知,都想到了,很周全!
而我感觉App调用支付宝支付对比于PC网页调用支付宝支付,最大的区别就是:
App使用 AlipayTradeAppPayRequest创建request请求,执行请求使用sdkExecute()来发出请求!
而PC使用AlipayTradePagePayRequest,执行使用pageExecute()来发出请求!
app关键在于你返回的字符串,用来唤醒支付宝支付!
网页其实也是,但是网页可以进行跳转链接,网页登录,当然不要害怕,这些支付宝也已经做好了!你所需要做的,和app开发差不了多少!
请求发出之后,支付宝返回给你所有的状态,并且调用你定义的响应通知url,相当于我把参数和响应方法给你,你处理完之后调用我给你得响应方法,而且你得携带着交易的很多信息参数供我查看详情!
简单的一来一回,确实很强!
还有就是,如果你app想直接调用支付宝app支付,那么你就直接返回那个字符串就好了,如果想自动执行接下来的操作,还可以继续进行业务逻辑操作!
参考链接:
https://opendocs.alipay.com/open/204/105465
https://www.jianshu.com/p/c92b82c94289

问题:
支付宝付款成功后无法回调:
修改方法请求都为POST,然后确定你的noticeUrl没有空格特殊字符
在这里插入图片描述
仅仅是作为初学者的个人记录,感谢你又花了五分钟听我瞎白活了一顿!如果对你有帮助,那更是太棒了!
我是一个致力于成为菜鸡水军的一个假的开发程序员,如果你喜欢,记得一起交朋友哦!
嗷呜~~~~~~~~~~~~~~~
等等,等等等等,等等等等等等等等等~~~~~~~~~~~~
再见!大锅锅,大解解,小迪迪,小妹没!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值