【问题标题】:in-app purchase Server Product Model Implementation应用内购买服务器产品模型实现
【发布时间】:2011-04-19 18:48:57
【问题描述】:

我正在尝试实现应用内购买服务器产品模型。我阅读了 Apple 文档,我明白我必须做什么,但我在某处做错了什么。 我假设我对 PHP 一无所知 :( ,所以我现在才试图理解一些东西,但我也在这个论坛中进行了搜索,我发现了很多对我有帮助的有趣的东西。 现在我逐步列出我在我的应用程序中所做的事情: - 我创建了从商店购买商品的机制,并且似乎有效
- 在我的 storeobserver 中,我添加了两种方法:encode 和 verifyReceipt(复制自 link text)到收据
- 我正在使用 ftp 服务器上传我的应用内购买文件,我还想使用它来托管 php 验证器文件。

现在我粘贴我的方法和我的 php 文件,可能我在这里做错了什么:

verifyReceipt 方法

- (BOOL)verifyReceipt:(SKPaymentTransaction *)transaction {
    NSString *jsonObjectString = [self encode:(uint8_t *)transaction.transactionReceipt.bytes length:transaction.transactionReceipt.length];      
    NSString *completeString = [NSString stringWithFormat:@"ftp://user:pass@aabbcc.com/DDDD/validator.php?receipt=%@", jsonObjectString];                               
    NSURL *urlForValidation = [NSURL URLWithString:completeString];               
    NSMutableURLRequest *validationRequest = [[NSMutableURLRequest alloc] initWithURL:urlForValidation];                          
    [validationRequest setHTTPMethod:@"GET"];    
    NSData *responseData = [NSURLConnection sendSynchronousRequest:validationRequest returningResponse:nil error:nil];  
    [validationRequest release];
    NSString *responseString = [[NSString alloc] initWithData:responseData encoding: NSUTF8StringEncoding];
    NSLog(@"%@",responseString);
    NSInteger response = [responseString integerValue];
    [responseString release];
    return (response == 0);
}

我是这样调用verifyReceipt方法的:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{
    BOOL verification=false;
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased:
                verification=[self verifyReceipt:transaction];
                if (verification) {
                    [self completeTransaction:transaction];
                }               
                break;
.......



ftp 服务器上的 validator.php

<?PHP
$receipt = json_encode(array("receipt-data" => $_GET["receipt"]));
// NOTE: use "buy" vs "sandbox" in production.
$url = "https://sandbox.itunes.apple.com/verifyReceipt";
$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL,$url);
curl_setopt($curl_handle, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $receipt); 
$response_json = curl_exec($curl_handle);
curl_close($curl_handle);
$response = json_decode($response_json);

// Save the data here!
$myFile = "testFile.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $response);
fclose($fh);
echo $response->status;
?>

我不明白到底出了什么问题,但是在服务器上没有生成 testFile.txt 并且函数 verifyReceipt 返回总是 true 因为在我的 iPhone 上,在模拟过程中,事务总是成功结束(如果我手动修改 jsonObjectString)。任何建议都非常感谢!!!!!!

【问题讨论】:

    标签: php iphone in-app-purchase


    【解决方案1】:

    看起来您使用 ftp 协议 url 调用 php 脚本。据我所知,您的 php 将永远不会执行。尝试 http:// 作为协议

    【讨论】:

      猜你喜欢
      • 2011-11-27
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多