翼支付集成


  發個廣告:iOS開發兩年了,一步步走來,從小白到大白,有自己的新的體驗  關注公衆號一起進步,有技術、工具分享

前段時間項目中集成了翼支付,剛開始對接的時候一臉懵逼,兩家技術都是在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;

}


以上就是完整的翼支付介入代碼,和相關參數的介紹,期間因爲參數問題調了很久 得出這麼一套完整的參數結構,,希望對大家有所幫助


發佈了70 篇原創文章 · 獲贊 44 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章