Java實現的蘋果IAP二次驗證主要邏輯
一:客戶端(iphone or ipad)向Apple SERVER傳送購買請求
二:AppleSERVER返回購買成功的receipt(IAP在購買流程中,會給每一次購買行為建立一個SKPaymentTransaction,這個transaction會記錄使用者購買狀態,如:
正在購買(SKPaymentTransactionStatePurchasing),
已購買(SKPaymentTransactionStatePurchased),
購買失敗(SKPaymentTransactionStateFailed)。
而當transaction狀態是 SKPaymentTransactionStatePurchased
{
"receipt-data"
: "(編碼後的資料)"
}
四、將此Json 經HTTP POST的請求,將資料傳送到App Store,其地址為:
https://buy.itunes.apple.com/verifyReceipt (正式購買地址)
https://sandbox.itunes.apple.com/verifyReceipt (測試資料地址)
五、App Store的返回值也是一個JSON格式的物件,包含兩個鍵值對, status和receipt:
{
"status"
: 0, (驗證狀態碼,0標識通過,21007 標識此資料為測試資料,需交由sandbox進行再次驗證)
"receipt"
: {提交的資料解析為明文返回}
}
/**
*
*@PackageName service
*@FileName IapSecondaryVerifyService.java
*@Author Albert
*@Time 2014-4-28下午2:04:39
*@Description IAP二次驗證
*/
@Service("iapSecondaryVerifyService")
public class IapSecondaryVerifyService {
private final Logger LOGGER = Logger.getLogger(IapSecondaryVerifyService.class);
Map verifyResultMap = new HashMap();
String result = "";
String returnresult="";
String verifyStatus=null;
//所有的驗證都進入這個方法
public synchronized Map getSecondaryVerify(String requestJson) throws Exception{
if(requestJson != "" || requestJson !=null){
URL dataUrl = new URL("https://buy.itunes.apple.com/verifyReceipt");
HttpURLConnection con = (HttpURLConnection) dataUrl.openConnection();
//設定請求頭資訊
con.setRequestMethod("POST");
con.setRequestProperty("content-type", "text/json");
con.setRequestProperty("Proxy-Connection", "Keep-Alive");
con.setDoOutput(true);
con.setDoInput(true);
OutputStreamWriter out =new OutputStreamWriter(con.getOutputStream());
String str= String.format(Locale.CHINA,"{\"receipt-data\":\""+requestJson+"\"}");
LOGGER.info(str);
out.write(str);
out.flush();
out.close();
InputStream is = con.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(is));
String line = null;
while((line = reader.readLine()) != null){
result+= line+"\r\n";
}
org.json.JSONObject j;
try{
j = new org.json.JSONObject(result);
returnresult = j.get("status").toString();
if(returnresult.equals("0")){
verifyResultMap.put("verfyStatus", 0);
verifyResultMap.put("receipt", j.get("receipt"));
}else if(returnresult.equals("21007")){
sandboxUrl(requestJson);
}else if(returnresult.equals("21002")){
verifyResultMap.put("verfyStatus",-6L);
verifyResultMap.put("receipt", j.get("receipt"));
}
else{
verifyResultMap.put("verfyStatus", Long.valueOf(returnresult));
verifyResultMap.put("receipt", j.get("receipt"));
}
}catch(Exception e){
LOGGER.info("接收返回型別:"+e.getMessage());
}
}
return verifyResultMap;
}
public void sandboxUrl(String requestJson) {
try {
URL dataUrl = new URL("https://sandbox.itunes.apple.com/verifyReceipt");
HttpURLConnection con = (HttpURLConnection) dataUrl.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("content-type", "text/json");
con.setRequestProperty("Proxy-Connection", "Keep-Alive");
//con.setRequestProperty("receipt-data", receipt);
con.setDoOutput(true);
con.setDoInput(true);
OutputStreamWriter out =new OutputStreamWriter(con.getOutputStream());
String str2= String.format(Locale.CHINA,"{\"receipt-data\":\""+requestJson+"\"}");
out.write(str2);
out.flush();
out.close();
InputStream is = con.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(is));
String line = null;
while((line = reader.readLine()) != null){
result+= line+"\r\n";
}
org.json.JSONObject j;
j = new org.json.JSONObject(result);
returnresult = j.get("status").toString();
if(returnresult.equals("0")){
verifyResultMap.put("verfyStatus", 0);
verifyResultMap.put("receipt", j.get("receipt"));
}else{
verifyResultMap.put("verfyStatus", Long.valueOf(returnresult));
verifyResultMap.put("receipt", null);
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
相關推薦
Java實現的蘋果IAP二次驗證主要邏輯
蘋果IAP二次驗證流程為:一:客戶端(iphone or ipad)向Apple SERVER傳送購買請求 二:AppleSERVER返回購買成功的receipt(IAP在購買流程中,會給每一次購買行為建立一個SKPaymentTransaction,這個transacti
java實現解一元n次多項式(二)
package commonAlgorithm; public class PolynomialSoluter { private double[][] matrix; private double[] result; private
IOS內購伺服器二次驗證 JAVA版
String itunes_request = ""; itunes_request = Https.sendPost("https://buy.itunes.apple.com/verifyReceipt", "{\"receipt-data\":\"" + app_r
PHP處理蘋果APP內購後到服務端的二次驗證(專案經驗)
一、蘋果APP支付到服務端驗證流程1. 使用者在app中點選購買;2. app呼叫服務端介面生成訂單;3. app獲取到服務端訂單生成成功後彈出支付視窗;4. 使用者輸入密碼支付;5. app接收支付後apple應用商店返回的支付憑證;6. app將支付憑證傳回伺服器,呼叫伺
Unity內IAP支付二次驗證/伺服器驗證————最白話,手把手教你做系列。
之前的一篇寫了Unity支付的IAP支付接入。 後來就出現了一些問題,資料統計的時候出現大量購買訂單。但是實際上賬戶的錢卻沒有增加。@¥……&¥……*@¥&@初步判定可能存在部分使用者通過其他渠道刷單的現象,然後才有以下操作,驗證使用者的訂單是
數據結構之中序遍歷轉興許遍歷(JAVA實現)(二)
百度 empty 表達 pty 中序 tor opera lin sem 算法流程: 主要分為四步: 1.當前字符為數字或者字母,則直接輸出 2.當前字符為)。則在棧中匹配輸出。一直匹配到),則停止輸出(就是將)及其
spring-eureka 源碼解讀----作為集群的eureka怎麽樣實現不做二次傳播
rem spa time pri sre str 二次 boolean word 在平時工作中,eureka作為一個集群時候,我們會配置多個peer ,假設當前有服務器eureka-A,eureka-B,eureka-C。 如果Eureka A的peer指向了B, B的pe
使用Google身份驗證進行ssh二次驗證
Google身份驗證什麽是谷歌身份驗證器谷歌身份驗證器,即Google Authenticator(Google身份驗證器)v2.33 谷歌推出的一款動態口令工具,解決大家的google賬戶遭到惡意攻擊的問題。特點1、透過QR圖碼自動設定2、支持多個賬戶3、支援多種語言開始動手1、編輯/etc/selinux
如何在火幣網綁定谷歌二次驗證碼
如果 -a 生成 輸入 href 忘記 方法 註意 二次 1.IOS用戶和安卓用戶都可以使用微信小程序,安卓手機也可以添加到桌面上。 IOS使用方法,打開微信點擊“發現”—“小程序” 如圖: 安卓使用方法一,打開微信點擊“發現”—“小程序” 如圖:
gmail二次驗證碼具有哪些方面的優勢
多數人肯定對驗證碼還是非常熟悉的,日常我們都是直接使用到手機驗證碼,這樣所有的賬戶繫結手機即可,我們需要登入的時候也要更加簡單一些。不過很多朋友還是會使用到gmail二次驗證碼,其實這樣的驗證碼也已經存在了很長的時間,確實其實用性還是非常強的,而且現在也是越來越受歡迎。那麼為什麼其受歡迎程度如此之高?這類二次
如何在火幣網繫結谷歌二次驗證碼
1.IOS使用者和安卓使用者都可以使用微信小程式,安卓手機也可以新增到桌面上。 IOS使用方法,開啟微信點選“發現”—“小程式” 如圖: 安卓使用方法一,開啟微信點選“發現”—“小程式” 如圖:
二次驗證碼在微信中是如何進行使用的
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px "Helvetica Neue" } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; f
JAVA實現QRCode的二維碼生成以及列印(轉)
不說廢話了直接上程式碼 注意使用QRCode是需要zxing的核心jar包,這裡給大家提供下載地址 https://download.csdn.net/download/dsn727455218/10515340 下載 1.二維碼的工具類 public class QR_Cod
java實現的一些二叉樹演算法
二叉堆 == 完全二叉樹 二叉堆滿足二個特性: 1.父結點的鍵值總是大於或等於(小於或等於)任何一個子節點的鍵值。 2.每個結點的左子樹和右子樹都是一個二叉堆(都是最大堆或最小堆)。 當父結點的鍵值總是大於或等於任何一個子節點的鍵值時為最大堆。當父結點的鍵值總是小於或等於任何一個
取消google二次驗證碼要怎麼進行處理
我們之所以設定好Google的二次驗證碼,都是為了能夠保證安全性,但是也有一些朋友覺的操作太麻煩,不想用了,所以大家肯定也想要知道取消google二次驗證碼小程式的方法。本身這樣的驗證碼都是為了保護好賬戶,所以取消肯定也是要按照一定的流程來完成。下面就來簡單為大家介紹一下具體
Java實現表單登陸及驗證
Java實現登陸及驗證 前端程式碼 前端程式碼只是一個表單隨意就好具體樣式看個人愛好 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8"&
[連載]《C#通訊(串列埠和網路)框架的設計與實現》- 12.二次開發及應用
目 錄 第十二章 二次開發及應用... 2 12.1 專案配製... 3 12.2 引用相關元件... 4 12.3 構建主程式... 5 12.4 裝置驅動的開發... 6 12.4.1 假定通訊協議...
必須知道的八大種排序演算法【java實現】(二) 選擇排序,插入排序,希爾演算法【詳解】
一、選擇排序 1、基本思想:在要排序的一組數中,選出最小的一個數與第一個位置的數交換;然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後一個數比較為止。 2、例項 3、演算法實現 /** * 選擇排序演算法 * 在未
Java實現掃碼二維碼下載app流程
1.先生成一個二維碼(二維碼裡面包含了下載的地址資訊,推薦用二維碼裡面包含是過濾器網站,安全),在草料網https://cli.im/ 進行生成,這裡我們生成網址 2.生成後就可以下載,然後放到你的網址上,供掃碼下載app(在跳轉過濾器中間設定識別ios跟Android等裝
java實現qq郵箱傳送註冊驗證碼
import javax.mail.*; import javax.mail.internet.MimeMessage;/** * * @param email 傳送郵箱驗證碼(註冊) * @return 驗證碼給前段 */ @RequestMapping(valu