支付宝APP支付Java服务端

Java 发表评论

支付宝APP支付Java服务端:

   公司项目要求对接支付宝进行支付功能,这边做出整理方便以后使用(支付宝的支付对接还是很简单的)。

1):去支付宝开放平台,-1.注册账号,2.创建应用 3.配置应用 4.开启支付APP支付 5签约,在支付宝开放平台中跟着步骤走就可以完成的操作,为对接做准备工作。

2):上面几部操作完成之后前往 管理中心 查看你申请的应用的 AppID (建议在本地新建一个文档保存这些有用信息 )

      

3):设置私钥和公钥,点击下载:之后根据支付宝平台提供教程获取自己的私钥和公钥,获取之后保存到上面图片的地方

         配置应用公钥之后,支付宝会给你支付宝的公钥;

     注:1.应用私钥:用于请求支付宝数据加签

            2.应用公钥:用于提供给支付宝,让支付宝去拿着公钥获取你私钥加签后的数据;

            3.支付宝公钥:是用来接收支付宝回调信息的

 4):将这些有用信息保存到自己新建的文档中,方便开发使用。SDK下载,进入此页面找到javaSDK并下载保存。

         之后将所需jar包引入项目  如图:。

       

         一般是maven项目,可在网上百度:将jar引入本地maven仓库,并上传私服。这里就不做教程网上很多。

       做完这些之后,就只剩下代码了,相当简单。

 5):

//实例化客户端
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setBody("我是测试数据");
model.setSubject("App支付测试Java");
model.setOutTradeNo(outtradeno);
model.setTimeoutExpress("30m");
model.setTotalAmount("0.01");
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model);
request.setNotifyUrl("商户外网可以访问的异步地址");
try {
        //这里和普通的接口调用不同,使用的是sdkExecute
        AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
        System.out.println(response.getBody());//就是orderString 可以直接给客户端请求,无需再做处理。
    } catch (AlipayApiException e) {
        e.printStackTrace();
}

在这里我说个注意点(本人踩的坑):上面的demo是支付宝提供的demo,数据为死数据,当运行它之后,直接把返回结果给前端他们是可以唤起支付的,如果想要换成自己的数据,不能从参数中传值取值,只能是前端返回id之后再自己去查完添加model中。

   注:

APP_PRIVATE_KEY:为应用私钥。    ALIPAY_PUBLIC_KEY:为应用公钥。具体作用上面有解释。    CHARSET:可直接写成="UTF-8"

6):回调代码直接粘贴即可使用。

            注:回调地址拼接完成之后需要添加到 2):步骤下的那张图里    添加授权回调地址。

	@RequestMapping(value="notify",produces = {
	"application/json;charset=UTF-8" })
	@ResponseBody
	public String AliNotify(HttpServletRequest request)  {
		Map requestParams = request.getParameterMap();
		/*
		 * 获取支付宝返回信息
		 */
		try {
		HashMap<String, String> params = new HashMap<String, String>();
		for (Iterator 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] + ",";
			}
			if (name.equals("trade_status")) {
				System.out.println("交易状态为:"+valueStr);
			}
			params.put(name, valueStr);
		}
		logger.info("支付宝返回数据信息:"+params);
		//获取支付宝的通知返回参数
		    //商户订单号
		    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");
	        //买家登录支付宝id
	        String buyer_logon_id = new String(request.getParameter("buyer_logon_id").getBytes("ISO-8859-1"),"UTF-8");
	        //交易时间
	        String gmt_payment = new String(request.getParameter("gmt_payment").getBytes("ISO-8859-1"),"UTF-8");
	        //交易金额
	        String invoice_amount = new String(request.getParameter("invoice_amount").getBytes("ISO-8859-1"),"UTF-8");
	       
	        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	        Date date =null;
	        try {
	        	
	        	date =  format.parse(gmt_payment);
			} catch (Exception e) {
				// TODO: handle exception
			}  
	       
	      
		// poublicKey为应用公钥换取的支付宝公钥
		
			// 验证签名
			boolean b = AlipaySignature.rsaCheckV1(params, alipaypublicKey, "UTF-8");
			//验证通过
			if (b) {
				//交易状态为成功
				if ("TRADE_SUCCESS".equals(params.get("trade_status"))) {
					/*
					 * 支付成功后的业务逻辑以后应该写在这里。
					 * 将支付信息存根
					 */				
					 
					return "SUCCESS";
				} 
			
			}
			return "error:验证签名失败";
		} catch (Exception e) {
			// TODO: handle exception
			return "支付异常";
		}

到这里支付宝的支付集成,就算完成了。

发表评论

邮箱地址不会被公开。 必填项已用*标注

昵称 *