支付宝支付,支付宝手机网页支付

1.首先你需要与支付宝的蚂蚁金服建立合作关系然后进入开放平台



2.在开放平台中建立你的应用,我这里的应用已经创建好了,就不在演示了,这个也比较简单



3.在应用中添加你需要的功能,注意:添加的功能必须是审核通过的或者不需要审核可以直接使用的。下面是我的应用需要的功能。



4.设置应用相关配置信息。注明:如果你不开发小程序或者生活号可以不设置授权回调地址。


5.接下来是代码实现。

        private final String APP_ID = "xxxxx"; //你创建的应用APPID
	private final String APP_PRIVATE_KEY = "xxxx"; //你的应用的私钥 
	private final String CHARSET = "UTF-8"; 
	private final String ALIPAY_PUBLIC_KEY = "xxxx"; //支付宝公钥
	private final String SIGN_TYPE = "RSA2";  //加密方式
	
       
        //第一步,启动支付收银台,页面由支付宝SDK输出已定好的页面代码
	@RequestMapping(value = "/doPayPage")
	public void doPayPage(HttpServletResponse httpResponse,@RequestParam String total_amount,@RequestParam String mark, String clubId) throws AlipayApiException, IOException {
		AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE); //获得初始化的AlipayClient
		AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的request
		alipayRequest.setReturnUrl("http://zyl.xxxxx.cn/zyl/jsp/integral_recharge.jsp");//回跳地址
		alipayRequest.setNotifyUrl("http://zyl.xxxxx.cn/zyl/alipay/callBack.do");//通知地址
		String passback_params = getLoginUser().getId() + "&" + mark;
		if(null != clubId && !"".equals(clubId)) {
			passback_params += clubId;
		}
		String content = "{" +
				"    \"out_trade_no\":\""+System.currentTimeMillis()+"\"," +
				"    \"total_amount\":0.01," +
				"    \"subject\":\"zyl\"," +
				"     \"passback_params\":"+passback_params+""+
				"  }";
		alipayRequest.setBizContent(content);//填充业务参数
	
		String form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单
		httpResponse.setContentType("text/html;charset=" + CHARSET);
		httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面
		httpResponse.getWriter().flush();
	}


	/** 此接口为上面第一步,通知回调地址请求接口,次接口支付宝会将支付结果反馈的次接口,通过此接口可知道支付是否完成
	 * @param total_amount 订单金额
	 * @param trade_no 支付宝交易号
	 * @param subject 订单标题
	 * @param sign_type 签名类型
	 * @param trade_status 交易状态 [WAIT_BUYER_PAY 交易创建,等待买家付款;
	 * 							TRADE_CLOSED 未付款交易超时关闭,或支付完成后全额退款;
	 *							TRADE_SUCCESS 交易支付成功;
	 * 							TRADE_FINISHED 交易结束,不可退款]
	 * @param sign 签名
	 * @param app_id 开发者的app_id
	 * @param notify_time 通知时间
	 * @param notify_id 通知校验ID
	 * @param out_trade_no 商户订单号
	 * @param buyer_id 买家支付宝用户号 ( 说明:买家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字,如:2088102122524333)
	 * @param buyer_logon_id 买家支付宝账号 (说明:买家支付宝账号,如:15901825620)
	 * @param receipt_amount 实收金额
	 * @param buyer_pay_amount 付款金额
	 * @param gmt_payment 交易付款时间
	 * @throws IOException 
	 */
	@RequestMapping(value = "/callBack",method = RequestMethod.POST)
	public void callBack(HttpServletRequest request,HttpServletResponse response) throws IOException{
		Map<?, ?> paramsMap = request.getParameterMap();
		Map<String, String> map = null;
		if(null != paramsMap){
			System.out.println("##################打印参数开始###########################");
//			String str = "";
			map = new HashMap<String, String>();
			
			for (Object key : paramsMap.keySet()) {
				map.put((String) key, request.getParameter(key.toString()));
				System.out.println(key+":"+request.getParameter(key.toString()));
//				String as = key+"="+request.getParameter(key.toString());
//				str += as +"&";
			}
//			System.out.println("##################parms>"+str+"############################");
			System.out.println("##################打印参数结束############################");
			
			try {
				boolean signVerified = AlipaySignature.rsaCheckV1(map, ZFB_PUBLI_KEY, CHARSET, SIGN_TYPE); //调用SDK验证签名
				if(signVerified){
					// TODO 验签成功后,按照支付结果异步通知中的描述,对支付结果中的业务内容进行二次校验,校验成功后在response中返回success并继续商户自身业务处理,校验失败返回failure
					String trade_status = map.get("trade_status");
					String total_amount = map.get("total_amount"); //订单金额
					String trade_no = map.get("trade_no"); //支付宝交易号
					String app_id = map.get("app_id");
					String out_trade_no = map.get("out_trade_no"); //商户订单号
					String buyer_logon_id = map.get("buyer_logon_id"); //买家支付宝账号
					String buyer_pay_amount = map.get("buyer_pay_amount"); //付款金额
					String gmt_create = map.get("gmt_create"); //交易创建时间
					String gmt_payment = map.get("gmt_payment"); //交易付款时间
					String notify_id = map.get("notify_id"); //通知校验ID
					
					String passback_params = map.get("passback_params");
					String[] myselfParams = passback_params.split("&");
					int userId = Integer.valueOf(myselfParams[0]);
					
					//此处做你的相应的业务逻辑处理
					
					response.getWriter().println("success");
					return;
					
				}
				else
				{
					// TODO 验签失败则记录异常日志,并在response中返回failure.
					response.getWriter().println("failure");
					return ;
				}
			} catch (Exception e) {
				e.printStackTrace();
				response.getWriter().println("failure");
				return ;
			}
		}
		response.getWriter().println("failure");
	}
	
希望对有需要的人,能够提供帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值