支付寶/銀聯/微信

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

? 支付寶 //文檔idk都包含了安卓、iOS版 https://github.com/poholo/alipay
? 銀 聯 https://github.com/poholo/unionpay
? 銀聯官網資料 https://open.unionpay.com/upload/download/Development_kit85427986.rar
? Demo https://github.com/poholo/MCPayDemo
Demo給了一個訂單號,做測試使用,若出現支付失敗什么的,可能是已經被別人給支付了,或者是服務器訂單過期了 ~

一、支付寶
1.1 請閱讀支付寶文檔和Demo
1.2 導入對應的庫
將支付寶Demo中得這些東西全拷貝過來

1 localhost:alipay mac$ ls
2 APAuthV2Info.h Order.h libssl.a
3 APAuthV2Info.m Order.m openssl
4 AlipaySDK.bundle Util
5 AlipaySDK.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];
  1. order.partner = alipayPartner ;
  2. order.seller = alipaySeller;
  3. order.tradeNO = tn; 訂單ID(由商家自行制定)
  4. order.productName = [NSString stringWithFormat:@"汽車服務充值-%@",@"支付"]; 商品標題
  5. order.productDescription = [NSString stringWithFormat:@"%@:支付寶移動支付充值",@"xxxx"]; 商品描述
  6. order.amount = _txtCNY.text; 商品價格
  7. order.notifyURL = alipayNotifServerURL; 回調URL
  8. 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) {

  1. NSLog(@"reslut = %@",resultDic);
  2. if ([resultDic[@"resultStatus"] intValue]==9000) {
  3. 進入充值列表頁面
  4. NSLog(@"支付成功"); }
  5. else{
  6. NSString *resultMes = resultDic[@"memo"];
  7. resultMes = (resultMes.length<=0?@"支付失 敗":resultless);
    10.NSLog(@"%@",resultMes);
  8.                }
    
  9. }];
    

你可能會發現回調不行->設置回調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.framework、Security.framework到工程中;
c)如果你選擇的是UPPayPluginPro版本,添加QuartzCore.framework、AudioToolbox.framework, CoreAudio.framework、 MediaPlayer.framework, AVFoundation.framework和Security.framework到工程中

導入到工程,讓服務器準備一下交易流水號信息 (什么他們不懂,讓他們去看文檔 銀 聯https://github.com/poholo/unionpay),休息一下,喝杯什么好了
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.[UPPayPluginPro startPay:tn mode:self.tnMode viewController:self delegate:self];
4.*實現對應代理方法
5.#pragma mark UPPayPluginResult
6.- (void)UPPayPluginResult:(NSString *)result
7.{

  1. NSString* msg = [NSString stringWithFormat:@"%@", result];
  2. NSLog(@"msg%@",msg);
  3. if ([result isEqualToString:@"msgcancel"]) {
  4.    NSLog(@"取消銀聯支付...");
    
  5. }
  6. else if([result containsString:@"success"]){
  7.    NSLog(@"支付成功");
    
  8. }
    16.}

微信支付
微信支付工作之前的流程

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317780&token=ac5f0fd38fc8821171addbfdf5cc7d3af93cb305&lang=zh_CN

微信支付文檔

https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1

微信sdk

https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1

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

可能遇到銀聯c++編譯問題,把對應的viewcontroller切換成.mm,編譯看看。若有CreateRSADataSigner arm64的,請將支付寶給的DataSigner改成.mm即可。
其他可以參照我的demo
https://github.com/poholo/MCPayDemo

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 這是開頭語 前不久做了一個項目,涉及到支付寶和和銀聯支付,支付寶和銀聯都是業界的老大哥,文檔、SDK都是很屌,屌的...
    斯科特帕克閱讀 899評論 1 4
  • 支付寶 使用支付寶進行一個完整的支付功能,大致有以下步驟: 1>先與支付寶簽約,獲得商戶ID(partner)和賬...
    Jimmy_阿達閱讀 654評論 1 1
  • 誰就發怒發怒度楚杰俊辰俊辰呢妒賢忌能楚杰長褲短褲反饋大家楚杰可參考參考反饋反饋楚杰楚杰俊辰可楚杰
    曉瑜丶閱讀 202評論 0 0
  • 星期六 晴 張榮軒媽媽 今天是每周例行去奶奶家的日子,上午兒子學象棋,下午給他加了一節鋼琴課。下午他主動提出...
    愛意暖人心閱讀 154評論 0 1
  • 如果我和你不再聯系,希望你不要介意,這不代表我不想你,走到哪里還是會有惦記。 ??仲夏,夜未眠。輾轉反側,我以為這...
    非著名頹廢家閱讀 379評論 0 3