加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Verify an App Store Transaction Receipt 【苹果服务端 验证一

发布时间:2020-12-17 01:18:31 所属栏目:安全 来源:网络整理
导读:? 1、?从Transaction 的TransactionReceipt属性中得到接收的数据,并以base64编码; 2、创建JSON对象,字典格式,单键值对,键名为“receiptdata”,值为上一次编码的数据,效果: {"receipt-data":"base64编码之后的数据"} 3、发送HTTP POST请求,将数据发

?

1、?从Transaction 的TransactionReceipt属性中得到接收的数据,并以base64编码;

2、创建JSON对象,字典格式,单键值对,键名为“receiptdata”,值为上一次编码的数据,效果:

{"receipt-data":"base64编码之后的数据"}

3、发送HTTP POST请求,将数据发送到App Store?,其地址为:https://buy.itunes.apple.com/verifyReceipt

4、App Store的返回值也是一个JSON格式对象,包括两个键值对:

{
"status" : 0,
"receipt" : { … }
}
说明:

如果status的值为0,就说明该receipt为有效的,否则就是无效的。

 

public int verifyReceipt( byte[] receipt) {
       int status = -1;

        //This is the URL of the REST webservice in iTunes App Store
        URL url = new URL("https://buy.itunes.apple.com/verifyReceipt");

        //make connection,use post mode
        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        connection.setDoOutput(true);
        connection.setAllowUserInteraction(false);

        //Encode the binary receipt data into Base 64
        //Here I'm using org.apache.commons.codec.binary.Base64 as an encoder,since commons-codec is already in Grails classpath
        Base64 encoder = new Base64();
        String encodedReceipt = new String(encoder.encode(receipt));

        //Create a JSON query object
        //Here I'm using Grails' org.codehaus.groovy.grails.web.json.JSONObject
        Map map = new HashMap();
        map.put("receipt-data",encodedReceipt);
        JSONObject jsonObject = new JSONObject(map);

        //Write the JSON query object to the connection output stream
        PrintStream ps = new PrintStream(connection.getOutputStream());
        ps.print(jsonObject.toString());
        ps.close();

        //Call the service
        BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        //Extract response
        String str;
        StringBuffer sb = new StringBuffer();
        while ((str = br.readLine()) != null) {
            sb.append(str);
            sb.append("/n");
        }
        br.close();
        String response = sb.toString();

        //Deserialize response
        JSONObject result = new JSONObject(response);
       status = result.getInt("status");
        if (status == 0) {
            //provide content
        } else {
            //signal error,throw an exception,do your stuff honey!
        }

        return status ;


    }


?

?

验证的方式也可以采用HTTP协议:HttpClient,下载httpcomponents-client,然后导入lib里的几个jar包。

这也是一种方式,不再进行多余的说明了。所谓条条道路通“苹果”。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读