# 支付接口

# 1、支付环境配置

在Xcode工程的AppDelegate.m中,SDK初始化时会配置地区和语言,该选项同样会影响到支付功能。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    //初始化SDK,必须
    [DHUnionSDK initUnionSDK:^(int type, BOOL result) {
        if(result){
            //init success
            NSLog(@"DHUnionSDk init success");
            //设置SDK区域 0:海外  1:国内
            [DHUnionSDK configureSDKArea:1];
            //设置SDK语言
            [DHUnionSDK configureSDKLanguage:DHUnionLanguageTypeZH_CN];
            //配置SDK
            DHUnionConfig *config = [[DHUnionConfig alloc] init];
            //请在正式打包上线时设为NO,否则会调用测试的登录地址
            config.isDebug = NO;
           [DHUnionSDK configureUnionSDK:config];
        }
        else{
            //init failed
            NSLog(@"DHUnionSDk init failed");
        }
    }];
    
    return YES;
}

# 2、预拉取支付产品信息

建议在调用支付接口前先调用该接口预先拉取产品信息,这样能够提升支付速度。

该接口可选,可以在游戏初始化或者登录后调用。

# 2.1、 导入头文件

#import "DHUnionConfig.h"
#import "DHUnionDelegate.h"
#import "DHUnionSDK.h"

# 2.2、 导入拉取产品结果回调方法

@interface ViewController ()<DHUnionRequireProductInfoDelegate>

# 2.3、 传入苹果内购产品ID,拉取产品信息

拉取该产品信息后游戏不需要针对拉取的结果做额外处理,主要用于SDK内部优化支付速度,也可以获取对应道具的本地化金额和单位

[DHUnionSDK requireProductsInfoWithProductId:@[@"com.sdktw.test6",@"com.sdk.test12"] target:self];

# 2.4、 拉取产品信息结果

#pragma mark - DHUnionRequireProductDelegate
- (void)dhRequireProductsInfo:(NSArray *)products
{
    NSMutableString *mStr = [[NSMutableString alloc] initWithCapacity:0];
    for(SKProduct *product in products){
        NSLog(@"id:%@  price:%@ local:%@",product.productIdentifier,product.price,product.priceLocale);
        [mStr appendFormat:@"id:%@  price:%@ local:%@\n",product.productIdentifier,product.price,product.priceLocale];
    }
    self.resultView.text = [NSString stringWithFormat:@"拉取产品信息成功:%@",mStr];
}

- (void)dhRequireProductsInfoFailed:(NSError *)error
{
    NSLog(@"require product error:%@",error);
    self.resultView.text = [NSString stringWithFormat:@"拉取产品信息失败:%@",error];
}

# 3、支付调用

置支付参数,调用支付接口使用苹果官方支付

TIP

官方iOS SDK暂时只支持Apple官方支付

# 3.1、 导入头文件

#import "DHUnionConfig.h"
#import "DHUnionDelegate.h"
#import "DHUnionSDK.h"

# 3.2、 导入支付代理

@interface ViewController ()<DHUnionPurchaseDelegate>

# 3.3、 调用支付

DHUnionPurchaseConfigData *data = [[DHUnionPurchaseConfigData alloc] init];
data.appVersion = @"3.0";       //app版本号
data.areaId = @"400";           //玩家大区id,没有的话传个固定值
data.memo = @"purchase";        //游戏支付时传递的自定义参数(请勿使用JSON字符串或JSON对象转换成的字符串)
[DHUnionSDK registerPurchaseWithConfigData:data];
    
DHUnionPayConfig *payConfig = [[DHUnionPayConfig alloc] init];
payConfig.areaId = @"252";                           //游戏角色大区ID,没有的话传个固定值
payConfig.accountId = @"24874";                            //游戏角色用户id,SDK登录返回的accountID
payConfig.roleId = @"10000000";                      //游戏角色ID
payConfig.itemId = @"com.dianhun.productId";  //支付的道具id,这个是在苹果后台配置
payConfig.itemNum = @"1";                             //购买道具数量
payConfig.itemPrice = @"6";                       //充值金额,元,国内必传
payConfig.currency = @"CNY";              //充值货币类型,不传默认CNY
payConfig.orderId = @"13321123212123123";     //充值订单id,如果有则传递
payConfig.gameInfo = @"abeaseasdcaseddeaseder";     //游戏角色详细信息NSDictionary的json字符串
[DHUnionSDK purchaseWithParam:payConfig delegate:self];

# 3.4、 调用支付参数

参数 类型 含义 是否必须
accountId NSString 游戏角色SDK账号ID
areaId NSString 游戏角色大区ID
roleId NSString 游戏角色ID,没有的话传uid即可
itemId NSString 支付的道具ID
itemNum NSString 支付的数量,一般选1
memo NSString 支付的透传参数,用于传递给游戏服务端,可为空
itemPrice NSString 充值金额,元,国内必传 国内是,海外否
currency NSString 充值货币类型,国内不传默认CNY,海外默认USD
orderId NSString 充值订单id,如果有则传递
gameInfo NSString 游戏角色的等级,充值金额等详细信息,没有可为空,使用NSDictionary字典拼接再转成字符串格式,但请勿使用JSON字符串

gameInfo游戏角色信息详细字段(没有可不填入)

名称 类型 含义
currencyType NSString 货币单位(国际货币单位标准),如果其它参数传递了金额,则货币单位一定要带上。例如:CNY
totalPay NSString 总充值金额(单位:分)。例如:6000
todayPay NSString 今天总充值金额(单位:分)。例如:600
totalPayCount NSString 总充值次数。例如:10
todayPayCount NSString 今天充值笔数。例如:1
roleMoney NSString 角色当前金钱数量。例如:600
maxRechage NSString 角色最大充值金额(单位:分)。例如:600
totayMaxRechage NSString 角色今天最大充值金额(单位:分)。例如:600
roleLevel NSString 角色等级。例如:8
VIPLevel NSString 角色VIP等级。例如:2
CEValue NSString 战斗力值。例如:100
EXPValue NSString 经验值。例如:10000
gameVersion NSString 游戏版本号。例如:1.1
loginTime NSString 角色登录时间。例如:2020-2-18 11:00:00
lastLoginTime NSString 角色上次登录事件。例如:2020-02-17 12:00
registerTime NSString 角色注册时间。例如:2019-12-12 9:09:00
onlineTime NSString 角色在线时长(单位:秒)。例如:1000
gameStage NSString 角色游戏关卡数。例如:12
roleMember NSString 角色会员状态。例如:dayCard;monthcard;yearCard

# 3.5 支付结果

#pragma mark - DHUinonPurchaseDelegate
- (void)purchaseDidSuccess:(NSDictionary *)productInfo
{
    NSLog(@"支付成功");
    self.resultView.text = @"支付成功";
}

- (void)purchaseDidFailed:(NSError *)error
{
    NSLog(@"支付失败:%@",error);
    self.resultView.text = [NSString stringWithFormat:@"支付失败:%@",error];
}

TIP

虽然SDK客户端提供支付结果通知,但是游戏判断是否到账还是要以服务端通知为主

Last Updated: 2024/9/3 16:28:11