金融魔方红包接入文档
一、更新说明
本文匹配Framework版本:V1.4.1
(更新时间: 2016/12/20
)
更新内容【建议更新
】
- 1.Scheme参数可配置
二、产品功能说明
金融魔方IM红包SDK是一款实现App快速集成发单聊红包、发群聊红包、拆红包并查看交易记录等功能的SDK。
三、压缩包内容
包名为jrmf-iOS-IMSDK
【注:jmrfLib文件夹中的JYangToolKit.framework为金融魔方SDK支持工具,若您集成了金融魔方的多款产品,例如红包、支付等,引入其中一个JYangToolKit.framework即可】
- jrmfLib文件夹:SDK文件夹,直接导入项目中
- word文件:说明文档
- demo文件夹:示例
- AlipaySDK文件夹:支付宝SDK
四、集成流程详解
1.启动Xcode,把iOS包中jrmfLib文件夹拷贝到项目文件夹下,并导入到项目工程中。
【注1:导入文件夹时,一定要勾选Add to targets,否则https证书会访问不到。】
【注2:金融魔方https证书jrmf.cer
,多个SDK引入一个即可】
2.Build Settings 中 Other Linker Flags
添加 –ObjC
3.需要在App项目的plist手动添加以下key和value来支持支付宝ATS,其余网络请求均为https
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>alipay.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>alipayobjects.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
4.支持支付宝支付,需将AlipaySDK文件夹如上导入,并在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖:
5.在AppDelegate.m文件中,增加头文件引用。
#import <AlipaySDK/AlipaySDK.h>
6.应用注册scheme
,在plist
文件中定义URL types
,值在instanceJrmfPaySDK
方法中传递。
7.在@implementation AppDelegate中增加如下代码
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
if ([url.host isEqualToString:@"safepay"]) {
//跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"App Delegate 8.0 result = %@",resultDic);
if ([[resultDic objectForKey:@"resultStatus"] isEqualToString:@"9000"]) {
[JrmfPacket doActionAlipayDone];
}
}];
}
return YES;
}
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
if ([url.host isEqualToString:@"safepay"]) {
//跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"App Delegate 9.0 result = %@",resultDic);
if ([[resultDic objectForKey:@"resultStatus"] isEqualToString:@"9000"]) {
[JrmfPacket doActionAlipayDone];
}
}];
}
return YES;
}
五、客户端调用
【注:demo中‘huanqiu’为测试渠道,对thirdToken未做校验。】
1.在需要调起framework时引入头文件
#import <JrmfPacketKit/JrmfPacket.h>
2.启动初始化
在didFinishLaunchingWithOptions函数中,进行红包参数初始化:
/**
JrmfSDK 注册方法
@param partnerId 渠道名称(我们公司分配给你们的渠道字符串)
@param envName 红包名称
@param seheme 支付宝回调Scheme【保证格式的正确性】
@param isOnLine 是否正式环境 YES:正式环境 NO:测试环境
*/
+ (void)instanceJrmfPacketWithPartnerId:(NSString *)partnerId EnvelopeName:(NSString *)envName SchemeUrl:(NSString *)scheme appMothod:(BOOL)isOnLine;
3.示例方法 - 发红包
/**
* 发红包
*
* @param viewController 当前视图
* @param thirdToken 三方签名令牌
* @param isGroup 是否为群组红包
* @param receiveID 接受者ID(单人红包:接受者用户唯一标识;群红包:群组ID,唯一标识)
* @param userName 发送者昵称
* @param userHeadLink 发送者头像链接
* @param userId 发送者ID
* @param groupNum 群人数(个人红包可不传)
*
* @discussion A.三方签名令牌(服务端计算后给到app,服务端算法为md5(custUid+appsecret))
* @discussion B.用户头像字符串限制在260个字符内【外网可访问】【下同】
*/
JrmfPacket * jrmf = [[JrmfPacket alloc] init];
jrmf.delegate = self;
[jrmf doActionPresentSendRedEnvelopeViewController:self thirdToken:thirdToken withGroup:YES receiveID:KReceiveID sendUserName:KUserName sendUserHead:@"" sendUserID:kUserID groupNumber:@"55"];
4.示例方法 - 拆红包
/**
* 拆红包
*
* @param viewController 当前视图
* @param thirdToken 三方签名令牌
* @param userName 当前操作用户姓名
* @param userHeadLink 头像链接
* @param userId 当前操作用户ID
* @param envelopeId 红包ID
* @param isGroup 是否为群组红包
*
* @discussion 三方签名令牌(服务端计算后给到app,服务端算法为md5(custUid+appsecret))
*/
JrmfPacket * jrmf = [[JrmfPacket alloc] init];
jrmf.delegate = self;
[jrmf doActionPresentOpenViewController:self thirdToken:@"三方令牌" withUserName:@"用户昵称" userHead:@"用户头像链接" userID:@"用户ID" envelopeID:@"红包ID" isGroup:YES];
5.示例方法 - 昵称、头像更新
/**
* 用户信息更新
*
* aram userId 用户ID(app用户的唯一标识)
* @param userName 用户昵称
* @param userHeadLink 用户头像
* @param thirdToken 三方签名令牌
* @param completionAction 回调函数
*
* @discussion A.用户昵称、头像可单独更新,非更新是传nil即可,但不可两者同时为nil;三方签名令牌(服务端计算后给到app,服务端算法为md5(custUid+appsecret))
* B.头像的URL连接字符不要过长,不超过256个字符为宜。(所有头像链接都需要限制)【注:外网可访问】【下同】
*/
[JrmfPacket updateUserMsgWithUserId:@"用户ID" userName:@"用户昵称" userHead:@"用户头像链接" thirdToken:@"三方令牌" completion:^(NSError *error, NSDictionary *resultDic) {
NSLog(@"---------更新用户信息---------");
if (error) {
NSLog(@"error.msg = %@", error.localizedDescription);
}
else {
if ([[resultDic objectForKey:@"respstat"] isEqualToString:@"0000"]) {
NSLog(@"更新成功");
}
else {
NSLog(@"%@", [resultDic objectForKey:@"respsmsg"]);
}
}
}];
6.根据红包ID查看红包领取详情
/**
查看红包领取详情
@param userId 用户ID
@param packetId 红包ID
@param thirdToken 三方签名令牌
*/
JrmfPacket * jrmf = [[JrmfPacket alloc] init];
[jrmf doActionPresentPacketDetailInViewWithUserID:@"用户ID" packetID:@"红包ID" thirdToken:@"三方令牌"];
7.查看收支明细
/**
查看收支明细
@param userId 用户ID
@param thirdToken 三方签名令牌
*/
JrmfPacket * jrmf = [[JrmfPacket alloc] init];
[jrmf doActionPresentPacketListInViewWithUserID:@"用户ID" thirdToken:@"三方令牌"];
8.配置信息
/**
* 发红包/钱包 页面标题字号 Default:18.f
*/
@property (nonatomic, assign) float titleFont;
/**
* 发红包/钱包 页面'标题栏'颜色 支持@“#123456”、 @“0X123456”、 @“123456”三种格式
*/
@property (nonatomic, strong) NSString * packetRGB;
/**
* 发红包/钱包 页面'标题'颜色 支持@“#123456”、 @“0X123456”、 @“123456”三种格式
*/
@property (nonatomic, strong) NSString * titleColorRGB;
六、红包功能代理说明
注:当遵循代理进入发送红包页面后,可在遵循代理页面实现该函数。
@protocol jrmfManagerDelegate <NSObject>
/**
* 红包发送回调
*
* @param envId 红包ID
* @param envName 红包名称
* @param envMsg 描述信息
* @param jrmfStat 发送状态
*/
- (void)dojrmfActionDidSendEnvelopedWithID:(NSString *)envId Name:(NSString *)envName Message:(NSString *)envMsg Stat:(jrmfSendStatus)jrmfStat;
/**
* 成功领取了一个红包回调
*
* @param isDone 是否为最后一个红包;YES:领取的为最后一个红包;NO:红包未被领取完成
*
* @discussion 此函数调用时,一定是成功领取了一个红包;只有红包个数>=2的时候,isDone才有效,群红包个数为1个时,默认为NO
*/
- (void)dojrmfActionOpenPacketSuccessWithGetDone:(BOOL)isDone;
- jrmfStat 值意义
typedef enum jrmfSendStatus {
kjrmfStatCancel = 0, // 取消发送,用户行为
kjrmfStatSucess = 1, // 红包发送成功
kjrmfStatUnknow, // 其他
}jrmfSendStatus;