"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > استكشاف أخطاء التحقق من صحة إيصال الشراء داخل التطبيق وإصلاحها: كيفية التعامل مع استجابات \"الحالة غير الصالحة\"؟

استكشاف أخطاء التحقق من صحة إيصال الشراء داخل التطبيق وإصلاحها: كيفية التعامل مع استجابات \"الحالة غير الصالحة\"؟

تم النشر بتاريخ 2024-11-09
تصفح:730

Troubleshooting In-App Purchase Receipt Validation: How to Handle \

التحقق من إيصالات الشراء داخل التطبيق

يعد التحقق من صحة الشراء داخل التطبيق أمرًا ضروريًا لضمان قيام المستخدمين بإجراء عمليات شراء مشروعة ومنحهم حق الوصول إلى محتوى أو وظيفة متميزة. على الرغم من توفر الوثائق، قد يكون من الصعب تنفيذ التحقق الفعال من صحة الاستلام.

يتضمن أحد الأساليب إرسال بيانات الإيصال إلى خادم PHP، والذي يقوم بعد ذلك بإعادة توجيهها إلى متجر تطبيقات Apple للتحقق منها. تؤكد الاستجابة الناجحة صحة عملية الشراء، مما يسمح لك بمتابعة تسجيل المعاملة على الخادم الخاص بك.

ومع ذلك، إذا واجهت ردود "حالة غير صالحة" أثناء التحقق من صحة الاستلام، فمن الضروري التحقق من وجود أي أخطاء مطبعية في الكود الخاص بك. يوفر نموذج التعليمات البرمجية التالي حلاً:

- (BOOL)verifyReceipt:(SKPaymentTransaction *)transaction { NSString *jsonObjectString = [التشفير الذاتي:(uint8_t *)transaction.transactionReceipt.bytes length:transaction.transactionReceipt.length]; NSString *completeString = [NSString stringWithFormat:@"http://url-for-your-php?receipt=%@", jsonObjectString]; NSURL *urlForValidation = [NSURL URLWithString:completeString]; NSMutableURLRequest *validationRequest = [[NSMutableURLRequest alloc] initWithURL:urlForValidation]; [validationRequest setHTTPMethod:@"GET"]; NSData *responseData = [NSURLConnection sendSynchronousRequest:validationRequest returnResponse:nil error:nil]; [إصدار طلب التحقق]؛ NSString *responseString = [[NSString alloc] initWithData:responseData encoding: NSUTF8StringEncoding]; استجابة NSInteger = [responseString integerValue]; [إصدار سلسلة الاستجابة]؛ العودة (الاستجابة == 0)؛ } - (NSString *) التشفير:(const uint8_t *)input length:(NSInteger)length { جدول الحرف الثابت[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 /="; NSMutableData *data = [NSMutableData dataWithLength:((الطول 2) / 3) * 4]; uint8_t *output = (uint8_t *)data.mutableBytes; لـ (NSInteger i = 0; i > 18) & 0x3F]؛ الإخراج [الفهرس 1] = الجدول [(القيمة >> 12) & 0x3F]؛ الإخراج [الفهرس 2] = (i 1) > 6) & 0x3F] : '='; الإخراج [الفهرس 3] = (i 2) > 0) & 0x3F] : '='; } إرجاع [[[تخصيص NSString] initWithData: ترميز البيانات: NSASCIIStringEncoding] الإصدار التلقائي]؛
- (BOOL)verifyReceipt:(SKPaymentTransaction *)transaction {
    NSString *jsonObjectString = [self encode:(uint8_t *)transaction.transactionReceipt.bytes length:transaction.transactionReceipt.length];      
    NSString *completeString = [NSString stringWithFormat:@"http://url-for-your-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];
    NSInteger response = [responseString integerValue];
    [responseString release];
    return (response == 0);
}

- (NSString *)encode:(const uint8_t *)input length:(NSInteger)length {
    static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 /=";

    NSMutableData *data = [NSMutableData dataWithLength:((length   2) / 3) * 4];
    uint8_t *output = (uint8_t *)data.mutableBytes;

    for (NSInteger i = 0; i > 18) & 0x3F];
        output[index   1] =                    table[(value >> 12) & 0x3F];
        output[index   2] = (i   1) > 6)  & 0x3F] : '=';
        output[index   3] = (i   2) > 0)  & 0x3F] : '=';
    }

    return [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease];
}
بالإضافة إلى ذلك، يمكن استخدام كود PHP التالي على الخادم الخاص بك للتعامل مع التحقق من صحة الإيصال وتسجيل المعاملة:

$receipt = json_encode(array("receipt-data" => $_GET ["إيصال"]))؛ // ملاحظة: استخدم "شراء" مقابل "وضع الحماية" في الإنتاج. $url = "https://sandbox.itunes.apple.com/verifyReceipt"; $response_json = call-your-http-post-here($url, $receipt); $response = json_decode($response_json); // احفظ البيانات هنا! echo $response->status;
- (BOOL)verifyReceipt:(SKPaymentTransaction *)transaction {
    NSString *jsonObjectString = [self encode:(uint8_t *)transaction.transactionReceipt.bytes length:transaction.transactionReceipt.length];      
    NSString *completeString = [NSString stringWithFormat:@"http://url-for-your-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];
    NSInteger response = [responseString integerValue];
    [responseString release];
    return (response == 0);
}

- (NSString *)encode:(const uint8_t *)input length:(NSInteger)length {
    static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 /=";

    NSMutableData *data = [NSMutableData dataWithLength:((length   2) / 3) * 4];
    uint8_t *output = (uint8_t *)data.mutableBytes;

    for (NSInteger i = 0; i > 18) & 0x3F];
        output[index   1] =                    table[(value >> 12) & 0x3F];
        output[index   2] = (i   1) > 6)  & 0x3F] : '=';
        output[index   3] = (i   2) > 0)  & 0x3F] : '=';
    }

    return [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease];
}
تذكر استبدال "call-your-http-post-here" بآلية نشر HTTP المفضلة لديك. ومن خلال تنفيذ هذا الرمز والتأكد من دقته، يمكنك التحقق بشكل فعال من عمليات شراء الإيصالات وإدارة المعاملات داخل التطبيق بثقة.

بيان الافراج أعيد طبع هذه المقالة على: 1729166962 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3