支付接口
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、 调用支付参数
参数 | 类型 | 含义 | 是否必须 |
---|---|---|---|
uid | NSString | 游戏角色SDK账号ID | 是 |
areaId | NSString | 游戏角色大区ID | 是 |
roleId | NSString | 游戏角色ID,没有的话传uid即可 | 是 |
proId | NSString | 支付的道具ID | 是 |
proNum | NSString | 支付的数量,一般选1 | 是 |
memo | NSString | 支付的透传参数,用于传递给游戏服务端,可为空 | 是 |
price | NSString | 充值金额,元,国内必传 | 国内是,海外否 |
currentyType | NSString | 充值货币类型,不传默认CNY | 否 |
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];
}
信息
虽然SDK客户端提供支付结果通知,但是游戏判断是否到账还是要以服务端通知为主