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

编程入门 行业动态 更新时间:2024-10-28 08:17:44

java<a href=https://www.elefans.com/category/jswz/34/1767806.html style=支付宝支付开发(沙箱模拟)"/>

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");//订单名称,必填 --此处设为订单idString 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域中取值,并将请求中的参数转换为MapMap<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支付,那么你就直接返回那个字符串就好了,如果想自动执行接下来的操作,还可以继续进行业务逻辑操作!
参考链接:

问题:
支付宝付款成功后无法回调:
修改方法请求都为POST,然后确定你的noticeUrl没有空格特殊字符

仅仅是作为初学者的个人记录,感谢你又花了五分钟听我瞎白活了一顿!如果对你有帮助,那更是太棒了!
我是一个致力于成为菜鸡水军的一个假的开发程序员,如果你喜欢,记得一起交朋友哦!
嗷呜~~~~~~~~~~~~~~~
等等,等等等等,等等等等等等等等等~~~~~~~~~~~~
再见!大锅锅,大解解,小迪迪,小妹没!

更多推荐

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

本文发布于:2024-02-12 00:39:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1684661.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:支付宝   java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!