iOS----支付/銀聯/微信

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

資料

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

一、支付寶

1.1 請閱讀支付寶文檔和Demo

1.2 導入對應的庫

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

1localhost:alipay mac$ ls

2APAuthV2Info.h        Order.h            libssl.a

3APAuthV2Info.m        Order.m            openssl

4AlipaySDK.bundle    Util

5AlipaySDK.framework    libcrypto.a

 

導入系統

1.SystemConfiguration.framework

設置一下search paths

1 build setting ->搜索search path,然後你懂的完成後,編譯一下,看有沒有錯,有錯沒錯,還是下一步吧。

1.3 對接

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

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

1.合作者身份ID     alipayPartner = @"2088一串數字";

2.接口名稱        alipaySeller = @"edison1992@163.com";

3.簽名           aliPayPrivateKey = @"很長很長的私鑰";

4.公鑰           alipayRSA_PUBLIC=@"一般長";  客戶端不用服務器都給我了--~

5.服務器異步通知頁面路徑  alipayNotifServerURL = @"一個網址"; //支付結果,支付寶會通知服務器

 

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

1.Order \*order = [[Order alloc] init];

2.order.partner = alipayPartner ;

3.order.seller = alipaySeller;

4.order.tradeNO = tn; 訂單ID(由商家自行制定)

5.order.productName = [NSString stringWithFormat:@"汽車服務充值-%@",@"支付"]; 商品標題

6.order.productDescription = [NSString stringWithFormat:@"%@:支付寶移動支付充值",@"xxxx"]; 商品描述

7.order.amount = _txtCNY.text; 商品價格

8.order.notifyURL =  alipayNotifServerURL; 回調URL

9.order.service = @"mobile.securitypay.pay";

10.order.paymentType = @"1";

11.order.inputCharset = @"utf-8";

12.order.itBPay = @"30m";

13.order.showUrl = @"m.alipay.com";

14.應用註冊scheme,AlixPayDemo-Info.plist定義URL types

15.NSString *appScheme = URLScheme;

 

調用支付寶

1.[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme c

   allback:^(NSDictionary *resultDic) {

2. NSLog(@"reslut = %@",resultDic);

3. if ([resultDic[@"resultStatus"] intValue]==9000) {

4. 進入充值列表頁面

5. NSLog(@"支付成功");                            }

7. else{

8.NSString *resultMes = resultDic[@"memo"];

9.resultMes = (resultMes.length<=0?@"支付失敗":resultMes);

10.NSLog(@"%@",resultMes);

11.                   }

12.    }];

 

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

1 上面支付時已經傳給了支付寶客戶端回調shema名稱

2 NSString *appScheme = URLScheme;

3  具體設置shema方法此處就不再累贅,這兒需要處理來自支付寶shema回調,才能完成上面方法的block回調

4  APPDelegate -

5  - (BOOL)application:(UIApplication *)application

6            openURL:(NSURL *)url

7  sourceApplication:(NSString *)sourceApplication

8         annotation:(id)annotation {

9       跳轉支付寶錢包進行支付,處理支付結果

10    [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {

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

12    }];

13    return YES;

14}

 

二、銀聯

2.1 請去看銀聯文檔和demo

2.2 導入對應的庫

SDK說明

SDK分爲以下兩個版本:

1.UPPayPlugin.h

2.UPPayPluginDelegate.h

3.libUPPayPlugin.a

 

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

1.UPPayPluginPro.h

2.UPPayPluginDelegate.h

3.libUPPayPluginPro.a

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

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

添加SDK

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

 

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

 

c)如果你選擇的是UPPayPluginPro版本,添加QuartzCore.frameworkAudioToolbox.framework,CoreAudio.framework MediaPlayer.framework, AVFoundation.frameworkSecurity.framework到工程中

 

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

2.3 對接

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

 

1.+(BOOL)startPay:(NSString*)tn

2.mode:(NSString*)mode

3.viewController:(UIViewController*)viewController

4.delegate:(id)delegate;

 

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

 

1.tn NSString* 交易流水號信息,銀聯後臺生成,通過商戶後臺返回到客戶端並傳入支付控件;

2.mode NSString* 接入模式設定,兩個值:@"00":代表接入生產環境(正式版本需要);@"01":代表接入開發測試環境(測試版本需要);

3.viewController    UIViewController*         商戶應用程序調用銀聯手機支付的當前UIViewController

4.delegate id 實現UPPayPluginDelegate方法的UIViewController;嗯,這些都是文檔中的,請仔細看看[上線的時候一定藥修改mode模式]

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

 

  • 測試使用卡號、手機號信息(此類信息僅供測試,不會發生正式交易)招商銀行預付費卡:
  • 卡號:6226 4401 2345 6785
  • 密碼:111101
  • [這個居然無效]
  • 再來一個:
  • 銀行卡號:6216261000000000018
  • 身份證號:341126197709218366
  • 手 機 號 :13552535506
  • 驗 證 碼 :123456 【要點擊獲取驗證碼,不然提交會報錯】

viewcontroller需要幹這些事情

 

1.*引入頭文件  \#import "UPPayPluginPro.h"

2.*調用接口

3.[UPPayPluginProstartPay:tn mode:self.tnMode viewController:self delegate:self];

4.*實現對應代理方法

5.\#pragma markUPPayPluginResult

6.-(void)UPPayPluginResult:(NSString \*)result

7.{

8.    NSString\* msg = [NSString stringWithFormat:@"%@", result];

9.    NSLog(@"msg%@",msg);

10.    if ([result isEqualToString:@"msgcancel"]) {

11.       NSLog(@"取消銀聯支付...");

12.    }

13.    else if([result containsString:@"success"]){

14.       NSLog(@"支付成功");

15.    }

16.}

微信支付

微信支付工作之前的流程

微信支付文檔

微信sdk

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

小記

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章