YOUPAILCIAPHelper.m 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. //
  2. // YOUPAILCIAPHelper.m
  3. // LiveChat
  4. //
  5. // Created by 张灿 on 2018/9/28.
  6. // Copyright © 2018年 caicai. All rights reserved.
  7. //
  8. #import "YOUPAILCIAPHelper.h"
  9. @implementation YOUPAILCIAPHelper
  10. +(instancetype)shareInstance
  11. {
  12. static YOUPAILCIAPHelper * shareInstance = nil;
  13. static dispatch_once_t onceToken;
  14. dispatch_once(&onceToken, ^{
  15. shareInstance = [[super allocWithZone:NULL] init];
  16. });
  17. return shareInstance;
  18. }
  19. +(id)allocWithZone:(struct _NSZone *)zone
  20. {
  21. return [YOUPAILCIAPHelper shareInstance];
  22. }
  23. -(id)copyWithZone:(struct _NSZone *)zone
  24. {
  25. return [YOUPAILCIAPHelper shareInstance];
  26. }
  27. - (void)start{
  28. //设置监听
  29. [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
  30. }
  31. - (void)youpaifpurchase:(NSString*)goodsId{
  32. if ([SKPaymentQueue canMakePayments]){
  33. [self requestProduction:goodsId];
  34. }
  35. }
  36. - (void)requestProduction:(NSString*)productionID{
  37. LCLog(@"-------------请求对应的产品信息----------------");
  38. NSArray *product = [[NSArray alloc] initWithObjects:productionID, nil];
  39. NSSet *nsset = [NSSet setWithArray:product];
  40. SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset];
  41. request.delegate = self;
  42. [request start];
  43. [ZCHUDHelper showWithStatus:@"支付中..."];
  44. }
  45. - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
  46. LCLog(@"--------------收到产品反馈消息---------------------");
  47. NSArray *product = response.products;
  48. if([product count] == 0){
  49. [ZCHUDHelper showTitle:@"应用商店无该产品"];
  50. return;
  51. }
  52. LCLog(@"productID:%@", response.invalidProductIdentifiers);
  53. LCLog(@"产品付费数量:%ld",[product count]);
  54. SKProduct *p = nil;
  55. for (SKProduct *pro in product) {
  56. LCLog(@"%@", [pro description]);
  57. LCLog(@"%@", [pro localizedTitle]);
  58. LCLog(@"%@", [pro localizedDescription]);
  59. LCLog(@"%@", [pro price]);
  60. LCLog(@"%@", [pro productIdentifier]);
  61. p = pro;
  62. }
  63. SKPayment *payment = [SKPayment paymentWithProduct:p];
  64. LCLog(@"发送购买请求");
  65. [[SKPaymentQueue defaultQueue] addPayment:payment];
  66. }
  67. //弹出错误信息
  68. - (void)request:(SKRequest *)request didFailWithError:(NSError *)error{
  69. LCLog(@"-------弹出错误信息----------");
  70. LCLog(@"%@",error);
  71. [ZCHUDHelper showTitle:@"支付失败"];
  72. }
  73. -(void) requestDidFinish:(SKRequest *)request
  74. {
  75. LCLog(@"----------反馈信息结束--------------");
  76. LCLog(@"%@",request);
  77. [ZCHUDHelper dismiss];
  78. }
  79. //paymentObserver
  80. - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction{
  81. for(SKPaymentTransaction *tran in transaction){
  82. switch (tran.transactionState) {
  83. case SKPaymentTransactionStatePurchasing:
  84. break;
  85. case SKPaymentTransactionStatePurchased:
  86. [self completeTransaction:tran];
  87. break;
  88. case SKPaymentTransactionStateRestored:
  89. [self completeTransaction:tran];
  90. break;
  91. case SKPaymentTransactionStateFailed:
  92. [self finish:tran];
  93. break;
  94. default:
  95. break;
  96. }
  97. }
  98. }
  99. - (void)completeTransaction:(SKPaymentTransaction *)transaction{
  100. LCLog(@"交易结束");
  101. // NSURL *receiptUrl=[[NSBundle mainBundle] appStoreReceiptURL];
  102. // NSData *receiptData=[NSData dataWithContentsOfURL:receiptUrl];
  103. // NSString *receiptString=[receiptData base64EncodedStringWithOptions:0];//转化为base64字符串
  104. NSString *base64Encoded = [transaction.transactionReceipt base64EncodedStringWithOptions:0];
  105. NSMutableDictionary *dict = [NSMutableDictionary dictionary];
  106. dict[@"receipt_data"] = base64Encoded;
  107. dict[@"channel"] = @"apple";
  108. //type2代表购买金币
  109. [LCHttpHelper requestWithURLString:WalletRecharge parameters:dict needToken:YES type:(HttpRequestTypePost) success:^(id responseObject) {
  110. NSDictionary* dict = (NSDictionary*)responseObject;
  111. NSInteger code = [[dict objectForKey:@"code"] integerValue];
  112. if (code==0) {//成功
  113. [ZCHUDHelper showTitle:@"购买成功"];
  114. [self finish:transaction];
  115. if (self.purchaseBlock) {
  116. self.purchaseBlock();
  117. }
  118. }
  119. } failure:^(NSError *error) {
  120. }];
  121. }
  122. - (void)finish:(SKPaymentTransaction *)transaction{
  123. [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
  124. }
  125. @end