苹果AppStore In-app purchase 内付费验证代码
2015-09-01 00:00
543 查看
当在app内支付购买后,appstore服务器不会主动通知app应用服务器购买的结果,此时需要我们主动向appstore请求查询订单信息状态,以处理购买后的相应发货逻辑等。
苹果响应数据实体类(带上getter,setter):
苹果服务器验证订单代码:
TEST:
版权声明:本文为博主原创文章,未经博主允许不得转载。
苹果响应数据实体类(带上getter,setter):
public class AppStoreBuyEntity { private String original_purchase_date_pst; private String purchase_date_ms; private String unique_identifier; private String original_transaction_id; private String bvrs; private String transaction_id; private String quantity; private String unique_vendor_identifier; private String item_id; private String product_id; private String purchase_date; private String original_purchase_date; private String purchase_date_pst; private String bid; private String original_purchase_date_ms; private int status; }
苹果服务器验证订单代码:
/** * 苹果服务器验证 * @param receipt 账单 */ public static String buyAppVerify(String receipt) { //测试url private static final String url_verify = "https://sandbox.itunes.apple.com/verifyReceipt"; //正式url //private static final String url_verify="https://buy.itunes.apple.com/verifyReceipt"; BufferedOutputStream hurlBufOus = null; InputStream is = null; BufferedReader reader = null; HttpsURLConnection conn = null; try { SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom()); URL console = new URL(url_verify); conn = (HttpsURLConnection) console.openConnection(); conn.setSSLSocketFactory(sc.getSocketFactory()); conn.setHostnameVerifier(new TrustAnyHostnameVerifier()); conn.setRequestMethod("POST"); conn.setRequestProperty("content-type", "text/json"); conn.setRequestProperty("Proxy-Connection", "Keep-Alive"); conn.setDoInput(true); conn.setDoOutput(true); hurlBufOus = new BufferedOutputStream(conn.getOutputStream()); String str = String.format(Locale.CHINA, "{\"receipt-data\":\"" + receipt+ "\"}"); hurlBufOus.write(str.getBytes()); hurlBufOus.flush(); is = conn.getInputStream(); reader = new BufferedReader(new InputStreamReader(is)); String line = null; StringBuffer sb = new StringBuffer(); while ((line = reader.readLine()) != null) { sb.append(line); } return sb.toString(); } catch (Exception ex) { logger.error("-----> post to appstore error", ex); } finally { try { if(null != is) { is.close(); } if(null != hurlBufOus) { hurlBufOus.close(); } if(null != reader) { reader.close(); } } catch (Exception e) { logger.error(e); } } return null; }
TEST:
public static void main(String[] args) { // 即receipt String buyCode = ""; String result = AppStorePayVerify.buyAppVerify(buyCode); JSONObject job = JSONObject.fromObject(result); String states=job.getString("status"); if(states.equals("0")) { //验证成功 String json = job.getString("receipt"); System.out.println(json); try { AppStoreBuyEntity vo = (AppStoreBuyEntity) Util.decodeJson(json, AppStoreBuyEntity.class); System.out.println(vo.getBid()); System.out.println(vo.getBvrs()); System.out.println(vo.getItem_id()); System.out.println(vo.getOriginal_purchase_date()); System.out.println(vo.getOriginal_purchase_date_ms()); System.out.println(vo.getOriginal_purchase_date_pst()); System.out.println(vo.getOriginal_transaction_id()); System.out.println(vo.getProduct_id()); System.out.println(vo.getPurchase_date()); System.out.println(vo.getPurchase_date_ms()); System.out.println(vo.getPurchase_date_pst()); System.out.println(vo.getQuantity()); System.out.println(vo.getTransaction_id()); System.out.println(vo.getUnique_identifier()); System.out.println(vo.getUnique_vendor_identifier()); } catch (Exception e) { e.printStackTrace(); }// 反序列化 } else { //账单无效 } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- 调研---采购
- 苹果App Store应用程序的下载链接地址
- APP快速通过苹果AppStore审核九大诀窍
- IOS内购支付服务器验证模式
- 苹果AppStore In-app purchase 内付费验证代码
- 苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程(精)
- APP被苹果APPStore拒绝的各种原因
- checkio的日子(2)
- iOS应用内付费实践
- 使用Parse内付费服务出现的Error Domain=Parse Code=146 "The operation couldn’t be completed.
- 怎样使用Purchase Order Change Suggestion
- In-App Purchase
- GoolePlay 充值 OAuth 2.0 后端验证
- MVC之服务器端验证
- 苹果Appstore加急审核方法
- 早上刚出的Apple警告邮件·介绍一下JSPatch技术
- 京城游戏人-Day11: Unity 中实现 IAP 内购(内付费)
- 微信开发踩坑之旅 之 开发准备及服务器配置
- Android 如何让EditText不自动获取焦点
- iOS开发之XMPP开发环境的配置