跳到主要内容

支付接口

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、支付调用

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

信息

官方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.uid = @"24874"; //游戏角色用户id,SDK登录返回的accountID
payConfig.roleId = @"10000000"; //游戏角色ID
payConfig.proId = @"com.dianhun.productId"; //支付的道具id,这个是在苹果后台配置
payConfig.proNum = @"1"; //购买道具数量
payConfig.price = @"6"; //充值金额,元,国内必传
payConfig.currentyType = @"CNY"; //充值货币类型,不传默认CNY
payConfig.orderId = @"13321123212123123"; //充值订单id,如果有则传递
payConfig.gameInfo = @"abeaseasdcaseddeaseder"; //游戏角色详细信息NSDictionary的json字符串
[DHUnionSDK purchaseWithParam:payConfig delegate:self];

3.4、 调用支付参数

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

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

名称类型含义
currencyTypeNSString货币单位(国际货币单位标准),如果其它参数传递了金额,则货币单位一定要带上。例如:CNY
totalPayNSString总充值金额(单位:分)。例如:6000
todayPayNSString今天总充值金额(单位:分)。例如:600
totalPayCountNSString总充值次数。例如:10
todayPayCountNSString今天充值笔数。例如:1
roleMoneyNSString角色当前金钱数量。例如:600
maxRechageNSString角色最大充值金额(单位:分)。例如:600
totayMaxRechageNSString角色今天最大充值金额(单位:分)。例如:600
roleLevelNSString角色等级。例如:8
VIPLevelNSString角色VIP等级。例如:2
CEValueNSString战斗力值。例如:100
EXPValueNSString经验值。例如:10000
gameVersionNSString游戏版本号。例如:1.1
loginTimeNSString角色登录时间。例如:2020-2-18 11:00:00
lastLoginTimeNSString角色上次登录事件。例如:2020-02-17 12:00
registerTimeNSString角色注册时间。例如:2019-12-12 9:09:00
onlineTimeNSString角色在线时长(单位:秒)。例如:1000
gameStageNSString角色游戏关卡数。例如:12
roleMemberNSString角色会员状态。例如: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];
}

信息

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