java -苹果支付凭证校验

流程:支付由IOS端发起支付,java后台只做支付凭证校验

 

	//苹果官网支付结果验证地址
	private String url = "https://buy.itunes.apple.com/verifyReceipt";
	//苹果官网支付结果验证地址(测试地址)
	private String testUrl = "https://sandbox.itunes.apple.com/verifyReceipt";

IOS支付完后会把支付凭证传到后台来,后台通过支付凭证进行支付结果校验 

	/**
	 * 获取支付结果
	 * mapJsonStr 支付凭证
	 */
	@SuppressWarnings("unchecked")
	public Map<String, String> getPayResult(String mapJsonStr){
		if(mapJsonStr == null){
			return null; //支付凭证为空
		}
		Map<String, String> resultDataMap = null;
		try{
			//根据支付凭证到官网查询支付结果
			String payResultStr = processPayment(url, mapJsonStr);

			if (payResultStr == null) {
				//数据异常,请稍后重试
				return null;
			}

			//解析苹果支付返回的参数信息
			Map<String, Object> payResultMap = JSON.parseObject(payResultStr, Map.class);
			log.info("解析苹果支付返回的参数信息 : " + payResultMap);
			Integer status = (Integer)payResultMap.get("status");//只有status ==0才是支付成功
			log.info("苹果支付返回状态 : " + status);
			if(null != status && status == 21007){
				//沙盒测试,调用沙盒测试地址去解析
				payResultStr = processPayment(testUrl, mapJsonStr);
				
				if (payResultStr == null) {
					//数据异常,请稍后重试
					return null;
				}
				//解析苹果支付返回的参数信息
				payResultMap = JSON.parseObject(payResultStr, Map.class);
				status = (Integer)payResultMap.get("status");//只有status ==0才是支付成功
			}
			if(null != status && status == 0){
				//支付成功
				//获取返回的信息
				String receipt = payResultMap.get("receipt") + "";
				if(payResultStr != null){
					resultDataMap = JSON.parseObject(receipt, Map.class);
				}
			}		
		}catch(Exception e){
			e.printStackTrace();
			log.error("getPayResult()"+e.getMessage());
		}
		return resultDataMap;
	}
	/**
	 * 根据支付凭证到官网查询支付结果
	 * @param url
	 * @param receipt
	 * @return
	 * @throws SystemException
	 */
	public String processPayment(String url, String receipt)
			throws SystemException {
		String result = "";
		OutputStreamWriter outputStreamWriter = null;
		BufferedReader reader = null;
		
		try {
			URL urlcon = new URL(url);
			HttpURLConnection conn = (HttpsURLConnection) urlcon.openConnection();
			conn.setRequestMethod("POST");
			conn.setDoOutput(true);
			outputStreamWriter = new OutputStreamWriter(conn.getOutputStream());
			outputStreamWriter.write(receipt);
			outputStreamWriter.flush();
			reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			String temp = reader.readLine();
			while (temp != null) {
				if (result != null){
					result += temp;
				}else{
					result = temp;
				}
				temp = reader.readLine();
			}
		}catch (ProtocolException e3) {
			e3.printStackTrace();
		}catch (MalformedURLException e2) {
			e2.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				if(null != outputStreamWriter){
					outputStreamWriter.close();
				}
				if(null != reader){
					reader.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return result;
	}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zengsange

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值