前段时间项目中集成了翼支付,刚开始对接的时候一脸懵逼,两家技术都是在qq中你一句我一句的聊 前期对接很是吃力,在网上找了许久的资料也是少之又少,虽然有相关人员负责对接 但是抓不到重点效率就会很慢,现在我完美对接,于是准备分享一下几点重点,供大家参考,文档现实翼支付只支持真机,,但是我模拟器可以跑啊  好开森g


1:依赖库,这个文档应该很清楚,因为翼支付不是公开的 就不上传库了,讲下需要注意的一点就是不要纠结tbd格式 ,没啥影响,另外就是你的schemes 不要配Bestpay   因为这样就回不到本应用,,,这也是翼支付不允许配和他们一样的schemes


2:参数,

这是我封装的 参数方法    服务器返回参数dict ,我接受后封装到model里面,然后拼接成一个字符串json 


#pragma mark -
#pragma mark  Private Methods
-(NSString *)orderInfosWithYiPayModel:(YiPayModel *) yiPayModel
{
    NSMutableString * orderDes = [NSMutableString string];
    // 签名参数
    //1. 接口名称
    NSString *service = @"mobile.security.pay";
    [orderDes appendFormat:@"SERVICE=%@", service];
    //2. 商户号
    [orderDes appendFormat:@"&MERCHANTID=%@", yiPayModel.MERCHANTID];
    //3. 商户密码 由翼支付网关平台统一分配给各接入商户
    [orderDes appendFormat:@"&MERCHANTPWD=%@", yiPayModel.MERCHANTPWD];
    //4. 子商户号
    [orderDes appendFormat:@"&SUBMERCHANTID=%@", yiPayModel.SUBMERCHANTID];
    //5. 支付结果通知地址 翼支付网关平台将支付结果通知到该地址,详见支付结果通知接口
    [orderDes appendFormat:@"&BACKMERCHANTURL=%@", yiPayModel.BACKMERCHANTURL];
    //6. 订单号
    [orderDes appendFormat:@"&ORDERSEQ=%@", yiPayModel.ORDERSEQ];
    //7. 订单请求流水号,唯一
    [orderDes appendFormat:@"&ORDERREQTRANSEQ=%@", yiPayModel.ORDERREQTRNSEQ];
    //8. 订单请求时间 格式:yyyyMMddHHmmss
    [orderDes appendFormat:@"&ORDERTIME=%@", yiPayModel.ORDERTIME];
    //9. 订单有效截至日期
    [orderDes appendFormat:@"&ORDERVALIDITYTIME=%@",  yiPayModel.ORDERVALIDITYTIME];
    //10. 币种, 默认RMB
    [orderDes appendFormat:@"&CURTYPE=%@", yiPayModel.CURTYPE];
    //11. 订单金额/积分扣减
    [orderDes appendFormat:@"&ORDERAMOUNT=%@", yiPayModel.ORDERAMOUNT];
    //12.商品简称
    [orderDes appendFormat:@"&SUBJECT=%@", @"纯支付"];
    //13. 业务标识 optional
    [orderDes appendFormat:@"&PRODUCTID=%@", yiPayModel.PRODUCTID];
    //14. 产品描述 optional
    [orderDes appendFormat:@"&PRODUCTDESC=%@", yiPayModel.PRODUCTDESC];
    //15. 客户标识 在商户系统的登录名 optional
    [orderDes appendFormat:@"&CUSTOMERID=%@", yiPayModel.CUSTOMERID];
    //16.切换账号标识
    [orderDes appendFormat:@"&SWTICHACC=%@", @"true"];
    NSString *SignStr =[NSString stringWithFormat:@"%@&KEY=%@",orderDes,yiPayModel.ACCOUNTID];
    
    //17. 签名信息 采用MD5加密
    NSString *signStr = [MD5 MD5:SignStr];
    [orderDes appendFormat:@"&SIGN=%@", signStr];
    
    //18. 产品金额
    [orderDes appendFormat:@"&PRODUCTAMOUNT=%@", yiPayModel.PRODUCTAMOUNT];
    //19. 附加金额 单位元,小数点后2位
    [orderDes appendFormat:@"&ATTACHAMOUNT=%@",yiPayModel.ATTACHAMOUNT];
    //24. 业务类型标识
    [orderDes appendFormat:@"&BUSITYPE=%@", @"04"];
    
    [orderDes appendFormat:@"&SIGNTYPE=%@", @"MD5"];
    
    
    return orderDes;
}


下面是所有的参数封装,和调用Bestpay的SDK的方法,慢慢消化一下,有什么不懂得可以留言给我





YiPayModel *yiPayModel = [YiPayModel getYiPayInfoWithDict:dictionary];

        
        self.model = yiPayModel;
        
        NSString *orderStr = [weakSelf_SC orderInfosWithYiPayModel:yiPayModel];
        
        NSLog(@"跳转支付页面带入信息:%@", orderStr);
        NSDictionary *dic = [[NSBundle mainBundle] infoDictionary];
        NSArray *urls = [dic objectForKey:@"CFBundleURLTypes"];
        
        BestpayNativeModel *order =[[BestpayNativeModel alloc]init];
        order.orderInfo = orderStr;
        order.launchType = launchTypePay1;
        order.scheme = [[[urls lastObject] objectForKey:@"CFBundleURLSchemes"] firstObject];
        
        [BestpaySDK payWithOrder:order fromViewController:self callback:^(NSDictionary *resultDic) {
            NSLog(@"result == %@", resultDic);
            
         }];



3:回调,这是处理订单结果的地方,在接受回调的时候我们需要进行一些简单的判断,因为我的项目中还有其他的支付方式,所以看下面代码的区别,在这里我用通知处理了一些需要在其他界面处理的一些逻辑,利用通知的话,不要忘了注销掉它。


支付回调

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    if ([sourceApplication isEqualToString:@"com.esurfingpay.bestpay"]) {
        NSMutableDictionary *payDictionary = [NSMutableDictionary dictionary];
        if ([[[url absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] containsString:@"resultCode=00"]) {
            [payDictionary setObject:@"支付成功" forKey:@"resultMsg"];
            [payDictionary setObject:[NSNumber numberWithInteger:0] forKey:@"resultFlag"];
        }else if ([[[url absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] containsString:@"resultCode=02"]){
            [payDictionary setObject:@"取消支付" forKey:@"resultMsg"];
            [payDictionary setObject:[NSNumber numberWithInteger:2] forKey:@"resultFlag"];
        }
        else{
            [payDictionary setObject:@"支付失败" forKey:@"resultMsg"];
            [payDictionary setObject:[NSNumber numberWithInteger:1] forKey:@"resultFlag"];
        }
        [[NSNotificationCenter defaultCenter] postNotificationName:KNOTIFICATION_YI_PAY_RESULT object:payDictionary];
    }else{
        
        [Pingpp handleOpenURL:url withCompletion:^(NSString *result, PingppError *error) {
            NSString *msg;
            NSMutableDictionary *payDictionary = [NSMutableDictionary dictionary];
            if (error == nil) {
                msg = result;
                [payDictionary  setObject:msg forKey:@"resultMsg"];
            } else {
                [payDictionary  setObject:[error getMsg] forKey:@"resultMsg"];
            }
            [payDictionary setObject:[NSNumber numberWithInteger:error.code] forKey:@"resultFlag"];
            [[NSNotificationCenter defaultCenter] postNotificationName:KNOTIFICATION_PAY_RESULT object:payDictionary];
            
        }];
    }
    return  YES;
}



以上就是完整的翼支付介入代码,和相关参数的介绍,期间因为参数问题调了很久 得出这么一套完整的参数结构,,希望对大家有所帮助