文档章节

ios 内购买 Java服务器后端实现

 小程哥
发布于 2017/01/20 10:46
字数 630
阅读 50
收藏 0

流程

后台需要为app提供服务,在ios中,app内进行支付购买时需要进行二次验证

用户进入购买虚拟物品页面,App从后台服务器获取产品列表然后显示给用户
用户点击购买购买某一个虚拟物品,APP就发送该虚拟物品的productionIdentifier到Apple服务器
Apple服务器根据APP发送过来的productionIdentifier返回相应的物品的信息(描述,价格等)
用户点击确认键购买该物品,购买请求发送到Apple服务器
Apple服务器完成购买后,返回用户一个完成购买的凭证
APP发送这个凭证到后台服务器验证
后台服务器把这个凭证发送到Apple验证,Apple返回一个字段给后台服务器表明该凭证是否有效
后台服务器把验证结果在发送到APP,APP根据验证结果做相应的处理

1.需要一个申请苹果开发者账号

2.绑定银行卡

设置完成以后

3.建一个沙箱测试号

 

 

 

Java端 服务器二次验证实现,下面是实现代码

public class ApplePey {
    
    public static final ApplePey ME = new ApplePey();
    
    private ApplePey() {
    }
    
    //购买凭证验证地址
    private static final String VERIFY_ADDRESS = "https://buy.itunes.apple.com/verifyReceipt";
    
    //测试的购买凭证验证地址 
    private static final String VERIFY_ADDRESS_TEST = "https://sandbox.itunes.apple.com/verifyReceipt";
    
    /**
     * 重写X509TrustManager
     */
    private static TrustManager myX509TrustManager = new X509TrustManager() {
        
        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
        
        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        
        }
        
        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        
        }
    };
    
    /**
     * 接收iOS端发过来的购买凭证<BR>
     * create time 2016年11月19日 下午5:33:39
     * 
     * @param receipt 收据凭证
     * @param address 地址
     * @return Str 苹果返回的订单信息
     */
    public String iapCertificate(String receipt) {
        boolean address = false;
        if (StringUtils.isEmpty(receipt)) {
            return null;
        }
        
        String url = null;
        
        // 获得测试地址
        url = address == true ? VERIFY_ADDRESS : VERIFY_ADDRESS_TEST;
        final String certificateCode = receipt;
        
        if (StringUtils.isNotEmpty(certificateCode)) {
            return sendHttpsCoon(url, certificateCode);
        } else {
            return null;
        }
    }
    
    /**
     * 发送请求<BR>
     * create time 2016年11月19日 下午5:32:09
     * 
     * @param url 地址
     * @param certificateCode 需要验证订单
     * @return Str 订单信息
     */
    private String sendHttpsCoon(String url, String certificateCode) {
        if (url.isEmpty()) {
            return null;
        }
        try {
            // 设置SSLContext
            SSLContext ssl = SSLContext.getInstance("SSL");
            ssl.init(null, new TrustManager[] {myX509TrustManager}, null);
            
            // 打开连接
            HttpsURLConnection conn = (HttpsURLConnection) new URL(url).openConnection();
            
            // 设置套接工厂
            conn.setSSLSocketFactory(ssl.getSocketFactory());
            
            // 加入数据
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            conn.setRequestProperty("Content-type", "application/json");
            
            // 设置Josn格式
            JSONObject obj = new JSONObject();
            obj.put("receipt-data", certificateCode);
            
            BufferedOutputStream buffOutStr = new BufferedOutputStream(conn.getOutputStream());
            buffOutStr.write(obj.toString().getBytes());
            buffOutStr.flush();
            buffOutStr.close();
            
            // 获取输入流
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            
            String line = null;
            StringBuffer stringBuffer = new StringBuffer();
            while ((line = reader.readLine()) != null) {
                stringBuffer.append(line);
            }
            return stringBuffer.toString();
            
        } catch (Exception e) {
            return null;
        }
        
    }
    

 

 

 

 

© 著作权归作者所有

粉丝 0
博文 1
码字总数 630
作品 0
深圳
程序员
私信 提问
C、C++、Java、JavaScript、PHP、Python分别用来开发什么?

C、C++、Java、JavaScript、PHP、Python分别用来开发什么? 2018-05-25 11:47编辑: 游星啊分类:程序人生来源:代码湾 开发程序人生C 招聘信息: C++工程师 Cocos2d-x游戏客户端开发 iOS开发...

游星啊
2018/05/25
0
0
5 款用来开发 iOS 应用的 Java 开源工具

苹果iOS系统的封闭性一直广为其他语言(如Java)开发者诟病,但随着第三方工具的不断壮大,开发人员逐渐摆脱政策束缚,开始使用自己熟悉的语言来编写iOS本地应用,或将其他平台上的应用移植到...

oschina
2013/03/29
7.4K
15
迈绝伦团队工作汇总

项目负责人:余志恒 up_java后台:每日维护及解决up小助手遇到的问题 mz_java后台:解决根据不同的销售状态进行查询 bwk后台:配置服务器 项目负责人:季景胜 up_Android:服务器地址更改,版...

风化的骆驼
2016/11/21
1
0
请不要说自己是 Java 程序员

几年前 Reddit 上有个关于招聘的笑话: 英文的玩笑,用中文看有点不太容易懂。它的意思就是一个关于 Python(蟒蛇)经验只有三周前去过一次动物园的程序员,只要他足够的好,他也可以用一周的...

Yunba
2015/03/11
3.9K
19
怎么在ios进行rsa公钥加密,java做rsa私钥解密

需求是这样的: 密钥对通过java生成; IOS进行rsa公钥加密生成密文; JAVA后台对密文做秘钥解密验证; JAVA生成的公钥给到IOS,IOS能进行rsa加密吗?如何实现

刘成万
2016/06/14
592
3

没有更多内容

加载失败,请刷新页面

加载更多

JWT学习总结

官方 https://jwt.io 英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519 中文翻译 https://www.jianshu.com/p/10f5161dd9df 1. 概述 JSON Web Token(......

冷基
今天
4
0
AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
今天
4
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
11
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
5
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部