流程:支付由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;}

java -苹果支付凭证校验相关推荐

  1. JBPM流程部署校验之java利用XSD校验XML

    JBPM流程定义校验之java利用XSD校验XML 上篇我们学习了在.net中怎样利用XSD来验证xml,今天我们来看一下在java中怎样实现利用xsd来校验xml! /**  *   */ pack ...

  2. java输出结果校验_2. Bean Validation声明式校验方法的参数、返回值

    你必须非常努力,才能干起来毫不费力.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习. ✍前言 ...

  3. 计算机毕业设计Java苹果酒店住房管理(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java苹果酒店住房管理(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java苹果酒店住房管理(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S架构 ...

  4. java 实体字段校验@Valid - @NotNull @NotEmpty @NotBlank - ValidExceptionHandler

    java 实体字段校验@NotNull @NotEmpty @NotBlank 注意在使用 @NotBlank 等注解时,一定要和 @valid 一起使用,否则 @NotBlank 不起作用. 1.@ ...

  5. CRC查表法——表的由来及Java实现CRC8校验算法

    转载请标明出处: http://blog.csdn.net/xx326664162/article/details/51718857 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定 ...

  6. java偶校验计算代码_191120_02 Java常用加密校验转换算法汇总

    Java常用加密校验转换算法汇总 作者:邵发 官网:http://afanihao.cn/java 本文是Java学习指南系列教程的官方配套文档.内容介绍Java里的常用算法的使用,包含转换Hex / ...

  7. java中注解动态传参_Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)...

    Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)java 前言:因为前段时间忙于写接口,在接口中须要作不少的参数校验,本着简洁.高效的原则,便写了这个小工具供本身使 ...

  8. Java实现CRC16校验算法

    本文主要记录java版的crc校验算法,顺带贴上c的crc校验函数 先上c的校验函数,本文java版的校验就是根据此函数而来的,希望能帮到大家 当时开发时通过一个在线检验工具辅助开发的.工具链接戳我 ...

  9. java 文件md5校验_Java 获取 文件md5校验码

    讯雷下载的核心思想是校验文件的md5值,两个文件若md5相同则为同一文件. 当得到用户下载某个文件的请求后它根据数据库中保留的文件md5比对出拥有此文件的url, 将用户请求挂接到此url上并仿造一个 ...

最新文章

  1. 美通信与动力公司向WIN-T军事通信计划提供支持
  2. android如何添加gif,Android加载Gif和ImageView的通用解决方案:android-gif-drawable(1)...
  3. mac photoshop install无法安装_MAC安装应用报错:无法打开或文件损坏的处理方法~...
  4. Direct2D的使用
  5. Win7安装OnlyOffice(不使用Docker)
  6. docker 安装 oracle12,Centos7下利用docker安装oracle12c
  7. 谷歌开源文件访问漏洞审计工具 PathAuditor(详解)
  8. 一步一步学Silverlight 2系列(5):实现简单的拖放功能_转载
  9. 如何通过提前Bake Docker镜像加快基础设施的启动速度
  10. 木兰宽松许可证(MulanPSL v2)解析
  11. 如何把qq挂到云服务器,云服务器挂QQ软件常用方法和注意问题
  12. 实现财务自由 之 不可不知的常用财务网站或应用软件
  13. Spark2.1.1中用各种模式运行计算圆周率的官方Demo
  14. sam-ba_2.15 使用usb Device 连接AT91SAM9261EK开发板
  15. cim系统(cim系统包含哪些部分)
  16. tibco往服务器发消息,Tibco EMS 初级使用方法小结
  17. Python 给视频添加水印
  18. c语言画板,简单的像素画板(C语言编写)
  19. Win11和Win10怎么禁用驱动程序强制签名? 关闭Windows系统驱动强制签名的技巧?
  20. 马克思主义理论-资本主义的发展及趋势

热门文章

  1. Swagger2学习笔记
  2. Java案例--减肥计划
  3. [BUUCTF]PWN——[HarekazeCTF2019]baby_rop2
  4. mysql和oracle复杂查询语句_oracle表复杂查询
  5. 智能家居前装好还是后装好?哪个才是全屋智能更好的选择?
  6. LabwindowsCVI 串口编程及事例
  7. 三维图像专业处理软件Dragonfly 应用-如何计算面孔隙率
  8. Spring+SpringMVC+Mybatis分布式敏捷开发系统架构(附源码)
  9. 基于微信小程序的教务管理系统(教务管理小程序)
  10. 使用spotify的docker-maven-plugin插件将SpringBoot项目打包为Docker镜像