你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> iOS 支付 [支付寶、銀聯、微信]

iOS 支付 [支付寶、銀聯、微信]

編輯:IOS開發基礎

003f20Xczy6LKBKSIfjf5.png

作者:@lp_馬建成 授權本站轉載。

這是開頭語

前不久做了一個項目,涉及到支付寶和銀聯支付,支付寶和銀聯都是業界的老大哥,文檔、SDK都是很屌,屌的找不到,屌的看不懂,屌到沒朋友(吐槽而已),本文將涉及到的最新可用SDK、文檔,以及本人支付遇到的一些坑標記一下。

資料

  • 支付寶 //文檔idk都包含了安卓、iOS版

  • 銀 聯

  • 銀聯官網資料

  • Demo

Demo給了一個訂單號,做測試使用,若出現支付失敗什麼的,可能是已經被別人給支付了,或者是服務器訂單過期了 ~

一、支付寶

1.1 請閱讀支付寶文檔和Demo

1.2 導入對應的庫

將支付寶Demo中得這些東西全拷貝過來

localhost:alipay mac$ ls
APAuthV2Info.h        Order.h            libssl.a
APAuthV2Info.m        Order.m            openssl
AlipaySDK.bundle    Util
AlipaySDK.framework    libcrypto.a

導入系統庫

SystemConfiguration.framework

設置一下search paths

build setting ->搜索search path,然後你懂的

完成後,編譯一下,看有沒有錯,有錯沒錯,還是下一步吧。

1.3 對接

支付寶對節前,你還是需要從服務器拿到一下一堆東西

支付寶接口文檔中寫了3p參數列表,--! 總結下我用的到,或者說是Demo中提到的,別的就超出范圍了

合作者身份ID     alipayPartner = @"2088一串數字";
接口名稱             alipaySeller = @"[email protected]";
簽名                aliPayPrivateKey = @"很長很長的私鑰";
//公鑰            alipayRSA_PUBLIC=@"一般長";  客戶端不用服務器都給我了--~!
服務器異步通知頁面路徑  alipayNotifServerURL = @"一個網址"; //支付結果,支付寶會通知服務器

其他一些參數(與購買產品相關,設計到業務了,客戶端/服務器誰提供均可)直接貼order代碼了,具體看我的Demo示例.

Order \*order = [[Order alloc] init];
                    order.partner = alipayPartner ;
                    order.seller = alipaySeller;
                    order.tradeNO = tn; //訂單ID(由商家自行制定)
                    order.productName = [NSString stringWithFormat:@"汽車服務充值-%@",@"支付"]; //商品標題
                    order.productDescription = [NSString stringWithFormat:@"%@:支付寶移動支付充值",@"xxxx"]; //商品描述
                    order.amount = _txtCNY.text; //商品價格
                    order.notifyURL =  alipayNotifServerURL; //回調URL
                    order.service = @"mobile.securitypay.pay";
                    order.paymentType = @"1";
                    order.inputCharset = @"utf-8";
                    order.itBPay = @"30m";
                    order.showUrl = @"m.alipay.com";
                    //應用注冊scheme,在AlixPayDemo-Info.plist定義URL types
                    NSString *appScheme = URLScheme;

調用支付寶

[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
                            NSLog(@"reslut = %@",resultDic);
                            if ([resultDic[@"resultStatus"] intValue]==9000) {
                                //進入充值列表頁面
                                NSLog(@"支付成功");
                            }
                            else{
                                NSString *resultMes = resultDic[@"memo"];
                                resultMes = (resultMes.length<=0?@"支付失敗":resultMes);
                                NSLog(@"%@",resultMes);
                            }
    }];

你可能會發現回調不行->設置回調shema

//上面支付時已經傳給了支付寶客戶端回調shema名稱
 NSString *appScheme = URLScheme;
 //具體設置shema方法此處就不再累贅,這兒需要處理來自支付寶shema回調,才能完成上面方法的block回調
 在APPDelegate -
  - (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
         //跳轉支付寶錢包進行支付,處理支付結果
    [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
        NSLog(@"result = %@",resultDic);
    }];
    return YES;
}

二、銀聯

2.1 請去看銀聯文檔和demo

2.2 導入對應的庫

SDK說明

SDK分為以下兩個版本:

①    支持純無卡交易靜態庫,以下簡稱UPPayPlugin,包含文件:

UPPayPlugin.h
UPPayPluginDelegate.h
libUPPayPlugin.a

②    支持純無卡交易和VIPOS音頻口支付靜態庫,以下簡稱UPPayPluginPro,包含文件:

UPPayPluginPro.h
UPPayPluginDelegate.h
libUPPayPluginPro.a

大概這兩個庫就是上述那樣(嗯,裝懂了),具體問商務/後者後台,我們只需要知道

②需要將.m改成.mm (應該是用c++封裝的音頻...??)

添加SDK包

a)    根據商戶選擇的SDK版本,將sdk/inc目錄和sdk/libs目錄下對應版本的三個文件添加到UPPayDemo工程中;

b)    如果你選擇的是UPPayPlugin版本,添加QuartzCore.framework、Security.framework到工程中;

c)    如果你選擇的是UPPayPluginPro版本,添加QuartzCore.framework、AudioToolbox.framework, CoreAudio.framework、 MediaPlayer.framework, AVFoundation.framework和Security.framework到工程中;

d)    在工程的Build Settings中找到Other Linker Flags中添加-ObjC宏;

導入到工程,讓服務器准備一下交易流水號信息 (什麼他們不懂,讓他們去看文檔 銀 聯),休息一下,喝杯什麼好了

2.3 對接

咱們的服務器也是挺給力的,一盞茶的功夫,就將交易流水號信息 給准備好了,嗯不錯,速度對接一下。

 + (BOOL)startPay:(NSString*)tn 
mode:(NSString*)mode 
viewController:(UIViewController*)viewController 
delegate:(id)delegate;

-------------參數說明(必填)-------------------

tn                 NSString*                   交易流水號信息,銀聯後台生成,通過商戶後台返回到客戶端並傳入支付控件; 
mode            NSString*                 接入模式設定,兩個值:@"00":代表接入生產環境(正式版本需要);@"01":代表接入開發測試環境(測試版本需要);
viewController    UIViewController*          商戶應用程序調用銀聯手機支付的當前UIViewController;
delegate        id     實現UPPayPluginDelegate方法的UIViewController;

嗯,這些都是文檔中的,請仔細看看[上線的時候一定藥修改mode模式]。

mode在測試環境下可以銀聯給的測試號 tn=@"01" 測試環境

  • 測試使用卡號、手機號信息(此類信息僅供測試,不會發生正式交易)招商銀行預付費卡:

  • 卡號:6226 4401 2345 6785

  • 密碼:111101

  • [這個居然無效]

  • 再來一個:

  • 銀行卡號:6216261000000000018

  • 身份證號:341126197709218366

  • 手 機 號 :13552535506

  • 驗 證 碼 :123456 【要點擊獲取驗證碼,不然提交會報錯】

viewcontroller需要干這些事情

*引入頭文件  \#import "UPPayPluginPro.h"
*調用接口
        [UPPayPluginPro startPay:tn mode:self.tnMode viewController:self delegate:self];
*實現對應代理方法
        \#pragma mark UPPayPluginResult
        - (void)UPPayPluginResult:(NSString \*)result
        {
            NSString\* msg = [NSString stringWithFormat:@"%@", result];
            NSLog(@"msg%@",msg);
            if ([result isEqualToString:@"msgcancel"]) {
                NSLog(@"取消銀聯支付...");
            }
            else if([result containsString:@"success"]){
                NSLog(@"支付成功");
            }
      }

微信支付

微信支付工作之前的流程

微信支付文檔

微信sdk

總體來說微信支付需要審核的比較麻煩,我也沒有去弄一個號親自測試一下,按照文檔demo去走一般不會出什麼問題。

小記

可能遇到銀聯c++編譯問題,把對應的viewcontroller切換成.mm,編譯看看。若有CreateRSADataSigner arm64的,請將支付寶給的DataSigner改成.mm即可。

其他可以參照我的demo

@lp_馬建成


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved