欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-11 13:47:39
...

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");
	}
	
希望对有需要的人,能够提供帮助。