连连支付 (参考:http://open.lianlianpay.com/#cat=33----选择 LLPayDemo1230下载
http://open.lianlianpay.com/#cat=9 —-官方问题解决办法)
1、连连需要的SDK
2、连连支付需要的framework
3、连连支付导入的代码
#import "LLPayUtil.h"
#import "LLPaySdk.h"
@interface ViewController () <LLPaySdkDelegate> //遵守协议
@property (nonatomic, retain) NSMutableDictionary *orderDic;
@end
#pragma mark - 连连支付 订单支付
- (void)pay{
self.orderDic = [self createOrder];
LLPayUtil *payUtil = [[LLPayUtil alloc] init];
// 进行签名
NSDictionary *signedOrder = [payUtil signedOrderDic:self.orderDic
andSignKey:kLLPartnerKey];
[LLPaySdk sharedSdk].sdkDelegate = self;
// TODO: 根据需要使用特定支付方式
// 快捷支付
[[LLPaySdk sharedSdk] presentQuickPaySdkInViewController:self withTraderInfo:signedOrder];
// 认证支付
// [[LLPaySdk sharedSdk] presentVerifyPaySdkInViewController:self withTraderInfo:signedOrder];
// 预授权
//[self.sdk presentPreAuthPaySdkInViewController:self withTraderInfo:signedOrder];
}
#pragma mark - 创建订单
/*
正式环境 认证支付测试商户号 201408071000001543
MD5 key 201408071000001543test_20140812
正式环境 快捷支付测试商户号 201408071000001546
MD5 key 201408071000001546_test_20140815
*/
// TODO: 修改两个参数成商户自己的配置
static NSString *kLLOidPartner = @"201408071000001546"; // 商户号
static NSString *kLLPartnerKey = @"201408071000001546_test_20140815"; // 密钥
- (NSMutableDictionary*)createOrder{
NSString *partnerPrefix = @"LL"; // TODO: 修改成自己公司前缀
NSString *signType = @"MD5"; // MD5 || RSA || HMAC
NSString *user_id = @"asdbasdf1234"; //
// user_id,一个user_id标示一个用户
// user_id为必传项,需要关联商户里的用户编号,一个user_id下的所有支付银行卡,身份证必须相同
// demo中需要开发测试自己填入user_id, 可以先用自己的手机号作为标示,正式上线请使用商户内的用户编号
NSMutableDictionary *param = [NSMutableDictionary dictionary];
NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init];
[dateFormater setDateFormat:@"yyyyMMddHHmmss"];
NSString *simOrder = [dateFormater stringFromDate:[NSDate date]];
// TODO: 请开发人员修改下面订单的所有信息,以匹配实际需求
[param setDictionary:@{
@"sign_type":signType,
//签名方式 partner_sign_type 是 String RSA 或者 MD5
@"busi_partner":@"101001",
//商户业务类型 busi_partner 是 String(6) 虚拟商品销售:101001
@"dt_order":simOrder,
//商户订单时间 dt_order 是 String(14) 格式:YYYYMMDDH24MISS 14位数字,精确到秒
// @"money_order":@"0.10",
//交易金额 money_order 是 Number(8,2) 该笔订单的资金总额,单位为RMB-元。大于0的数字,精确到小数点后两位。 如:49.65
@"money_order" : @"0.01",
@"no_order":[NSString stringWithFormat:@"%@%@",partnerPrefix, simOrder],
//商户唯一订单号 no_order 是 String(32) 商户系统唯一订单号
@"name_goods":@"订单名",
//商品名称 name_goods 否 String(40)
@"info_order":simOrder,
//订单附加信息 info_order 否 String(255) 商户订单的备注信息
@"valid_order":@"10080",
//分钟为单位,默认为10080分钟(7天),从创建时间开始,过了此订单有效时间此笔订单就会被设置为失败状态不能再重新进行支付。
// @"shareing_data":@"201412030000035903^101001^10^分账说明1|201310102000003524^101001^11^分账说明2|201307232000003510^109001^12^分账说明3"
// 分账信息数据 shareing_data 否 变(1024)
@"notify_url":@"http://www.baidu.com",
//服务器异步通知地址 notify_url 是 String(64) 连连钱包支付平台在用户支付成功后通知商户服务端的地址,如:http://payhttp.xiaofubao.com/back.shtml
// @"risk_item":@"{\"user_info_bind_phone\":\"13958069593\",\"user_info_dt_register\":\"20131030122130\"}",
//风险控制参数 否 此字段填写风控参数,采用json串的模式传入,字段名和字段内容彼此对应好
@"risk_item" : [LLPayUtil jsonStringOfObj:@{@"user_info_dt_register":@"20131030122130"}],
@"user_id": user_id,
//商户用户唯一编号 否 该用户在商户系统中的唯一编号,要求是该编号在商户系统中唯一标识该用户
// @"flag_modify":@"1",
//修改标记 flag_modify 否 String 0-可以修改,默认为0, 1-不允许修改 与id_type,id_no,acct_name配合使用,如果该用户在商户系统已经实名认证过了,则在绑定银行卡的输入信息不能修改,否则可以修改
// @"card_no":@"6227001540670034271",
//银行卡号 card_no 否 银行卡号前置,卡号可以在商户的页面输入
// @"no_agree":@"2014070900123076",
//签约协议号 否 String(16) 已经记录快捷银行卡的用户,商户在调用的时候可以与pay_type一块配合使用
}];
BOOL isIsVerifyPay = YES;
if (isIsVerifyPay) {
[param addEntriesFromDictionary:@{
@"id_no":@"370782199312027016",//@"339005198403100026",
//证件号码 id_no 否 String
@"acct_name":@"安良浩",//@"测试号",
//银行账号姓名 acct_name 否 String
}];
}
param[@"oid_partner"] = kLLOidPartner;
return param;
}
#pragma -mark 支付结果 LLPaySdkDelegate
// 订单支付结果返回,主要是异常和成功的不同状态
// TODO: 开发人员需要根据实际业务调整逻辑
- (void)paymentEnd:(LLPayResult)resultCode withResultDic:(NSDictionary *)dic
{
NSString *msg = @"支付异常";
switch (resultCode) {
case kLLPayResultSuccess:
{
msg = @"支付成功";
NSString* result_pay = dic[@"result_pay"];
if ([result_pay isEqualToString:@"SUCCESS"])
{
//
//NSString *payBackAgreeNo = dic[@"agreementno"];
// TODO: 协议号
}
else if ([result_pay isEqualToString:@"PROCESSING"])
{
msg = @"支付单处理中";
}
else if ([result_pay isEqualToString:@"FAILURE"])
{
msg = @"支付单失败";
}
else if ([result_pay isEqualToString:@"REFUND"])
{
msg = @"支付单已退款";
}
}
break;
case kLLPayResultFail:
{
msg = @"支付失败";
}
break;
case kLLPayResultCancel:
{
msg = @"支付取消";
}
break;
case kLLPayResultInitError:
{
msg = @"sdk初始化异常";
}
break;
case kLLPayResultInitParamError:
{
msg = dic[@"ret_msg"];
}
break;
default:
break;
}
NSString *showMsg = [msg stringByAppendingString:[LLPayUtil jsonStringOfObj:dic]];
[[[UIAlertView alloc] initWithTitle:@"结果"
message:showMsg
delegate:nil
cancelButtonTitle:@"确认"
otherButtonTitles:nil] show];
}
注意:①、修改一下Demo里面的代码就可以运行
②、我只接触过快捷支付和认证支付,可以这样进行调用
只做了上面的操作还是会报错误的,需要进行下面的操作
另外需要注意:
假如你只使用md5,hmac,请不用添加,libRsaCrypto.a,并把LLPayUtil.h里面的 kLLPayUtilNeedRSASign 注释
假如你使用rsa, 请全部添加,并 把LLPayUtil.h里面的 kLLPayUtilNeedRSASign 注释取消