美文网首页
在测试环境下检测App上线后内购是否可以正常使用

在测试环境下检测App上线后内购是否可以正常使用

作者: 严兵胜 | 来源:发表于2017-06-26 11:07 被阅读0次

如网友的提问:
亲,我想问一下为什么我在沙盒下真机测试可以调起内购,为什么app上线了调不起来内购了?

操作前提:
1.使用沙河测试账号 进行支付

Snip20170626_11.png

如何申请沙河测试账号 这里就不啰嗦了 自己百度一下 网上太多了

2.使用正式的环境进行验证 如图


Snip20170626_12.png

确保这两点操作之后就可以调起支付

重点:
在验证返回的结果中 捕捉结果字典如出现以下 结果就表示 你的内购在上线之后可以正常使用了

Snip20170626_10.png

最后附上验证的代码


//沙盒测试环境验证

#define SANDBOX @"https://sandbox.itunes.apple.com/verifyReceipt"

//正式环境验证

#define AppStore @"https://buy.itunes.apple.com/verifyReceipt"

// 验证购买 -- 虽然苹果在iOS7提升了购买凭据的安全性,但是处于金钱考虑,购买完成后,一定要做凭据的验证工作

- (void)completeTransaction:(SKPaymentTransaction *)transaction {
    
    [FSXBobble showRoundProgressWithTitle:@"正在确认订单,请稍等"];
    
    // 验证凭据,获取到苹果返回的交易凭据
    
    // appStoreReceiptURL iOS7.0增加的,购买交易完成后,会将凭据存放在该地址
    
    NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
    
    // 从沙盒中获取到购买凭据
    
    NSData *receiptData = [NSData dataWithContentsOfURL:receiptURL];
    
    // 发送网络POST请求,对购买凭据进行验证
    
    //测试验证地址:https://sandbox.itunes.apple.com/verifyReceipt
    
    //正式验证地址:https://buy.itunes.apple.com/verifyReceipt
    
    NSURL *url = [NSURL URLWithString:AppStore];
    
    NSMutableURLRequest *urlRequest =
    
    [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0f];
    
    urlRequest.HTTPMethod = @"POST";
    
    NSString *encodeStr = [receiptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
    
    NSString *payload = [NSString stringWithFormat:@"{\"receipt-data\" : \"%@\"}", encodeStr];
    
    NSData *payloadData = [payload dataUsingEncoding:NSUTF8StringEncoding];
    
    urlRequest.HTTPBody = payloadData;
    
    
    
    // 提交验证请求,并获得官方的验证JSON结果 iOS9后更改了另外的一个方法
    
    NSData *result = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:nil error:nil];
    
    // 官方验证结果为空
    
    if (result == nil) {
        
        FSXLog(@"验证失败");
        [FSXBobble showErrorWithTitle:@"..苹果验证失败.."];
        
        _instance = nil;
        
        return;
        
    }
    
    // 启用正式地址时__采用沙河账号进行购买 status = 21007 表示内购在app上线后也可以使用
    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:result options:NSJSONReadingAllowFragments error:nil];
    
    if (dict != nil) {
        
        // 比对字典中以下信息基本上可以保证数据安全
        
        // bundle_id , application_version , product_id , transaction_id
        
        FSXLog(@"验证成功!购买的商品是:%@", @"_productName");
        
        [FSXBobble showSuccessWithTitle:@"支付成功"];
        
        _instance = nil;
        
    }
    
}

相关文章

  • 在测试环境下检测App上线后内购是否可以正常使用

    如网友的提问:亲,我想问一下为什么我在沙盒下真机测试可以调起内购,为什么app上线了调不起来内购了? 操作前提:1...

  • iOS 本地如何搭建IPv6环境测试你的App?

    一、本地 Mac 搭建 IPv6 测试环境 想要测试你的 APP 是否在 IPv6 环境下运转是否正常,你所需要的...

  • iOS 内购注意

    IOS 内购注意(项目加入内购后,发现正式环境支付正常,测试环境失败!!!原因是后台查询支付凭证无效!!) 提交给...

  • IOS单元测试实践

    单元测试主要是检测某个方法或者接口是否可以正常使用 一.环境搭建 略 二.测试工具 IOS自带的单元测试工具:IO...

  • 如何管理 Xcode 多编译环境

    在 App 项目开发中会有多个编译环境的需求,给测试人员的测试环境,上线前的预发环境,以及上线后的正式环境。 此外...

  • 四周搞定《JavaScript 高级程序设计》 - 读书笔记(D

    更可靠的能力检测 在浏览器环境下测试任何队形的某个特性是否存在,要使用下面这个函数: 用户代理检测

  • iOS 给APP安全升级

    检测设备是否越狱 检测设备网络环境是否开启代理 APP 禁止动态调试 如果你在Xcode调试环境下,去掉#ifnd...

  • [ios]应用内支付(内购)的开发

    本文给大家介绍下内购,部分地方是摘自网络。 创建测试App 点击新建App,会出现新建窗口; 二、添加内购 App...

  • 面试整理

    1.为什么要使用内购 因为要上线直播APP (内部有打赏主播的模块的话)必须要走内购,才能上线。 2.视频解码 软...

  • 电梯

    功能测试—单个功能: 1、电梯内分楼层键是否正常 2、电梯内开关门键是否正常 3、电梯内的报警键是否正常使用 4、...

网友评论

      本文标题:在测试环境下检测App上线后内购是否可以正常使用

      本文链接:https://www.haomeiwen.com/subject/jpbdcxtx.html