在iOS中接入支付寶SDK進行支付
首先,需要到支付寶的官網下載SDK https://app.alipay.com/market/productIndex.htm
選擇移動支付
點擊進去之后,找到技術集成面板,下載SDK
這個開發包種有技術集成文檔,Demo,需要用到的庫等文件,這個東西需要看一下,關於錢的東西還是耐心一點比較好
其中即時到帳批量退款那一個文件夾我沒有看,應該還用不到
商戶接入支付寶收銀台界面展示標准這個文件夾需要看,里面有需要用到的logo文件
支付寶錢包支付接口開發包是真正對開發有用的東西,其中有兩個文檔,如果沒有時間的話,就只看那個接入與使用規則文檔,其中第五條集成流程詳解
找到iOS的Demo將其解壓
雖然使用文檔上寫的特別簡單,似乎只需要拖進去兩個文件,但是其實不是這樣的,需要拖進去的文件有很多
libraries中需要存在的文件有
為什么支付寶自己的Demo怎么運行怎么順暢,而我剛把類庫導進去就報錯呢,那是因為支付寶自己的pch文件中寫了兩個import
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
而且,特么的根本不通知一聲
所以:
可能遇到的報錯問題
1
Cannot find interface declaration for "NSObject', superclass of 'Base64'
解決辦法:暫時不知道內部原因,添加#import <Foundation/Foundation.h>之后錯誤消除
2
解決辦法:暫時不知道內部原因,添加#import <Foundation/Foundation.h>之后錯誤消除
3
解決辦法:
這個東西搞了一天我也是醉了,路徑原因
在Build Settings中搜索“search”關鍵字,找到search paths
在header search paths 中添加新的路徑
$(SRCROOT)/“openssl文件夾所在路徑”
在這個Demo中,路徑就應該是 $(SRCROOT)/AliPaySDKTest/CBAliPay
這樣error就消除了
4
沒有添加SystemConfiguration.framework
5 Undefined symbols for architecture x86_64:
"CreateRSADataSigner(NSString*)", referenced from:
-[CBAliPayViewController viewDidLoad] in CBAliPayViewController.o
這是因為你的調用支付寶控件的執行文件使用的是oc與c++混編,這里需要改成使用oc編譯器來編譯
所以,要調用支付寶,最好單獨用一個文件來寫,不然可能會跳坑,比如說我,把網銀的調用代碼和支付寶的調用代碼寫到一起,網銀需要oc混編,而支付寶不讓混編,最后還要再分開單獨寫,不說了,全都是淚
這就是遇到的全部問題,一個問題一個坑,跳坑跳的好酸爽
然后就是在項目中添加代碼
/*============================================================================*/ /*=======================需要填寫商戶app申請的===================================*/ /*============================================================================*/ //這里的三個參數是公司和支付寶簽約之后得到的,沒有這三個參數無法完成支付 NSString *partner = @""; NSString *seller = @""; NSString *privateKey = @""; /*============================================================================*/ /*============================================================================*/ /*============================================================================*/ //partner和seller獲取失敗,提示 if ([partner length] == 0 || [seller length] == 0 || [privateKey length] == 0) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"缺少partner或者seller或者私鑰。" delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil]; [alert show]; return; } /* *生成訂單信息及簽名 */ //將商品信息賦予AlixPayOrder的成員變量 Order *order = [[Order alloc] init]; order.partner = partner; order.seller = seller; #warning 這里需要填商品信息 order.tradeNO = @""; //訂單ID(由商家自行制定) order.productName = @"測試商品"; //商品標題 order.productDescription = @"這是一個測試商品"; //商品描述 order.amount = @"0.01"; //商品價格 order.notifyURL = @""; //回調URL 這個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 //如果不知道scheme是神馬東西,請自行百度 NSString *appScheme = @""; //將商品信息拼接成字符串 NSString *orderSpec = [order description]; //獲取私鑰並將商戶信息簽名,外部商戶可以根據情況存放私鑰和簽名,只需要遵循RSA簽名規范,並將簽名字符串base64編碼和UrlEncode id<DataSigner> signer = CreateRSADataSigner(privateKey); NSString *signedString = [signer signString:orderSpec]; //將簽名成功字符串格式化為訂單字符串,請嚴格按照該格式 NSString *orderString = nil; if (signedString != nil) { orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"", orderSpec, signedString, @"RSA"]; [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) { NSLog(@"使用支付寶的支付結果 %@",resultDic); }]; }
支付寶到這里就完了,可喜可賀