ios支付

#import <Foundation/Foundation.h>

#import <AVFoundation/AVFoundation.h>

#import <StoreKit/StoreKit.h>

#import <WebKit/WKWebView.h>

@interface TXObjectLoginPay : NSObject<SKPaymentTransactionObserver,SKProductsRequestDelegate>{

TXObjectLoginPay* objectLoginPay;

NSString* mReceiptData;

NSString* mPayAddress;

int mRechargeCfgId;

NSString* mAmount;

int mServerId;

NSString* mUserId;

int mRoleId;

int mUid;

WKWebView *wkwebView1;

}

  • (void)initWebview:(WKWebView *)webView;

  • (void)onObjC_IOS_InitPay:(void *) iosurl;

-(void)onObjC_IOSPay:

(NSString *)rechargeCfgId

secondKid: (NSString *) amount

secondKid1: (NSNumber *) serverId

secondKid2: (NSString *) userId

secondKid3: (NSNumber *) roleId

secondKid4: (NSNumber *) uid;

@end

#import "TXObjectLoginPay.h"

#include "YLWwiseEngine.h"

#include "PostObj.h"

//#import <AuthenticationServices/AuthenticationServices.h>

#import <StoreKit/StoreKit.h>

//登录借口

@interface TXObjectLoginPay ()

@property (nonatomic, copy) NSString *userId2; // 声明为成员变量

@end

@implementation TXObjectLoginPay

  • (void)initWebview:(WKWebView *)webView {

wkwebView1=webView;

const char *str = "Hello";

char *strPtr = const_cast<char *>(str);

self onObjC_IOS_InitPay:strPtr\]; } // 1.支付初始化,进入游戏就开始初始化 - (void)onObjC_IOS_InitPay:(void \*) iosurl{ char\* pChar = (char\*)iosurl; NSString \*str2 = \[NSString stringWithUTF8String:pChar\]; \[\[SKPaymentQueue defaultQueue\] addTransactionObserver:self\]; } //2.开始拉起支付 -(void)onObjC_IOSPay:(NSString \*)rechargeCfgId secondKid: (NSString \*) amount secondKid1: (NSNumber \*) serverId secondKid2: (NSString \*) userId secondKid3: (NSNumber \*) roleId secondKid4: (NSNumber \*) uid { NSString \*product = rechargeCfgId; NSString\* log1 =@"--1.pull recharge---"; \[self PrintIOSLog:log1\]; \[self PrintIOSLog:product\]; self.userId2 = userId; NSLog(@"--------userId2:%@", self.userId2); //NSString \*product = \[NSString stringWithFormat:@"%d",rechargeCfgId\]; NSLog(@"--------product:%@", product); NSArray \*product1 = \[\[NSArray alloc\] initWithObjects:product, nil\]; NSLog(@"--------product1:%@", product1); NSSet \*nsset = \[NSSet setWithArray:product1\]; SKProductsRequest \*request = \[\[SKProductsRequest alloc\] initWithProductIdentifiers:nsset\]; request.delegate = self; \[request start\]; } //请求对应的产品信息 - (void)requestProductData:(NSString \*)type { } //3.收到产品返回信息 - (void)productsRequest:(SKProductsRequest \*)request didReceiveResponse:(SKProductsResponse \*)response { NSArray \*product = response.products; if(\[product count\] == 0) { NSLog(@"--------------没有商品------------------"); NSString\* log1 =@"--2.no product---"; \[self PrintIOSLog:log1\]; return; } NSLog(@"productID:%@", response.invalidProductIdentifiers); NSLog(@"产品付费数量:%d",(int)\[product count\]); NSString\* log1 =@"--3.product---"; \[self PrintIOSLog:log1\]; for (SKProduct \*pro in product) { NSLog(@"desc:%@", \[pro description\]); NSLog(@"ltitle:%@", \[pro localizedTitle\]); NSLog(@"ldesc:%@", \[pro localizedDescription\]); NSLog(@"price:%@", \[pro price\]); NSLog(@"identifier:%@", \[pro productIdentifier\]); NSString\* payName =@"--4.收到产品反馈消息---"; NSString \*log = \[NSString stringWithFormat:@"%@%@%@%@%@%@",payName,\[pro description\],\[pro localizedTitle\],\[pro localizedDescription\],\[pro price\],\[pro productIdentifier\]\]; NSString \*string1 = @"--4. "; NSString \*string = \[pro.price stringValue\]; NSString \*result = \[string1 stringByAppendingString:string\]; \[self PrintIOSLog:result\]; } // SKPayment \*payment = \[SKPayment paymentWithProduct:product\[0\]\]; // NSString\* payName =@"--5.发送购买请求---"; // NSString\* payName1 =@"--5.seng buy request---"; // \[self PrintIOSLog:payName1\]; // // \[\[SKPaymentQueue defaultQueue\] addPayment:payment\]; NSLog(@"--------productsRequest 中 userId2: %@", self.userId2); SKMutablePayment \*payment = \[SKMutablePayment paymentWithProduct:product\[0\]\]; // 设置用户关联信息 if (@available(iOS 13.0, \*)) { // 使用 NSInvocation 动态调用方法(更安全) SEL selector = NSSelectorFromString(@"setAppAccountToken:"); if (\[payment respondsToSelector:selector\]) { NSInvocation \*invocation = \[NSInvocation invocationWithMethodSignature: \[payment methodSignatureForSelector:selector\]\]; \[invocation setTarget:payment\]; \[invocation setSelector:selector\]; NSData \*tokenData = \[self.userId2 dataUsingEncoding:NSUTF8StringEncoding\]; \[invocation setArgument:\&tokenData atIndex:2\]; \[invocation invoke\]; NSLog(@"成功设置 appAccountToken"); } else { NSLog(@"---- appAccountToken"); // 回退到使用 applicationUsername payment.applicationUsername = self.userId2; } } else { // 旧版本使用 applicationUsername payment.applicationUsername = self.userId2; } // 发送支付请求 \[\[SKPaymentQueue defaultQueue\] addPayment:payment\]; } //请求失败 - (void)request:(SKRequest \*)request didFailWithError:(NSError \*)error { NSLog(@"------------------错误-----------------:%@", error); \[self PrintIOSLog:@"--didFailWithError---"\]; } //反馈信息结束 - (void)requestDidFinish:(SKRequest \*)request { NSString\* payName =@"--6.反馈信息结束---"; NSString\* payName1 =@"--6.requestDidFinish---"; \[self PrintIOSLog:payName1\]; } //监听购买结果 - (void)paymentQueue:(SKPaymentQueue \*)queue updatedTransactions:(NSArray \*)transactions { for(SKPaymentTransaction \*transaction in transactions) { switch (transaction.transactionState) { case SKPaymentTransactionStatePurchased: { //交易结束 \[\[SKPaymentQueue defaultQueue\] finishTransaction:transaction\]; NSURL \*receiptUrl=\[\[NSBundle mainBundle\] appStoreReceiptURL\]; NSData \*receiptData=\[NSData dataWithContentsOfURL:receiptUrl\]; NSLog(@"------ios----receipt data: %@", receiptData); NSString \*receiptString=\[receiptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed\];//转化为base64字符串 NSLog(@"------ios-66666-7--receiptString: %@", receiptString); // \[self PrintIOSLog:@"--9.交易结束---"\]; \[self PrintIOSLog:@"--9.finish over---"\]; mReceiptData = receiptString; NSString \*jsFunction = \[NSString stringWithFormat:@"CccToJS_ApplePay('%s')", mReceiptData.UTF8String\]; \[wkwebView1 evaluateJavaScript:jsFunction completionHandler:nil\]; } break; case SKPaymentTransactionStatePurchasing: // \[self PrintIOSLog:@"--7.商品添加进列表---"\]; \[self PrintIOSLog:@"--7.product add list---"\]; break; case SKPaymentTransactionStateRestored: NSLog(@"已经购买过商品"); // \[self PrintIOSLog:@"------------已经购买过商品------------"\]; \[self PrintIOSLog:@"-----------10-SKPaymentTransactionStateRestored------------"\]; \[self restoreTransaction:transaction\]; break; case SKPaymentTransactionStateFailed: NSLog(@"交易失败"); // UnitySendMessage("SdkMessager", "IOSPayCanceled", ""); //\[self PrintIOSLog:@"------------交易失败------------"\]; \[self PrintIOSLog:@"-----------11-SKPaymentTransactionStateFailed------------"\]; \[self failedTransaction:transaction\]; break; default: break; } } } - (void)restoreTransaction:(SKPaymentTransaction \*)transaction { // ccjsbridge::excuteJS("CCToJsUtils", "CccToJS_ApplePay", "0"); NSString \*str2=@"0"; NSString \*jsFunction = \[NSString stringWithFormat:@"CccToJS_ApplePay('%s')", str2.UTF8String\]; \[wkwebView1 evaluateJavaScript:jsFunction completionHandler:nil\]; \[\[SKPaymentQueue defaultQueue\] finishTransaction: transaction\]; } //交易结束 - (void)completeTransaction:(SKPaymentTransaction \*)transaction { \[\[SKPaymentQueue defaultQueue\] finishTransaction:transaction\]; } //购买失败 - (void)failedTransaction:(SKPaymentTransaction \*)transaction { if(transaction.error.code != SKErrorPaymentCancelled) { } else { //UnitySendMessage("SdkMessager", "IOSPayCanceled", ""); } NSString \*str2=@"0"; NSString \*jsFunction = \[NSString stringWithFormat:@"CccToJS_ApplePay('%s')", str2.UTF8String\]; \[wkwebView1 evaluateJavaScript:jsFunction completionHandler:nil\]; \[\[SKPaymentQueue defaultQueue\] finishTransaction: transaction\]; } //验证receipt失败,App启动后再次验证 - (void)sendFailedIapFiles { } -(void)PrintIOSLog:(NSString\*)logValue { //NSLog(@"------------------PrintIOSLog---------------logValue:%@", logValue); //UnitySendMessage("SdkMessager", "IOSLog", logValue.UTF8String); dispatch_async(dispatch_get_main_queue(), \^{ NSString \*jsFunction = \[NSString stringWithFormat:@"CccToJS_LOG('%s')", logValue.UTF8String\]; \[wkwebView1 evaluateJavaScript:jsFunction completionHandler:nil\]; }); } @end

相关推荐
harder3211 天前
RMP模式的创新突破
开发语言·学习·ios·swift·策略模式
for_ever_love__1 天前
UI学习:UITableView的基本操作及折叠cell
学习·ui·ios
SameX1 天前
做了一个健康记录 App,聊聊 SwiftData + 拨轮交互的实现思路
ios
CyL_Cly1 天前
localsend安卓手机下载 支持win/mac/ubuntu
android·macos·智能手机
A懿轩A1 天前
Thaw:让 macOS 菜单栏重获新生的免费全能管理工具,适配 macOS Tache 26.4.1 系统,Ice平替活跃版,解决 Ice 常见报错问题
macos
诸葛亮的芭蕉扇1 天前
iOS视频自动全屏问题解决方案
ios·音视频
Bug 挖掘机1 天前
从0到1做出可复用的 iOS 自动化测试 Skill,附真机演示效果
自动化测试·测试开发·ios
掘根1 天前
【微服务即时通讯】客户端通信连接
ios·iphone
无效的名字1 天前
mac下安装openclaw
macos
00后程序员张1 天前
完整指南 iOS App上架到App Store的步骤详解
macos·ios·小程序·uni-app·objective-c·cocoa·iphone