# 支付接口

# 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";        //游戏支付时传递的自定义参数
[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: 2025/9/4 16:06:34