苹果支付验单java
苹果也需要请求苹果服务器去验单。前端会带回支付信息,包括加密数据
// 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相关推荐
- 苹果内购验证(熟称苹果支付回调)java版
简介: 苹果支付是直接由ios客户端调起苹果支付并支付完成后,java后台提供一个支付回调接口供ios客户端进行同步回调,只需要在该接口进行进行验证苹果支付是否支付成功,跟微信支付和支付宝支付不一样, ...
- PHP 苹果内购订阅验单函数,及其订阅回调处理案例
支付时拿到票据: <?php /*** POST验单curl* @param $post_data 请求参数['key'=>'value','keys'=>'values']* @p ...
- 苹果开发者账号购买或续费支付表单填写全记录purchase form
对于个人或公司苹果程序开发,要想将开发好的产品发布到APPStore上,则必须要购买苹果开发者账号.但是苹果官网并不支持国内的在线购买或续费服务,到支付这一步,会告诉我们下载一个苹果官方的支付单(PD ...
- 苹果IOS内购验单完整流程,in_app购买收据处理
// 收据格式处理val data = JsonObject()data.addProperty("receipt-data", receipt.replace(" &q ...
- java验证苹果支付收据
这是一篇文摘性文章. 验证苹果支付的代码 源自 方法一:使用HttpsURLConnection 响应速度比方法二快. public static JSONObject verifyReceipt1( ...
- java验证苹果支付收据(转载)
转自胖哥的整理,地址:http://blog.csdn.net/cnhome/article/details/79380557 苹果说明文档:https://developer.apple.com/l ...
- Java接入苹果支付 – IAP支付 – IOS应用内支付- 完整版
本页目录 IAP介绍 IAP参考连接 接入IAP快速导航: 准备工作 认证协议(签订银行信息) 设定商品价格 productId 上线设置 注册自己的沙箱账号: 添加沙箱账号 Java编码 大致编码如 ...
- java掉单_【Java】抄答案就是了,两套详细的设计方案,解决头疼的支付掉单问题...
Hello,大家好,我是楼下小黑哥~ 好久没写支付相关的文章了,今天继续从事老本行~ 上次在文章钱被扣走了,但是订单却未成功!支付掉单异常最全解决方案提到,支付过程会出现掉单.卡单的情况,这种情况对于 ...
- 苹果支付成功后,JAVA服务端二次验证
原理简述: 苹果客户端在完成应用购买,下单后支付,苹果后台会给客户端返回信息,用来验证支付结果: 客户端在拿到返回值后,将指定返回值,通过接口形式请求应用服务器,应用服务器根据这个值调用苹果服务器进行 ...
- 苹果支付验证回执单相关错误码
苹果支付错误码 类型: status 可能值 21000: 未使用HTTP POST请求方法向App Store发送请求. 21001: 此状态代码不再由App Store发送. 21002: rec ...
最新文章
- MLP多层感知机 学习笔记
- angular元素属性绑定_【Angular】表单
- 数据库之Oracle(二)
- iOS开发实战小知识点(五)——获取JS meta异常
- 马斯克怒删特斯拉和SpaceX脸书主页!硅谷二马恩怨再升级
- 快捷键截屏_Windows10自带截屏快捷键使用方法大全
- 回转体怎么划分六面体网格_一文了解ANSYS Meshing 高级网格划分技术
- leetcode之旋转链表
- openssh常用命令记录
- 为世界之光——交通大学校歌介绍
- 一篇讲完Java链表(单链表、循环链表和双向链表)
- react 脚手架配置代理
- 如何将ts文件转为mp4格式
- 草坪护理产品行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- Win7下安装XP(PE)
- esp32(ROS2foxy)之飞龙在天turtlesim最快能多快???
- ADC模数转换器 动态范围,精确度bit和分辨率最低辨别电压多少V
- 恢复桌面计算机图标不见了怎么办,桌面的图标不见了怎么恢复,桌面图标不见了怎么办...
- 重磅直播丨迈向移动数字金融 —— 神州信息并购云核网络线上发布会
- nus计算机和iss学院,走进新加坡国立大学系统科学院