支付宝app支付完整流程 java

对接支付宝支付接口APP支付完整流程 java

参考文档:
支付宝api文档
支付宝官方demo

maven依赖

	<dependency>
		<groupId>com.alipay.sdk</groupId>
		<artifactId>alipay-sdk-java</artifactId>
		<version>4.13.58.ALL</version>
	</dependency>

服务端代码

统一下单

先看代码:

            String isopen = Global.getConfig("shop.pay.isopen");
            if (!isopen.equals("1")){
                throw new QyException("商户未开通支付宝支付");
            }
            String APP_ID = Global.getConfig("shop.pay.APP_ID");
            String PRIVATE_KEY = Global.getConfig("shop.pay.PRIVATE_KEY");
            String ALIPAY_PUBLIC_KEY = Global.getConfig("shop.pay.ALIPAY_PUBLIC_KEY");
            AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID,PRIVATE_KEY,"JSON","utf-8",ALIPAY_PUBLIC_KEY,"RSA2");
            AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
            request.setBizContent("{" +
                    "\"timeout_express\":\"90m\"," +
                    "\"total_amount\":\""+shopOrder.getPayPrice()+"\"," +
                    "\"product_code\":\"QUICK_MSECURITY_PAY\"," +
                    "\"subject\":\""+"订单支付"+"\"," +
                    "\"out_trade_no\":\""+shopOrder.getId()+"\"," +
                    "\"goods_type\":\"0\"," +
                    "\"enable_pay_channels\":\"pcredit,moneyFund,debitCardExpress\"," +
                    "  }");
            String url="http://" + reques.getServerName() //商户外网可以访问的异步地址
                    + ":"
                    + reques.getServerPort()           //端口号
                    + reques.getRequestURI();
            request.setNotifyUrl("http://"+reques.getServerName()+ ":"+ reques.getServerPort() +"/f/html/plug_shop/shopindex/requestAliPay");
            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);

            return response.getBody();//就是orderString 可以直接给客户端请求,无需再做处理。

支付宝支付回调

	/**
	 *  支付宝支付回调
	 */
	@RequestMapping(value = "/requestAliPay")
	@ResponseBody
	public String requestAliPay(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException, AlipayApiException, UnknownHostException {
		// 获取支付宝GET过来反馈信息
		System.out.println("支付宝回调");
		Map<String, String> params = new HashMap<String, String>();
		Map<String, String[]> requestParams = request.getParameterMap();
		for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
			String name = (String) iter.next();
			String[] values = (String[]) requestParams.get(name);
			String valueStr = "";
			for (int i = 0; i < values.length; i++) {
				valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
			}
			// 乱码解决,这段代码在出现乱码时使用
			valueStr = new String(valueStr.getBytes("utf-8"), "utf-8");
			params.put(name, valueStr);
		}
		String ALIPAY_PUBLIC_KEY = Global.getConfig("shop.pay.ALIPAY_PUBLIC_KEY");
		boolean signVerified = AlipaySignature.rsaCheckV1(params, ALIPAY_PUBLIC_KEY, "utf-8", "RSA2"); // 调用SDK验证签名
		//验证签名通过
		if(signVerified){
			// 商户订单号
			String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");

			// 支付宝交易号
			String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");

			// 付款金额
			String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"), "UTF-8");

			System.out.println("商户订单号="+out_trade_no);
			System.out.println("支付宝交易号="+trade_no);
			System.out.println("付款金额="+total_amount);
			//在这里处理自己的业务
			return renderResult(Global.TRUE, "支付成功");
		}else{
			return renderResult(Global.FALSE, "支付失败");
		}
	}

客户端代码

前端用的uni_app 直接调用uni_app的方法

		uni.requestPayment({
			provider: 'alipay',
			orderInfo: result.data, //微信、支付宝订单数据 【注意微信的订单信息,键值应该全部是小写,不能采用驼峰命名】
		   success: (res) => {
				this.interval = setInterval(() => {
					this.checkPayState();
					}, 1000);
				},
				
			
			fail: function (err) {
				console.log('fail:' + JSON.stringify(err));
			}
		});

可能对你有些帮助

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值