當在app內支付購買後,appstore服務器不會主動通知app應用服務器購買的結果,此時須要咱們主動向appstore請求查詢訂單信息狀態,以處理購買後的相應發貨邏輯等。
java
蘋果響應數據實體類(帶上getter,setter):json
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; }
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 { //帳單無效 } }
版權聲明:本文爲博主原創文章,未經博主容許不得轉載。服務器