苹果也需要请求苹果服务器去验单。前端会带回支付信息,包括加密数据

// 0 校验成功// 21000 App Store不能读取你提供的JSON对象// 21002 receipt-data域的数据有问题// 21003 receipt无法通过验证// 21004 提供的shared secret不匹配你账号中的shared secret// 21005 receipt服务器当前不可用// 21006 receipt合法,但是订阅已过期。服务器接收到这个状态码时,receipt数据仍然会解码并一起发送// 21007 receipt是Sandbox receipt,但却发送至生产系统的验证服务// 21008 receipt是生产receipt,但却发送至Sandbox环境的验证服务private String validate(GameCallbackInfo info, boolean isSand) {String receipt = info.getIosInfo().getReceiptData();String url = null;if (isSand) {url = appleSandboxUrl;} else {url = appleValidateUrl;}// 发送的数据String receiptJson = "{\"receipt-data\":\"" + receipt + "\"}";// 执行三次int flag = 0;String transaction_id = null;String product_id = null;while (flag++ < 3) {String callbackInfo=null;try {callbackInfo= DoPostUtils.doPost2(url,receiptJson);}catch (Exception e){}//         String  callbackInfo=HttpUtils.postJSON(url, receiptJson);/*如果出现连接断开把订单记录*/try {if (null==callbackInfo){String sql="INSERT INTO pay_erro( platformOrder, paymoney, rmoney, errmsg, code, creatime) VALUES (?, ?, ?, ?, '2', NOW())";dao.update(sql,new Object[]{info.getPlatformOrder(),"","","连接苹果出现异常,可进行查单补发"});}}catch (Exception e){e.printStackTrace();}JSONObject obj = JSONUtils.parseObject(callbackInfo);if (null != obj) {int status = (int) obj.get("status");flag = 3;if (status == 0) {JSONObject content = obj.getJSONObject("receipt");System.out.println("苹果返回"+obj);// 返回是一个商品列表JSONArray arr = content.getJSONArray("in_app");for (int i = 0; i <arr.size() ; i++) {content = arr.getJSONObject(i);transaction_id = content.getString("transaction_id");if(info.getIosInfo().getTransactionId().equals(transaction_id)){product_id = content.getString("product_id");break;}}break;}log.error("支付错误码:" + status);break;}try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}// 商品IDif(null == product_id){log.error("商品Id为空"+info.getPlatformOrder());try {String sql="INSERT INTO pay_erro( platformOrder, paymoney, rmoney, errmsg, code, creatime) VALUES (?, ?, ?, ?, '0', NOW())";dao.update(sql,new Object[]{info.getPlatformOrder(),"","","商品Id为空"});}catch (Exception e){e.printStackTrace();}return null;}Game game = gamePropertiesService.getGame(info.getGameId());Map<String, Integer> products = game.getIos().getProducts();Integer money = products.get(product_id);if(null == money){System.out.println("订单号[%s]不存在的商品ID[%s]"+info.getPlatformOrder()+product_id);log.error("订单号[%s]不存在的商品ID[%s]"+info.getPlatformOrder()+product_id);try {String sql="INSERT INTO pay_erro( platformOrder, paymoney, rmoney, errmsg, code, creatime) VALUES (?, ?, ?, ?, '0', NOW())";dao.update(sql,new Object[]{info.getPlatformOrder(),"","","订单号不存在的商品ID"});}catch (Exception e){e.printStackTrace();}return null;}// 单位 分if(money != info.getMoney()){log.error("价格不一致"+info.getPlatformOrder()+"商品Id"+product_id+"苹果支付金额"+money+"平台支付金额"+info.getMoney());try {String sql="INSERT INTO pay_erro( platformOrder, paymoney, rmoney, errmsg, code, creatime) VALUES (?, ?, ?, ?, '0', NOW())";dao.update(sql,new Object[]{info.getPlatformOrder(),info.getMoney(),money,"价格不一致"});}catch (Exception e){e.printStackTrace();}return null;}return transaction_id;}

需要注意点。苹果刷单严重,所以苹果订单,自己的平台需要验证唯一性

苹果支付验单java相关推荐

  1. 苹果内购验证(熟称苹果支付回调)java版

    简介: 苹果支付是直接由ios客户端调起苹果支付并支付完成后,java后台提供一个支付回调接口供ios客户端进行同步回调,只需要在该接口进行进行验证苹果支付是否支付成功,跟微信支付和支付宝支付不一样, ...

  2. PHP 苹果内购订阅验单函数,及其订阅回调处理案例

    支付时拿到票据: <?php /*** POST验单curl* @param $post_data 请求参数['key'=>'value','keys'=>'values']* @p ...

  3. 苹果开发者账号购买或续费支付表单填写全记录purchase form

    对于个人或公司苹果程序开发,要想将开发好的产品发布到APPStore上,则必须要购买苹果开发者账号.但是苹果官网并不支持国内的在线购买或续费服务,到支付这一步,会告诉我们下载一个苹果官方的支付单(PD ...

  4. 苹果IOS内购验单完整流程,in_app购买收据处理

    // 收据格式处理val data = JsonObject()data.addProperty("receipt-data", receipt.replace(" &q ...

  5. java验证苹果支付收据

    这是一篇文摘性文章. 验证苹果支付的代码 源自 方法一:使用HttpsURLConnection 响应速度比方法二快. public static JSONObject verifyReceipt1( ...

  6. java验证苹果支付收据(转载)

    转自胖哥的整理,地址:http://blog.csdn.net/cnhome/article/details/79380557 苹果说明文档:https://developer.apple.com/l ...

  7. Java接入苹果支付 – IAP支付 – IOS应用内支付- 完整版

    本页目录 IAP介绍 IAP参考连接 接入IAP快速导航: 准备工作 认证协议(签订银行信息) 设定商品价格 productId 上线设置 注册自己的沙箱账号: 添加沙箱账号 Java编码 大致编码如 ...

  8. java掉单_【Java】抄答案就是了,两套详细的设计方案,解决头疼的支付掉单问题...

    Hello,大家好,我是楼下小黑哥~ 好久没写支付相关的文章了,今天继续从事老本行~ 上次在文章钱被扣走了,但是订单却未成功!支付掉单异常最全解决方案提到,支付过程会出现掉单.卡单的情况,这种情况对于 ...

  9. 苹果支付成功后,JAVA服务端二次验证

    原理简述: 苹果客户端在完成应用购买,下单后支付,苹果后台会给客户端返回信息,用来验证支付结果: 客户端在拿到返回值后,将指定返回值,通过接口形式请求应用服务器,应用服务器根据这个值调用苹果服务器进行 ...

  10. 苹果支付验证回执单相关错误码

    苹果支付错误码 类型: status 可能值 21000: 未使用HTTP POST请求方法向App Store发送请求. 21001: 此状态代码不再由App Store发送. 21002: rec ...

最新文章

  1. MLP多层感知机 学习笔记
  2. angular元素属性绑定_【Angular】表单
  3. 数据库之Oracle(二)
  4. iOS开发实战小知识点(五)——获取JS meta异常
  5. 马斯克怒删特斯拉和SpaceX脸书主页!硅谷二马恩怨再升级
  6. 快捷键截屏_Windows10自带截屏快捷键使用方法大全
  7. 回转体怎么划分六面体网格_一文了解ANSYS Meshing 高级网格划分技术
  8. leetcode之旋转链表
  9. openssh常用命令记录
  10. 为世界之光——交通大学校歌介绍
  11. 一篇讲完Java链表(单链表、循环链表和双向链表)
  12. react 脚手架配置代理
  13. 如何将ts文件转为mp4格式
  14. 草坪护理产品行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  15. Win7下安装XP(PE)
  16. esp32(ROS2foxy)之飞龙在天turtlesim最快能多快???
  17. ADC模数转换器 动态范围,精确度bit和分辨率最低辨别电压多少V
  18. 恢复桌面计算机图标不见了怎么办,桌面的图标不见了怎么恢复,桌面图标不见了怎么办...
  19. 重磅直播丨迈向移动数字金融 —— 神州信息并购云核网络线上发布会
  20. nus计算机和iss学院,走进新加坡国立大学系统科学院

热门文章

  1. html如何插入一张图片,html如何插入图片
  2. Win10下用Strokeit的方法
  3. stata01 - stata基础
  4. 率土之滨服务器维修,率土之滨征服赛季合服与转服功能详解
  5. 我认为还算经典的语录
  6. 快速将视频分解成一帧帧的图片
  7. pytorch下可训练分段函数的写法
  8. 万字文肝Python基础知识
  9. Linux系统中CPU占用率较高问题排查思路与解决方法
  10. Android修改浏览器书签和主页