翼支付集成

来源:互联网 发布:sqlite软件怎么用 编辑:程序博客网 时间:2024/05/11 19:35


  发个广告:iOS开发两年了,一步步走来,从小白到大白,有自己的新的体验  关注公众号一起进步,有技术、工具分享

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


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


2:参数,

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

#pragma mark -

#pragma mark  Private Methods

-(NSString *)orderInfosWithYiPayModel:(YiPayModel *) yiPayModel

{

    NSMutableString * orderDes = [NSMutableStringstring];

    // 签名参数

    //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 =[NSStringstringWithFormat:@"%@&KEY=%@",orderDes,yiPayModel.ACCOUNTID];

    

    //17. 签名信息采用MD5加密

    NSString *signStr = [MD5MD5: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 = [YiPayModelgetYiPayInfoWithDict:dictionary];

        

        self.model = yiPayModel;

        

        NSString *orderStr = [weakSelf_SCorderInfosWithYiPayModel:yiPayModel];

        

        NSLog(@"跳转支付页面带入信息:%@", orderStr);

        NSDictionary *dic = [[NSBundlemainBundle] infoDictionary];

        NSArray *urls = [dicobjectForKey:@"CFBundleURLTypes"];

        

        BestpayNativeModel *order =[[BestpayNativeModelalloc]init];

        order.orderInfo = orderStr;

        order.launchType =launchTypePay1;

        order.scheme = [[[urlslastObject] objectForKey:@"CFBundleURLSchemes"]firstObject];

        

        [BestpaySDKpayWithOrder:order fromViewController:selfcallback:^(NSDictionary *resultDic) {

            NSLog(@"result == %@", resultDic);

            

         }];



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

支付回调

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

{

    if ([sourceApplicationisEqualToString:@"com.esurfingpay.bestpay"]) {

        NSMutableDictionary *payDictionary = [NSMutableDictionarydictionary];

        if ([[[urlabsoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]containsString:@"resultCode=00"]) {

            [payDictionary setObject:@"支付成功"forKey:@"resultMsg"];

            [payDictionary setObject:[NSNumbernumberWithInteger:0]forKey:@"resultFlag"];

        }elseif ([[[url absoluteString]stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]containsString:@"resultCode=02"]){

            [payDictionary setObject:@"取消支付"forKey:@"resultMsg"];

            [payDictionary setObject:[NSNumbernumberWithInteger:2]forKey:@"resultFlag"];

        }

        else{

            [payDictionary setObject:@"支付失败"forKey:@"resultMsg"];

            [payDictionary setObject:[NSNumbernumberWithInteger:1]forKey:@"resultFlag"];

        }

        [[NSNotificationCenterdefaultCenter] postNotificationName:KNOTIFICATION_YI_PAY_RESULTobject:payDictionary];

    }else{

        

        [PingpphandleOpenURL:url withCompletion:^(NSString *result,PingppError *error) {

            NSString *msg;

            NSMutableDictionary *payDictionary = [NSMutableDictionarydictionary];

            if (error ==nil) {

                msg = result;

                [payDictionary setObject:msg forKey:@"resultMsg"];

            } else {

                [payDictionary setObject:[error getMsg]forKey:@"resultMsg"];

            }

            [payDictionary setObject:[NSNumbernumberWithInteger:error.code]forKey:@"resultFlag"];

            [[NSNotificationCenterdefaultCenter] postNotificationName:KNOTIFICATION_PAY_RESULTobject:payDictionary];

            

        }];

    }

    return YES;

}


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


原创粉丝点击